一個合理的環(huán)境是很重要的事情。
到此為止,估算前的項目計劃已經完成,我們已經形成一個工程開發(fā)框架。這是一個有界限的框架,雖然還不夠精確,但足以進行估算的工作。
2、估算的對象
目前為止,一個較為準確的軟件項目估算的定義是:在給定公差范圍內,對于姚開發(fā)的軟件規(guī)模的預測,以及對開發(fā)軟件所需的工作量、成本和日歷事件的預測。這個概念指出了一個事實,即估算是一種大約的估計,是將誤差限定在一定范圍內的估計。
估算主要包括以下幾個重要內容:
◆ 規(guī)模估算
軟件估算首先要將整個工程的規(guī)模估算出來,才能進行下面的其他估算。規(guī)模,就是一個工程可量化的結果,是用具體數字來體現(xiàn)項目的描述。規(guī)模估算的信息來源是清晰、有界限的用戶需求。
◆ 工作量估算
這是對開發(fā)軟件所需的工作時間的估算,它和進度估算一起決定了開發(fā)團隊的規(guī)模和構建。通常以人時、人天、人月、人年的單位來衡量,這些不同單位之間可以進行合理的轉換。
◆ 進度估算
進度時項目自始至終之間的一個時間段。進度以不同階段的里程碑作為標志。進度估算是針對以階段為單位的估算,而不是對每一個細小任務都加以估算,對任務的適當分解很重要,分解得越細反而會不準確。因為任何一個軟件工程,在各個方面都有與生俱來的不確定性。
◆ 成本估算
包括人力、物質、有形的、無形的支出成本估算,其中以人力成本為主要部分。比較容易被忽視的使學習成本、軟件培訓成本、人員變動風險成本、開發(fā)延期成本等,一些潛在成本消耗。
3、估算的策略
在軟件估算的眾多方法中,存在著“自頂向下”和“自底向上”兩種不同的策略,兩種策略的出發(fā)點不同,適應于不同的場合使用。
3.1、自頂向下的策略
這是一種站在客戶的角度來看問題的策略。它總是以客戶的要求為最高目標,任何估算結果都必須符合這個目標。其工作方法是,由項目經理為主的一個核心小組根據客戶的要求,確定一個時間期限,然后根據這個期限,將任務分解,將開發(fā)工作進行對號入座,以獲得一個估算結果。
當然由于這完全是從客戶要求出發(fā)的策略,而由于軟件工程是一個綜合項目,幾乎沒有哪個項目能完全保質保量按照預定工期完工,那么這樣一個策略就缺少了許多客觀性。但是由于這樣完成的估算比較容易被客戶、甚至被項目經理所接受,在許多公司我們看到這樣一個并不科學的策略仍然被堅定地執(zhí)行著。
3.2、自底向上的策略
與自頂向下的策略完全相反,自底向上的策略是一種從技術、人性的角度出發(fā)看問題的策略。在這樣一個策略指引下,將項目充分討論得到一個合理的任務分解。在將每個任務的難易程度,每個任務依照項目成員的特點、興趣特長進行分配,并要求進行估算。最后將估算加起來就是項目的估算值。
顯然自底向上的這種策略具有較為客觀的特點,但是它的缺點就是這樣一來項目工期就和客戶的要求不一致了。而且由于其帶來的不確定性,許多項目經理也不會采用這種方法。
4、估算的方法
顯然估算是建立在客觀實際上,對未來盡可能合理的一種預測。那么估算本身的不確定性,決定了它不可能是百分之百準確無誤的。在項目剛開始時,人們對產品需求、技術、市場預期、人員素質等因素的了解還遠遠不夠,在這種情況下人們很難作出準確的估計。但是依據某種方法進行估計顯然比瞎猜好得多。
估算方法有很多,大致分為基于分解的技術和基于經驗模型兩大類。基于分解的技術的方法包括功能點估算法、LOC估算法、MARK II等;基于經驗