軟體項目成本計劃
項目規模估算方法
代碼行估算法(誤差較大)
軟體項目規模: 即工作量,例如軟體規劃,軟體管理,需求分析,系統設計,編碼,測試,以及後期維護等任務。
規模機關:
- LOC(Loc of Code) 源代碼長度的測量
- FP(Function Point) 用系統的功能數量來測量
- 人月
- 人年
- 人天
軟體項目成本
- 完成軟體規模相應付出的代價
- 待開發的軟體項目需要的資金
- 人的勞動力的消耗所需要的代價是軟體産品的主要成本
- 貨币機關表示成本
代碼行估算法
- 從軟體程式量的角度定義項目規模
- 與具體的程式設計語言有關
- 分解足夠詳細
- 有一定的經驗資料
代碼行技術的主要優點
- 代碼是所有軟體開發項目都有的"産品",而且容易計算代碼行數
代碼行技術的缺點
- 對代碼行沒有公認的可接受的标準定義
- 代碼行數量依賴于所用的程式設計語言和個人的程式設計風格
- 在項目早期,需求不穩定,設計不成熟,實作不确定的情況下很難準确的估算代碼行量
- 代碼行強調編碼的工作量,隻是項目實作階段的一部分
功能點估算
傳統估算方法- - -功能點估算
- 最早提出功能點估算法的是阿爾布雷克特(Albrecht),1979年在IBM工作時提出,稱為Albrecht功能點
- 也稱為IFPUG(國際功能點使用者組織)功能點
- 适用于資訊系統
功能點估算
- 與實作的語言和技術沒有關系
- 用系統的功能數量來測量其規模
- 通過評估,權重,量化得出功能點
功能點公式:
FP=UFC*TCF
- UFC:未調整功能點計數
- TCF:技術複雜度因子(是對UFC的調整因子)
UFC:未調整功能點技術(從五個角度計算得出)
- 外部輸入(External Inputs:EI):給軟體提供面向應用的資料的項(如螢幕、表單、對話框、控件、檔案等);在這個過程中,資料穿越外部邊界進入到系統内部,并且使用内部邏輯檔案的資料。外部輸入技術的大小可以通過輸入的檔案類型,資料元素等個數來定義。
- 外部輸出(External Outputs:EO):向使用者提供(經過處理的)面向應用的資訊。例如:報表和出錯資訊等。經過内部邏輯檔案的處理向使用者提供輸出資訊。技術大小通過輸出檔案類型,資料元素個數進行決定權重,再決定技術大小。
- 外部查詢(External Inquiry:EQ):是一個輸入引出一個即時的簡單輸出,沒有處理過程。通過輸出類型,元素個數決定權重,再決定技術大小。
- 外部接口檔案(External Interface Files:EIF’S):是使用者可以識别的一組邏輯相關資料,這組資料隻能被引用。用這些接口把資訊傳送給另一個系統。接口檔案的權重通過其中的記錄元素類型和資料元素類型來決定。
- 内部邏輯檔案(Internal Logical Files:ILF’S):使用者可以識别的一組邏輯相關的資料,而且完全存在于應用的邊界之内,并且通過外部輸入維護,是邏輯主檔案的數目。是系統邊界之内的檔案,并且通過外部輸入維護。
其他功能點方法:
- Mark II功能點(主要應用在英國)
- COSMIC-FFP功能點(适用實時系統或者嵌入式系統)
用例點估算法
基于需求用例視圖的估算方法。通過需求用例視圖中的角色,用例以及相應的複雜度來确定用例點。
用例點估算流程:
- 通過用例視圖确定用例和角色,以及複雜度級别
- 确定用例權值和角色權值相加後獲得未調整的用例點
- 再計算基數複雜因子,通過因子調整未調整的用例點,獲得用例點數
- 最後通過項目生産力将用例點換算為工作量
用例點估算方法的基本步驟如下:
- 計算未調整的角色權值UAW
- 計算未調整的用例權值UUCW
- 計算未調整的用例點UUCP
- 計算技術因子TCF
- 計算環境因子ECF
- 計算調整的用例點UCP
- 計算工作量(man-hours)
1.計算未調整的角色權值UAW
2.計算未調整的用例權值UUCW
3.計算未調整的用例點UUCP
4.計算技術和環境因子TCF
5.計算環境因子ECF
6.計算調整的用例點UCP
7.計算工作量(man-hours)
總之,用例點估算方法是基于需求用例視圖确定角色和用例以及對應的複雜度級别,進而計算出用例點數。
類比(自頂向下)估算法
傳統估算方法- - -類比估算: 開發人員根據以往的完成類似項目所消耗的總成本(或工作量),來推算将要開發的軟體的總成本(或工作量),然後再估算各個工作單元的規模成本。是一種自上而下的估算形式。
類比估算- - -使用情況
- 資訊不足(例如市場招标)的時候
- 要求不是非常精确估算的時候
- 有類似的曆史項目資料
類比估算- - -主觀判斷舉例
- 需求類似
-
類比估算:10萬
曆史資料:10萬
自下而上估算法
定義: 利用任務分解圖(WBS),對各個具體工具包進行詳細的成本估算,然後将結果累加起來得出項目總成本。
特點: 相對比較準确,他的準确度來源于每個人物的估算情況,但花費時間。
估算時确定任務投入的人力,時間,成本。
三點估算法
基于任務成本的三種估算值來計算預期成本的方法。
三點估算- - -三種估算值
- 最可能成本(CM):比較現實的估算成本。即這個估算值的機率最大
- 最樂觀成本(CO):最好情況所得到的估算成本
- 最悲觀成本(CP):最差情況所得到的估算成本
三點估算結果
- 三角分布:CE=(CO+CM+CP)/3
- 貝塔分布:CE=(CO+4CM+CP)/6
參數估算法(也叫模型估算)
定義: 通過項目資料(代碼行,人數,時間,工時等),進行回歸分析,得出回歸模型。
通過參數(基于曆史項目資料,項目類型不同,環境不同,項目資料就不同,得出的模型就不同)模型估算成本的方法(是統計技術得出的數學模型)
參數模型:
- 面向LOC驅動的(輸入為代碼行)
- 面向FP驅動的(輸入為功能點)
整體公式: E=a+b*Sc*M
- E:以人月表示的工作量
- a,b,c:經驗導出的系數
- M:調節因子
- S:主要的輸入參數(通常是LOC,FP等)
建議掌握模型:
- Walston-Felix模型
- COCOMO模型
Walston-Felix模型
Walston-Felix模型舉例
用java語言估計為1個功能點46行代碼
COCOMO模型(Constructive Cost Model)
- 結構化成本模型
- 是目前應用最廣泛的參數型軟體成本估計模型
- 由Barry Boehm團隊開發
COCOMO模型
- COCOMO 81(81年提出)
- COCOMO II
COCOMO基本原理
将開發所需的工作量表示為KLOC軟體規模和一系列成本因子的函數,基本估算公式為:
- A:可以校準的常量
- S:為KLOC軟體規模
- E:為規模的指數,說明不同規模軟體具有相對規模經濟和不經濟性
- EM:為工作量乘數,反應某個項目特征對完成項目開發所需工作量的影響程度
- n:為描述軟體項目特征的成本驅動因子的個數,驅動因子可調整項目規模
COCOMO 81
模型級别(級别不同估算精度不同)
- 基本COCOMO
- 中等COCOMO
- 進階COCOMO
基本COCOMO: (靜态單變量模型)不考慮任何成本驅動,适合在項目開發的初始階段,項目的相關資訊很少,隻适合粗略的估算
中等COCOMO: 基本COCOMO模型基礎上考慮影響因素,調整模型,實在項目的需求确定以後使用,對項目有所了解之後使用,在基本模型的基礎上,通過産品,平台,人員,項目等方面的屬性影響因素來調整工作量的估算,估算精度提高
進階COCOMO: 中等COCOMOMO模型基礎上考慮各個步驟的影響。是在設計完成後使用,考慮開發不同階段影響因素的不同影響,對項目進行精确化的估算。一旦軟體的各個子產品已經确定,估算就可以使用進階模型,估算精度最高
項目類型
基本COCOMO-81
基本COCOMO-81應用舉例
中等COCOMO-81
乘法因子的成本驅動屬性: 分為産品屬性,平台屬性,人員屬性,過程屬性4個大類。4個大類又分為15個驅動因子。乘法因子若大于1,說明工作量往高調整,小于1,說明往低調整。
中等COCOMO模型對比基本COCOMO模型,估算值有了一定的調整,因為對項目的産品,平台,人員,過程有了更細的了解。
中等COCOMO-81模型應用舉例
進階COCOMO模型
- 将項目分解為一系列的子系統或子模型
- 更加準确地調整一個模型的屬性
- 對驅動因子的取值分析更為細緻
COCOMO II組成
COCOMO II-應用組裝模型
COCOMO II-早期設計模型(Early Design): 在系統設計的初始階段,隻涉及了基本的軟體結構,未對體系結構詳細設計。
COCOMO II-早期設計模型-因子和系數
COCOMO II-後體系結構模型
A是可以校準,目前設定A=2.94,B為0.91
若需要估計複用代碼或已生成代碼所需工作量,可采用複用模型
複用模型
參數模型綜述
- 根據項目資料進行回歸分析,得出回歸模型作為參數模型
- 回歸分析方法:線性回歸,多項式回歸,邏輯回歸,神經網絡,內建方法等
- 參數模型可以是線性也可以是非線性的
參數估算法
專家估算法
由多為專家進行成本估算,一個專家可能會有偏見,最好由多位專家進行估算,取得多個估算值,最後得出綜合的估算值。
Deiphi專家估算
- 這些專家互相不見面
- 專家詳細研究軟體規格說明書後,進行無記名的估算
步驟
- 組織者發給每位專家一份軟體規格說明和一張記錄估算值的表格,請專家估算
- 每位專家詳細研究軟體規格說明後,對該軟體提出3個規模的估算值,即最小值ai,最可能值mi,最大值bi
- 組織者對專家表格中的答複進行整理,計算每位專家的估算值Ei=(ai+4mi+bi)/6,然後計算出所有專家的期望值Ei=(E1+E2+E3+…+En)/n
- 綜合結果後,再組織專家無記名填表格,比較估算偏差,并查找原因
- 上述過程,重複多次最終可獲得一個多數專家共識的軟體規模
靈活估算方法
- 高層估算:采用輕量級,快速生成
- 短期估算:進行詳細的估算
Story Point估算方法
Story Point估算–常用的兩個标準
- Fibonacci:0,1,2,3,5,8,13,21,34,55,89…
- Power of 2:0,1,2,4,8,16,32,64…
Fibonacci七個等級
0,1,2,3,5,8,13七個等級
估算步驟
- 選取估算為3的story points的Story
- 将需要預估的Story與選取的Story進行比較
- 如果兩個工作量差不多,設定該Story的story point為3
- 如果工作量略少,則為2 story point
- 如果工作量更少,則為1 story point
- 若Story不需要完成,則設為0
- 同理,如果略多/更多/再多,設為5/8/13
- 若Story超過13 story point,可以認為是Epic,可再分解
成本預算
成本預算是将項目的總成本按照項目的進度分推到各個工作單元(任務項基于WBS分解的結果)中去。
成本預算的目的是生産成本的基線(形成以時間為基準的成本預算基線)可以作為将來成本控制的标準
配置設定項目成本預算:
- 給任務配置設定資源成本(與資源的費率(标準費率,加班費率,每次使用費率)相關)
- 給任務配置設定固定資源成本
- 給任務配置設定固定成本
估算(BAC)與預算(BCWS)
配置設定固定資源成本: 當一個項目的資源需要固定數量的資金時,可以向任務配置設定固定的資源成本。如項目中兼職人員成本。
有些任務是固定成本類型的任務,也就是說管理者知道某項任務的成本不變,不管任務的工期有多長,或不管任務使用了那些資源。在這種情況下,管理者向任務直接配置設定成本。例如:外包任務,教育訓練任務。
不管采用什麼預算方法,最後将總的成本配置設定到具體的任務中,形成預算。
成本基線