構造性成本模型

構造性成本模型COCOMO,英文全稱為Constructive Cost Model)是由巴里·勃姆(Barry Boehm)提出的一種軟件成本估算方法。這種模型使用一種基本的回歸分析公式,使用從項目歷史和現狀中的某些特徵作為參數來進行計算。

概述

構造性成本模型最初發表於1981年巴里·勃姆《軟件工程經濟學》一書中,做為一種在軟件項中估算工作量、成本以及時間表的模型。它基於對TRW飛機製造公司的63個項目的研究。巴里·勃姆於1981年在該公司擔任軟件研究與技術總監。這項研究中的項目所包含的代碼量從2000行到10000行,包含的編程語言從匯編語言PL/I。這些項目採用瀑布模型進行軟件開發,這是在1981年時主流的軟件開發模式。

通常把上述模型引用為「COCOMO 81」。1997年,「COCOMO II」開始研發,並最終於2001年發表於《軟件成本估算:COCOMO Ⅱ模型方法》一書中。COCOMO II是COCOMO 81的繼承者,並且更適用於對現代軟件開發項目進行估算。它為現代軟件開發流程提供了更多支持,並提供了一個更新了的數據庫。對於新模型的需求來源於軟件開發技術從基於大型計算機和整晚的批處理到桌面開發、代碼重用以及利用即有軟件模塊的改變。

構造性成本模型由三個不斷深入和詳細的層次組成。第一層,「基本COCOMO」,適用對軟件開發進行快速、早期地對重要的方面進行粗略的成本估計,但因其缺少不同的項目屬性(「成本驅動者」)的因素,所以準確性有一定的局限性。「中級COCOMO」中考慮進了這些成本驅動者。「詳細COCOMO」加入了對不同軟件開發階段影響的考量。

基本COCOMO

基本COCOMO是一種靜態的單值模型,它使用以每千源代碼行數(KLoC)來度量的程序大小來計算軟件開發的工作量(及成本)。COCOMO可以應用於三種不同的軟件項目:

  • 有機項目 - 相對較小、較簡單的軟件項目,由較小的有經驗的團隊來完成,需求較少並且沒有過份嚴格的限定。
  • 中度分離項目 - 指中等規模(大小及複雜度)的軟件項目,由不同經驗水平的人組成的團隊來完成,需求中即有嚴格的部分也有不太嚴格的部分。
  • 嵌入式項目 - 指軟件項目必須依賴於一套緊湊的硬件、軟件以及符合操作限制

基本COCOMO的等式如下:

E=ab(KLOC)bb
D=cb(E)db
P=E/D

其中E是用「人月」來計算的工作量,D是指累積的開發時間(月),KLOC是指對最終發布的代碼行數的估計(千行代碼),P指需要的人數。其中的一些係數 ab,bb, cbdb如下表所示:

   Software project    ab      bb      cb      db
  
   有机型              2.4     1.05    2.5     0.38
   中度分离型          3.0     1.12    2.5     0.35
   嵌入式              3.6     1.20    2.5     0.32

基本COCOMO適用於快速、早期地粗略估算軟件成本,但它沒有考慮如不同的硬件條件、人員素質及經驗、對現代工具與技術的使用,等其它會對軟件成本有深遠影響的項目屬性,所以它的準確程度有限。

中級COCOMO

中級COCOMO對軟件工作量的估算使用了程度大小以及一組「成本驅動者」,包括對產品、硬件、人員及項目屬性的客觀評價。這種擴展包含了四類「成本驅動者」,每個類又有一些小的屬性:

  • 產品屬性
    • 軟件可靠性需求
    • 應用數據庫的大小
    • 產品複雜度
  • 硬件屬性
    • 運行時的性能約束
    • 內存約束
    • 虛擬機穩定性
    • 回復時間的需求
  • 人員屬性
    • 分析能力
    • 軟件工程能力
    • 應用經驗
    • 虛擬機的經驗
    • 編程語言經驗
  • 項目屬性
    • 採用的軟件工具
    • 採用的軟件工程手段
    • 對開發時間的要求

這15個屬性的每一個都會得到一個6點的評估,從「非常低」到「非常高」(重要性或大小)。下表中列出了可用的因子值。所有這些因子的乘積的結果就是「工作量調整因子(EAF)」通常這些因子的值是從0.9到1.4。

成本驅動者 評估
非常低 正常 很高 非常高
產品屬性
軟件可靠性需求 0.75 0.88 1.00 1.15 1.40  
應用數據庫的大小   0.94 1.00 1.08 1.16  
產品複雜度 0.70 0.85 1.00 1.15 1.30 1.65
硬件屬性
運行時的性能約束     1.00 1.11 1.30 1.66
內存約束     1.00 1.06 1.21 1.56
虛擬機穩定性   0.87 1.00 1.15 1.30  
回復時間的需求   0.87 1.00 1.07 1.15  
人員屬性
分析能力 1.46 1.19 1.00 0.86 0.71  
應用經驗 1.29 1.13 1.00 0.91 0.82  
軟件工程能力 1.42 1.17 1.00 0.86 0.70  
虛擬機的經驗 1.21 1.10 1.00 0.90    
編程語言經驗 1.14 1.07 1.00 0.95    
項目屬性
採用的軟件工具 1.24 1.10 1.00 0.91 0.82  
採用的軟件工程手段 1.24 1.10 1.00 0.91 0.83  
對開發時間的要求 1.23 1.08 1.00 1.04 1.10  

中級COCOMO的計算公式如下:

E=ai(KLoC)(bi).EAF

其中E是以「人月」來計算的工作量,「KLoC」是產品發布的代碼行數(千行代碼),「EAF」是用上述方法計算得出的因子。係數ai和冪bi在下表中給出:

軟件項目 ai bi
有機型 3.2 1.05
中度分離型 3.0 1.12
嵌入式 2.8 1.20

對於使用「E」來計算開發時間「D」的方法與基本COCOMO相同。