劉振光1 羅志恒2 李紅昌31.中國中元國際工程有限公司 2中國機械工業集團有限公司 3北京交通大學
?
軟件開發項目成本估算方法應用與實踐
劉振光1羅志恒2李紅昌3
1.中國中元國際工程有限公司2中國機械工業集團有限公司3北京交通大學
摘要:軟件開發項目成本估算是軟件項目管理的關鍵所在,本文結合實例提出了基于COCOMOII和功能點法(FPA)軟件項目估算方法,在軟件開發項目前期咨詢報告的編制和評審方面具有實用價值。
關鍵詞:COCOMOII功能點法開發規模成本驅動因子比例因子
由于工作原因,筆者參與了一些國家大科學裝置項目前期咨詢報告編制和評審工作,在投資組成中軟件編制費占較大比例,金額多的可以達到數億元,最為棘手的就是軟件開發項目的成本估算。與一般建設工程項目相比軟件開發項目具有開發需求可變性強,設計和開發往往同時進行,缺少相應定額標準等特點,這就導致了軟件開發成本估算難度非常之高,尤其對于一些大型復雜,需要多個項目團隊協作完成的軟件開發項目更是如此。以往軟件開發成本估算多是基于經驗,而本文嘗試結合當今國際上較為流行的COCOMOII和功能點法(FPA)為軟件開發項目前期咨詢報告的編制和評審工作提供借鑒。
(一) COCOMO模型
COCOMO模型是當今世界上應用最廣泛的軟件成本估算模型。1981年,Barry Boehm教授在其著作《軟件工程經濟學》(Software Engineering Economics)中發表了早期的構造性成本模型COCOM0 (Constructive Cost Model)模型,標志著COCOMO的產生。早期的COCOMO是基于瀑布式開發的靜態單變量模型,它用一個以已交付的源指令行數為自變量的經驗函數計算軟件開發工作量。
后來為適應軟件開發在生命周期、技術、組件和技術等方面的快速發展,Bochm和南加州大學USC軟件工程中心不斷對COCOMO(81版)模型進行了改進和優化,于1997年發布了COCOMO II模型,并分別于1998、1999、2000年發布了COCOMO II的校正版。之后世界各國開始使用該模型,該模型以其較好的可操作性和估算的相對準確性得到業內的認可,目前是世界上應用最廣泛的軟件成本估算模型。
(二)功能點法
COCOMO模型要求有類似軟件開發的經驗方能較準確的估計將開發軟件的規模,但對于首次開發的軟件的規模很難估計,功能點法恰恰可以彌補COCOMO模型的不足。FPA(Function Point Analysis)即功能點法,是Albrecht于1979年提出來的,該方法是第一個從系統功能的角度來度量軟件規模的方法。由于該法能在早期度量軟件的規模,很多組織紛紛采用了該方法。1984年,出現了一個稱為“國際功能點用戶組” (IFPUG,International Function Point Users Group)的非贏利性聯盟,繼承和發展了這種方法。最早使用這種方法進行軟件規模測算的是IBM公司,使得這種估算方法迅速流行起來。目前有四種FPA方法已經被國際標準組織(ISO)接受成為國際標準測算方法。
本文提出采用COCOMO II(2000版)結合國際標準IFPUG(4.1版)對軟件開發成本進行估算。
本文中介紹的軟件工程量估算方法以COCOMO II模型為主,主要用于估算軟件開發工作量。功能點法作為輔助方法,主要用于沒有開發經驗的軟件規模(size)的確定。
(一)模型構成
COCOMOII是對大量已開發項目進行統計分析后得到的經驗模型,該模型主要由一個核心指標(軟件規模size)和兩個因子(比例因子和成本驅動因子)組成。其中,軟件規模以千行代碼(KSLOC)表示;比例因子包括5個子因子,成本驅動因子包括17個子因子。詳見下文。
(二)計量標準
在COCOMOII中,工作量用人月(person—months,PM)表示,即一個人完成該項目需要的時間(月)。一個人月的標準值為152小時。
人月數不同于完成項目要花費時間,開發項目所花費的時間稱之為開發進度(Time to Develop,TDEV)。
(三)計量公式
1.工作量計量公式
A為常數,該數值的取值與軟件開發類型有關。如嵌入軟件取值為2.58,電子商務軟件取值3.6,Web開發取值3.3,軍事開發取值2.77等。COCOMO II(2000版)模型中A值綜合取值為2.94;
Size為類似軟件開發的規模,用千行代碼(KSLOC)表示,1個KSLOC包括編寫代碼行和注釋行,不包括空行;
E為規模影響系數。其中,B取值為0.91;SF為5個比例因子值。E的取值也與軟件類型有關,COCOMO II(2000版)E值綜合取值為1.052;
EM為17個成本驅動因子工作量乘數。
2.開發進度經驗公式

