軟件開發(fā)成本估算主要指軟件開發(fā)過程中所花費的工作量及相應的代價。 不同與傳統(tǒng)的工業(yè)產品,軟件的成本不包括原材料和能源的消耗,主要是人的勞動的消耗。另外,軟件也沒有一個明顯的制造過程,它的開發(fā)成本是以一次性開發(fā)過程所花費的代價來計算的。因此,軟件開發(fā)成本的估算,應是從軟件計劃、需求分析、設計、編碼、單元測試、集成測試到認證測試,整個開發(fā)過程所花費的代價作為依據的。
軟件開發(fā)成本估算的經驗模型
Putnam 模型
1978年Putnam提出的,一種動態(tài)多變量模型。
L = Ck * K1/3 * td4/3
其中: L-----------源代碼行數(以LOC計)
K-----------整個開發(fā)過程所花費的工作量(以人年計)
td-----------開發(fā)持續(xù)時間(以年計)
Ck----------技術狀態(tài)常數,它反映“妨礙開發(fā)進展的限制”,取值因開發(fā)環(huán)境而異,見下表
Ck的典型值 | 開發(fā)環(huán)境 | 開發(fā)環(huán)境舉例 |
2000 | 差 | 沒有系統(tǒng)的開發(fā)方法,缺乏文檔和復審 |
8000 | 好 | 有合適的系統(tǒng)的開發(fā)方法,有充分的文檔和復審 |
11000 | 優(yōu) | 有自動的開發(fā)工具和技術 |
從上述方程加以變換,可以得到估算工作量的公式: K = L3/(Ck3*td4)
還可以估算開發(fā)時間: td = [L3/(Ck3*K)]1/4
COCOMO模型(constructive cost model)
這是由TRW公司開發(fā),Boehm提出的結構化成本估算模型。是一種精確的、易于使用的成本估算方法。
COCOMO模型中用到以下變量:
DSI-------源指令條數。不包括注釋。1KDSI = 1000DSI。
MM-------開發(fā)工作量(以人月計) 1MM = 19 人日 = 152 人時 =1/12 人年
TDEV-----開發(fā)進度。(以月計)
COCOMO模型中,考慮開發(fā)環(huán)境,軟件開發(fā)項目的類型可以分為3種:
組織型(organic): 相對較小、較簡單的軟件項目。開發(fā)人員對開發(fā)目標理解比較充分,與軟件系統(tǒng)相關的工作經驗豐富,對軟件的使用環(huán)境很熟悉,受硬件的約束較小,程序的規(guī)模不是很大(<50000行)
嵌入型(embedded): 要求在緊密聯(lián)系的硬件、軟件和操作的限制條件下運行,通常與某種復雜的硬件設備緊密結合在一起。對接口,數據結構,算法的要求高。軟件規(guī)模任意。如大而復雜的事務處理系統(tǒng),大型/超大型操作系統(tǒng),航天用控制系統(tǒng),大型指揮系統(tǒng)等。
半獨立型(semidetached): 介于上述兩種軟件之間。規(guī)模和復雜度都屬于中等或更高。大可達30萬行。
估算公式:
基本COCOMO模型估算工作量和進度的公式如下
工作量: MM = r*(KDSI)c
進度: TDKV = a(MM)b
其中經驗常數 r, c, a, b 取決于項目的總體類型。
COCOMO模型按其詳細程度可以分為三級:基本COCOMO模型,中間COCOMO模型,詳細COCOMO模型。其中基本COCOMO模型是是一個靜態(tài)單變量模型,它用一個以已估算出來的原代碼行數(LOC)為自變量的經驗函數計算軟件開發(fā)工作量。 中級COCOMO模型在基本COCOMO模型的基礎上,再用涉及產品、硬件、人員、項目等方面的影響因素調整工作量的估算。詳細COCOMO模型包括中間COCOMO模型的所有特性,但更進一步考慮了軟件工程中每一步驟(如分析、設計)的影響。
基本COCOMO模型
通過統(tǒng)計63個歷史項目的歷史數據,得到如下計算公式。
總體類型 | 工作量 | 進度 |
組織型 | MM = 10.4*(KDSI)1.05 | TDKV = 10.5(MM)0.38 |
半獨立型 | MM = 3.0*(KDSI)1.12 | TDKV = 10.5(MM)0.35 |
嵌入型 | MM = 3.0*(KDSI)1.20 | TDKV = 10.5(MM)0.32 |
進度計劃是從時間的角度對項目進行規(guī)劃,而成本估算則是從費用的角度對項目進行規(guī)劃。這里的費用應理解為一個抽象概念,它可以是工時、材料或人員等。
成本估算是對完成項目所需費用的估計和計劃,是項目計劃中的一個重要組成部分。要實行成本控制,首先要進行成本估算。理想的是,完成某項任務所需費用可根據歷史標準估算。但對許多工業(yè)來說,由于項目和計劃變化多端,把以前的活動與現(xiàn)實對比幾乎是不可能的。費用的信息,不管是否根據歷史標準,都只能將其作為一種估算。而且,在費時較長的大型項目中,還應考慮到今后幾年的職工工資結構是否會發(fā)生變化,今后幾年原材料費用的上漲如何,經營基礎以及管理費用在整個項目壽命周期內會不會變化等問題。所以,成本估算顯然是在一個無法以高度可靠性預計的環(huán)境下進行。在項目管理過程中,為了使時間、費用和工作范圍內的資源得到佳利用,人們開發(fā)出了不少成本估算方法,以盡量得到較好的估算。這里簡要介紹以下幾種。
1.經驗估算法
進行估計的人應有專門知識和豐富的經驗,據此提出一個近似的數字。這種方法是一種原始的方法,還稱不上估算,只是一種近似的猜測。它對要求很快拿出一個大概數字的項目是可以的,但對要求詳細的估算顯然是不能滿足要求的。
2.因素估算法
這是比較科學的一種傳統(tǒng)估算方法。它以過去為根據來預測未來,并利用數學知識。它的基本方法是利用規(guī)模和成本圖。如圖所示,圖上的線表示規(guī)模和成本的關系,圖上的點是根據過去類似項目的資料而描繪,根據這些點描繪出的線體現(xiàn)了規(guī)模和成本之間的基本關系。這里畫的是直線,但也有可能是曲線。成本包括不同的組成部分,如材料、人工和運費等。這些都可以有不同的曲線。項目規(guī)模知道以后,可以利用這些線找出成本各個不同組成部分的近似數字。
這里要注意的是,找這些點要有一個“基準年度”,目的是消除通貨膨脹的影響。畫在圖上的點應該是經過調整的數字。例如以1980年為基準年,其他年份的數字都以1980年為準進行調整,然后才能描點劃線。項目規(guī)模確定之后,從線上找出相應的點,但這個點是以1980年為基準的數字,還需要再調整到當年,才是估算出的成本數字。此外,如果項目周期較長,還應考慮到今后幾年可能發(fā)生的通貨膨脹、材料漲價等因素。
做這種成本估算,前提是有過去類似項目的資料,而且這些資料應在同一基礎上,具有可比性。
3.WBS基礎上的全面詳細估算
即利用WBS方法,先把項目任務進行合理的細分,分到可以確認的程度,如某種材料,某種設備,某一活動單元等。然后估算每個WBS要素的費用。采用這一方法的前提條件或先決步驟是:
①對項目需求作出一個完整的限定。
、谥贫ㄍ瓿扇蝿账匦璧倪壿嫴襟E。
、劬幹芖BS表。
項目需求的完整限定應包括工作報告書、規(guī)格書以及總進度表。工作報告書是指實施項目所需的各項工作的敘述性說明,它應確認必須達到的目標。如果有資金等限制,該信息也應包括在內。規(guī)格書是對工時、設備以及材料標價的根據。它應該能使項目人員和用戶了解工時、設備以及材料估價的依據?傔M度表應明確項目實施的主要階段和分界點,其中應包括長期定貨、原型試驗、設計評審會議以及其他任何關鍵的決策點。如果可能,用來指導成本估算的總進度表應含有項目開始和結束的日歷時間。
一旦項目需求被勾劃出來,應制定完成任務所必需的邏輯步驟。在現(xiàn)代大型復雜項目中,通常是用箭頭圖來表明項目任務的邏輯程序,并以此作為下一步繪制CPM或PERT圖以及WBS表的根據。
編制WBS表的簡單方法是依據箭頭圖。把箭頭圖上的每一項活動當作一項工作任務,在此基礎上再描繪分工作任務。
進度表和WBS表完成之后,可以進行成本估算了。在大型項目中,成本估算的結果后應以下述的報告形式表述出來:
、賹γ總WBS要素的詳細費用估算。還應有一個各項分工作、分任務的費用匯總表,以及項目和整個計劃的累積報表。
②每個部門的計劃工時曲線。如果部門工時曲線含有“峰”和“谷”,應考慮對進度表作若干改變,以得到工時的均衡性。
、壑鹪碌墓r費用總結。以便項目費用必須削減時,項目負責人能夠利用此表和工時曲線作權衡性研究。
、苤鹉曩M用分配表。此表以WBS要素來劃分,表明每年(或每季度)所需費用。此表實質上是每項活動的項目現(xiàn)金流量的總結。
、菰霞爸С鲱A測,它表明供貨商的供貨時間、支付方式、承擔義務以及支付原料的現(xiàn)金流量等。
采用這種方法估算成本需要進行大量的計算,工作量較大,所以只計算本身也需要花費一定的時間和費用。但這種方法的準確度較高,用這種方法作出的這些報表不僅僅是成本估算的表述,還可以用來作為項目控制的依據。高管理層則可以用這些報表來選擇和批準項目,評定項目的優(yōu)先性。 以上介紹了三種成本估算的方法。除此之外,在實踐中還可將幾種方法結合起來使用。例如,對項目的主要部分進行詳細估算,其他部分則按過去的經驗或用因素估算法進行估算。
FunctionPoing的目的是基于軟件需求產生軟件規(guī)模的估計。功能點是基于應用軟件的外部、內部特性以及軟件性能的,一種間接的軟件規(guī)模的測量。功能點與軟件成本具有重大的成本估計關系(CER :Cost EstimatingRelationship )。功能點可以作為經驗統(tǒng)計參數化軟件成本估計公式和模型的輸入,以對軟件的成本進行估計。功能點方法被廣泛的認可在信息系統(tǒng)、數據庫密集型、4GL 應用系統(tǒng)開發(fā)的規(guī)模測量。