在討論軟件工作量估算方法前,首先要清楚什么事軟件工作量估算。
我理解的工作量估算,就是估算軟件項目所耗費的資源數,這個資源包含人力和時間,一般用人天、人月的形式來衡量。(而軟件的成本=耗費的資源*資源的單價)。而且我個人覺得軟件工作量與軟件規模是不等的,規模是指大小是固定的,而一個軟件開發的工作量與許多因素有關,如公司的效率啊,參與開發人員的編程水平等。
從估算單位角度來說,工作量估算的方法分為兩類:直接估算法和間接估算法。直接法指基於WBS的工作量估算方法,直接估算出人天工作量;間接估算法是先估算軟件規模,再轉換成人天工作量。根據估算角度的不同,間接法又分為基於代碼行(SLOC)的工作量估算方法和基於功能點(FP)的工作量估算方法。。
1、基於WBS的工作量估算
基於WBS的工作量估算方法,是最常見的一種估算方法,也是廠商最常用的。基於WBS的工作量的估算方法,又稱為由底向上法(自下而上法),通常的估算步驟如下:
1)尋找類似的歷史項目,進行項目的類比分析,根據歷史項目的工作量憑經驗估計本項目的總工作量;
2)進行WBS分解,力所能及地將整個項目的任務進行分解;
3)參考類似項目的數據,采用類比法或專家法,估計WBS中每類活動的工作量;
4)匯總得到項目的總工作量;
5)與第1)步的結果進行印證分析,根據分析結果,確定估計結果。
2、基於代碼行的工作量估算
基於代碼行(SLOC)的工作量估算,是從開發者的技術角度出發來度量軟件。代碼行數是軟件開發者最早進行規模測量的主要方法。進行工作量估算時,先采用WBS法、類比法等統計出軟件項目的代碼行數,然后將代碼行數轉換為人天數。其中,將代碼行(SLOC)轉換成人天數主要有2種方法。
(1)生產率方法:要求有開發商每人天開發的代碼行數,估算出代碼行數后,直接利用代碼行數÷SLOC/人天,即得工作量人天數。
(2)參數模型法:利用模型,將代碼行數轉換成人天數。
常見的模型有:
Putnam模型
Putnam1978 年提出的一種動態多變量模型。估算工作量的公式是:K = L^3/(Ck^3*td^4)
其中:L 代表源代碼行數(以行計),K代表整個開發過程所花費的工作量(以人年計),td 表示開發持續時間(以年計),Ck表示技術狀態常數,它反映“妨礙開發進展的限制”,取值因開發環境而異。
COCOMOⅡ模型
COCOMOⅡ模型指出,軟件開發工作量與軟件規模呈指數關系,並且工作量受16個成本驅動因子的影響。COCOMO Ⅱ的計算步驟如下:
1)估算軟件規模Size,這里以千代碼行(KSLOC)計。
2)評估比例因子SF,求指數E。
3)求成本驅動因子值EMi。求標稱進度工作量PM:
IBM模型
IBM模型是1977年IBM公司的Walston和Felix提出的。其中估算工作量的公式如下:E=5.2×L^0.91 ,L是源代碼行數(以千行計),E是工作量(以人月計)
3、基於功能點的工作量估算
基於功能點(FP)的工作量估算,是從用戶的角度來度量軟件。進行工作量估算時,先估計出軟件項目的功能點數,然后將功能點數(FP)轉換為人天數。其中,估算功能點數的主要方法有3種:IFPUG法、MarkⅡ法、COSMIC FFP法。這三種方法現在都已經成為國際標准,並有詳細的操作手冊。
將功能點(FP)轉換成人天數主要有2種方法。
1)生產率法:要求有開發商每人天開發的功能點數,估算出功能點數后,直接利用功能點數÷功能點/天,即得工作量人天數。對於開發商每人天開發的功能點數,SPR有統計,中國的值大約在5.5個功能點/人月。
2)經驗模型法
可以依照本企業的歷史數據得到關於功能點和工作量的統計方程;也可以采用已有的經驗模型,例如:COCOMOⅡ模型