一天晚上睡不著覺,無聊,亂想,遂有如下文章:寫完之后發(fā)現(xiàn)很多漏洞,呵呵。不過也有些可取之處
發(fā)上來留個紀念吧。
軟件開發(fā)中,有一些方法被反復利用:抽象,泛型,折中。所以試著以這些方法來分析軟件開發(fā)的過程。
人類的行為大部分可以抽象成這樣:????????????? ?
過程一、目標---實施--->成功
過程二、目標---實施--->失敗
大部分人都希望走過程一這樣的路,如何在軟件開發(fā)中走好一這條路呢,下邊開始分析。
軟件公司的目標:
獲取利潤-->保住利潤-->減少成本
軟件公司的實施:
開發(fā)軟件,賣出-->不退貨賠款,增加回頭客-->壓縮成本。
軟件公司的成功方法:
保證實施過程路線正確,并順利進行。對應實施的過程,如下
軟件符合需求-->Bug少,性能高-->開發(fā)成本少,維護成本少.
在開始長篇大論之前,插播一段:
記得不知道誰說過:"沒有一定成功的方法,但可以通過了解失敗的方法來提高成功率".我想這也是人們喜歡
排除法的原因吧。本文的很多思想來自這個標準.
--------------------------------------------------------------------------
一、開發(fā)出符合需求的軟件:
1、開發(fā)出不符合需求軟件的原因:
?(1)、需求挖掘不夠????? (前期需求挖掘不夠)??????
?(2)、人員流動???????? (大量骨干人才在項目進行期流失)
?(3)、實現(xiàn)力不夠??????? (技術儲備,人才儲備不夠)
?(4)、反饋不夠????????? (有這樣一種情況,客戶的需求是現(xiàn)實中不可能實現(xiàn)的,要說服客戶做一些放棄)
2、解決上邊問題的一些方法:
?(1)、RUP 文檔 溝通
?(2)、文檔 企業(yè)文化 管理
?(3)、技術積累 人才儲備
?(4)、溝通
總結:仔細分析下來,發(fā)現(xiàn)在這個過程中,技術人員占的比例很小,仔細考慮一下,這也是很多公司不重視技術
人員的原因,因為他們的要求是作出符合用戶需求的軟件,賣出去就好了。因為在這個環(huán)節(jié)技術人員不是主導,
只要招聘的到開發(fā)人員來做軟件就好.(中國最不缺的就是人),這個話題還是不多說的好.
二、開發(fā)出Bug少、性能高的軟件
1、Bug多、性能低下的原因:
?(1)、測試力度不夠
?(2)、管理混亂
?(3)、開發(fā)人員責任心與技術不夠
2、解決上邊問題的方法:
?(1)、專門的測試小組,對測試的重視程度,測試完善程度(是否有單體、集成、壓力等測試)
??? (2)、有完善的質量管理體系和方法(例如bugtrace QA Junit等測試軟件的使用 責任明確)
??? (3)、企業(yè)文化、內部技術交流、引進人才
總結:在這個問題上,技術人員的主導作用在大幅提高,Bug的多少主要取決于測試的投入力度和規(guī)范化
性能的高低,主要取決于開發(fā)人員的素質,對開發(fā)語言,使用框架,數(shù)據(jù)庫等的了解程度和追求高質量的心態(tài).
三、減少成本,經(jīng)驗表明,減少軟件成本的主要方法是減少維護成本.
1、增加維護成本的原因:
?(1)、軟件總體設計混亂,結構不清晰
?(2)、代碼編寫的濫(命名不規(guī)范? 注釋不夠? 縮進混亂? 邏輯不清晰)
?(3)、文檔的保存和維護
2、解決方法:
?(1)、設計模式?? 管理方法(建議看看<<人月神話>>這本書)
?(2)、編碼規(guī)范
?(3)、CMM ISO等
--------------------------------------------------------------------------------
大部分在學習一門語言的時候喜歡看一下Hello World,所以寫個HelloWorld體現(xiàn)一下上邊的過程
(只從某個角度)
一、demo版本Hello World
1
public
?
class
?HelloWorld?
{
2
????
public
?
static
?
void
?main(String[]?args)?
{
3
????????System.out.println(
"
Hello?World!
"
);
4
????}
5
}
二、符合需求的Hello World
1,經(jīng)過需求調研,客戶需要頻繁輸出HelloWorld,而不是一次
1
public?class?HelloWorldOne?
{
2
????public?static?void?main(String[]?args)?
{
3
????????while(true)
{????????????
4
????????????System.out.println("Hello?World!");
5
????????}
6
????}
7
} 馬上實現(xiàn)一個簡單符合客戶需求的原型,交給客戶,讓客戶看一下。
2,客戶反饋說不需要如此頻繁的輸出,只要一般速度就可以了
?1
public?class?HelloWorldThree?
{
?2
????public?static?void?main(String[]?args)?
{
?3
????????while(true)
{
?4
????????????try
{
?5
????????????????Date?date?=?new?Date();
?6
????????????????if?(date.getSeconds()%3==0)
{
?7
????????????????????System.out.println("Hello?World!");
?8
????????????????}
?9
????????????}catch(Exception?e)
{
10
????????????}
11
????????}
12
????}
13
} 改一下原型,給客戶看
3,客戶再次反饋說我們需要是上午快點,下午慢點的的Hello World
?1
import?java.util.Date;
?2
public?class?HelloWorldTwo?
{
?3
????public?static?void?main(String[]?args)?
{
?4
????????while(true)
{
?5
????????????try
{
?6
????????????????Date?date?=?new?Date();
?7
????????????????if(date.getHours()<12)
{
?8
????????????????????if(date.getSeconds()%2?==0)
{
?9
????????????????????????System.out.println("Hello?World!");
10
????????????????????}
11
????????????????}else
{
12
????????????????????if(date.getSeconds()%10?==0)
{
13
????????????????????????System.out.println("Hello?World!");
14
????????????????????}
15
????????????????}
16
????????????}catch(Exception?e)
{
17
????????????}
18
????????}
19
????}
20
} 4、......如此繼續(xù)
5、客戶提出要求,能不能開發(fā)出我想快就快,想慢就慢的程序
明確告訴他,這個是不可能的。
三、提高性能
?1
import?java.util.Date;
?2
public?class?HelloWorld?
{
?3
????public?static?void?main(String[]?args)
{
?4
????????while(true)
{
?5
????????????try
{
?6
????????????????System.out.println("Hello?World!");
?7
????????????????Date?date?=?new?Date();
?8
????????????????int?hour?=?date.getHours();
?9
????????????????if(hour>8?&&?hour<12)
{
10
????????????????????Thread.currentThread().sleep(2000);
11
????????????????}else?if(hour?>13?&&?hour?<17)
{
12
????????????????????Thread.currentThread().sleep(10000);
13
????????????????}else
{
14
????????????????????Thread.currentThread().sleep(1000*60*60);
15
????????????????}
16
????????????}catch(Exception?e)
{
17
????????????}
18
????????}
19
????}
20
} 四、增加可維護性
import?java.util.Date;

public?class?HelloWorld?
{
????

????public?static?void?main(String[]?args)
{
????????run(8,12,13,17);
????}

????////**
????*四個參數(shù)依次是??上午上班時間?,上午下班時間,下午上班時間,下午下班時間
????*/

????public?static?void?run(int?start1,int?end1,int?start2,int?end2)
{

????????while(true)
{

????????????try
{
????????????????System.out.println("Hello?World!");
????????????????Date?date?=?new?Date();
????????????????int?hour?=?date.getHours();

????????????????if(hour>start1?&&?hour<end1)
{
????????????????????Thread.currentThread().sleep(2000);

????????????????}else?if(hour?>=start2?&&?hour?<end2)
{
????????????????????Thread.currentThread().sleep(10000);

????????????????}else
{
????????????????????Thread.currentThread().sleep(1000*60*60);
????????????????}

????????????}catch(Exception?e)
{
????????????}
????????}
????}
}