PM為工作量(人月);
C為常數,COCOMO II(2000版)C值綜合取值為3.67;
F為進度影響系數。其中,D為常數,COCOMO II(2000版)D值為0.28;SF為5個比例因子值。F的取值也與軟件類型有關,COCOMO II(2000版)F值綜合取值為0.3;
(四)功能點法確定軟件規模
在沒有類似開發經驗的情況下,不能通過歷史數據對新開發軟件規模(Size)進行估算時,就要通過功能點法對新開發軟件規模進行估算。
IFPUG(4.1版)是較成熟的FPA方法,IFPUG功能點估算方法原理為把擬開發軟件/模塊劃分為外部輸入(EI)、外部輸出(EO)、外部查詢(EQ)、內部邏輯文件(ILF)和外部接口文件(EIF)五類功能點。軟件規模與5個功能點數量、轉化系數以及編程語言系數有關。其中,每個功能點的數量由專家集體討論確定。
(一)首先根據需求分解軟件開發任務為不同的子模塊。
(二)確定各軟件模塊的規模。根據是否具有開發經驗編制成本驅動乘數計算表(有開發經驗)和功能點法軟件規模測算表(無開發經驗)。
(三)組織各模塊項目團隊填寫COCOMOII模型成本因子工作量乘數測算表及功能點法軟件規模測算表。
(四)根據COCOMO II模型計算工作量。
(五)專家組根據計算結果,優化調整工作量。
(六)結合當地人月平均市場價格估算軟件開發費用。
通過以上分析,我們可以看出本文介紹的方法中作為核心的指標為軟件規模(Size)、成本驅動因子(EMi)和比例因子(SFj)。下面以有類似開發經驗和無類似開發經驗項目為例對本估算方法進行示范。
(一)有類似開發經驗項目
1.確定軟件開發規模
例如已經開發完成的某電子商務類軟件/模塊規模為10 KSLOC。
2.確定成本驅動乘數
成本驅動因子包括4類,17項因子,按照不同等級有不同的乘數與之對應。
產品屬性工作乘數包括:軟件可靠性、數據庫規模、產品復雜性、復用性要求、文檔編制需求;
計算機屬性工作量乘數包括:執行時間約束、主存儲約束、平臺易變性;
人員屬性工作量乘數包括:分析員能力、程序員能力、人員聯系性、應用經驗、平臺經驗、語言和工具經驗;
項目屬性和乘數包括:軟件工具使用、多點開發、開發進度。
3.確定比例因子乘數
比例因子工作量乘數(∑SFj)確定的方法為擬建項目各因子求乘數求和,一般該乘數經驗值為14.2。
4.工作量及費用估算
(二)無類似開發經驗項目
1.確定軟件規模
在沒有開發經驗的項目中就需要利用功能點法確定軟件規模,軟件規模的確定除與5類功能點的數量有關外,還與轉化乘數以及編程語言乘數有關,如下所示。
轉化乘數:外部輸入(EI)為4;外部輸出(EO)為5;外部查詢(EQ)為4;內部邏輯文件(ILF)為10,;外部接口文件(EIF)為7。
編程語言乘數:C++為53;Cobel為107;Delphi5為18;HTML4為14;Visual Basic6為24;SQL default為13;Java2為46。
2.工作量及費用估算
把以上軟件開發規模代入公式1中,得到擬開發嵌入式軟件工作量為:2.58×6.621.052=18.84(人/月)。
把工作量以及相關參數代入公式2中,得到擬開發嵌入式軟件/模塊進度為:3.67×18.840.3=8.86(月)
假設當地開發人員平均工資水平為10000元/月,那么擬開發項目費用為18.84萬元。
本文針對在軟件項目前期咨詢和評審過程中遇到的問題,提出了基于COCOMOII和功能點法的軟件開發成本估算方法,為開展以上咨詢工作提供的借鑒。但正如上文所述,軟件開發成本估算的復雜性,決定了軟件開發成本估算不可能一蹴而就,要想提高軟件估算的準確性,必須更加客觀有效地對軟件開發情況加以跟蹤和分析, 并從中得到有價值的信息,不斷改進估算模型參數,最終為決策部門提供參考。
參考文獻:
[1]Barr y W.Bo ehm .So ftwa re Co st Estimatio n With COCOMOII[M] .China Machine Pre ss .2005.
[2]Boehm B W.軟件工程經濟學[M] .李師賢等譯.北京:機械工業出版社, 2004.
[3]David Garmus, David Herron,功能點風險-成功軟件項目的測量實踐[M] .清華大學出版社, 2003.12.
[4]周海玲, 孫涌.關于基本COCOMO 模型參數校準的探討[J].微電子學與計算機, 2005,22(12):59-61.
[5]李明樹, 何梅, 楊達,等.軟件成本估算方法及應用[J].Journal of Software, 2007,18(4):775 -795.