軟體工程/專案管理/軟體估算簡介
軟體開發工作量估算是基於不完整、不確定和/或嘈雜的輸入預測開發或維護軟體所需的實際工作量的過程。工作量估算可以用作專案計劃、迭代計劃、預算、投資分析、定價過程和投標回合的輸入。
已釋出的關於估算實踐的調查表明,專家估算是在估算軟體開發工作量時占主導地位的策略[1]。
通常,工作量估算是過於樂觀的,並且對其準確性的信心很強。平均工作量超支似乎約為 30%,並且沒有隨著時間的推移而減少。有關工作量估算誤差調查的綜述,請參見[2]。但是,工作量估算誤差的測量並非沒有問題,請參閱評估和解釋工作量估計的準確性。對工作量估算準確性的強烈過度自信體現在以下發現中:平均而言,如果一名軟體專業人員有 90% 的信心或“幾乎可以肯定”將實際工作量包含在最小-最大區間內,則觀察到包含實際工作量的頻率僅為 60-70% [3]。
目前,“工作量估算”一詞用於表示最可能的工作量(眾數)、對應於不超過 50% 機率的工作量(中位數)、計劃工作量、預算工作量或用於向客戶提出報價或價格的工作量等不同的概念。這被認為是不幸的,因為可能會出現溝通問題,並且這些概念服務於不同的目標[4] [5]。
軟體研究人員和從業人員至少從 1960 年代開始就一直在解決軟體開發專案工作量估算的問題;例如,參見 Farr[6]和 Nelson[7] 的工作。
大多數研究都集中在構建正式的軟體工作量估算模型上。早期的模型通常基於迴歸分析或從其他領域理論中數學推導而來。從那時起,許多模型構建方法得到了評估,例如基於案例推理、分類和迴歸樹、模擬、神經網路、貝葉斯統計、需求規範的詞法分析、遺傳程式設計、線性規劃、經濟生產模型、軟計算、模糊邏輯建模、統計自舉和兩種或多種模型的組合的方法。也許今天最常見的工作量估算產品(例如,正式工作量估算模型 COCOMO 和 SLIM)的基礎是 1970 年代和 1980 年代進行的工作量估算研究。基於功能性規模度量的估算方法(例如,功能點)也是基於 1970 年代和 1980 年代進行的研究,但以修改後的規模度量形式重新出現,並在不同的標籤下出現,例如 1990 年代的“用例點”[8]和 2000 年代的COSMIC。
有很多方法可以對估算方法進行分類,例如,參見[9][10]。最高級別的類別如下
- 專家估算:量化步驟,即根據判斷過程生成估算的步驟。
- 正式估算模型:量化步驟基於機械過程,例如,使用從歷史資料推匯出的公式。
- 基於組合的估算:量化步驟基於來自不同來源的估算的判斷或機械組合。
以下是每個類別中估算方法的示例。
| 估算方法 | 類別 | 估算方法實現支援的示例 |
|---|---|---|
| 基於類比的估算 | 正式估算模型 | ANGEL、加權微功能點 |
| 基於 WBS(自下而上)的估算 | 專家估算 | 專案管理軟體、公司特定的活動模板 |
| 引數模型 | 正式估算模型 | COCOMO、SLIM、SEER-SEM |
| 基於規模的估算模型[11] | 正式估算模型 | 功能點分析[12]、用例分析、敏捷軟體開發中基於故事點的估算 |
| 群體估算 | 專家估算 | 規劃撲克、廣域德爾菲 |
| 機械組合 | 基於組合的估算 | 基於類比和工作分解結構的工作量估算的平均值 |
| 判斷組合 | 基於組合的估算 | 基於引數模型和群體估算的專家判斷 |
關於不同估算方法和模型的估算準確性差異的證據表明,不存在“最佳方法”,並且一種方法或模型相對於另一種方法的相對準確性在很大程度上取決於上下文[13]。這意味著不同的組織受益於不同的估算方法。在[14]中總結的發現可以支援基於方法預期準確性的估算方法選擇,包括
- 平均而言,專家估算至少與基於模型的工作量估算一樣準確。特別是,在關係不穩定且模型中未包含重要資訊的情況下,建議使用專家估算。當然,這假設有經驗豐富的專家可用。
- 未針對特定組織的上下文定製的正式估算模型可能非常不準確。因此,如果不能確定估算模型的核心關係(例如,公式引數)是否基於類似的專案上下文,則使用自己的歷史資料至關重要。
- 正式估算模型在以下情況下可能特別有用:模型針對組織的上下文(透過使用自己的歷史資料或模型源自類似的專案和上下文)進行定製,和/或專家估計很可能會受到強烈願望的影響。
在許多預測領域,最可靠的發現是,來自獨立來源的估算的組合(優選應用不同的方法)平均會提高估算準確性[15] [16] [17]。
此外,在選擇過程中還應考慮其他因素,例如方法結果的易於理解和溝通性、方法的易用性、方法引入成本。
工作量估計的不確定性可以透過預測區間 (PI) 來描述。工作量 PI 基於一個給定的置信水平,包含最小和最大工作量值。例如,專案負責人可能估計一個專案的可能性最大的工作量為 1000 個工作小時,並且有 90% 的確定性,實際工作量將在 500 到 2000 個工作小時之間。那麼,區間 [500, 2000] 個工作小時就是 1000 個工作小時工作量估計的 90% PI。通常,除了 PI,還會使用其他術語,例如預測邊界、預測限值、區間預測、預測區域,以及不幸的是,置信區間。置信區間和 PI 之間的區別在於,PI 指的是估計的不確定性,而置信區間通常指的是與估計模型或分佈的引數相關聯的不確定性,例如,工作量值分佈的平均值的不確定性。PI 的置信水平指的是實際值在預測區間內的預期(或主觀)機率[18]。
有多種方法可以計算工作量 PI,例如基於迴歸或自舉的正式方法[19],基於先前估計誤差分佈的正式或判斷方法[20],以及對於給定置信水平的純專家判斷的最小-最大工作量。基於先前估計誤差分佈的專家判斷已被發現,在幾項研究中,與傳統最小-最大工作量區間相比,能夠系統地導致更現實的不確定性評估,例如見[21]。
平均估計準確性的最常見度量是 MMRE(相對誤差的平均幅度),其中 MRE 定義為
MRE = |實際工作量 − 估計工作量| / |實際工作量|
此度量已受到批評[22] [23] [24],並且存在幾種替代度量,例如更對稱的度量[25],相對誤差四分位數的加權平均值 (WMQ)[26] 和估計的平均偏差 (MVFE)[27]。
高估計誤差不能自動地被解釋為低估計能力的指標。替代、競爭或補充的原因包括專案成本控制低、開發工作複雜度高,以及交付的功能比最初估計的要多。改進估計誤差測量的使用和解釋的框架包含在[28] 中。
有許多心理因素可能解釋了人們強烈傾向於對工作量估計過於樂觀,需要解決這些因素才能提高工作量估計的準確性。即使使用正式的估計模型,這些因素也是必不可少的,因為這些模型的大部分輸入都是基於判斷的。已被證明重要的因素包括:一廂情願、錨定、計劃謬誤和認知失調。關於這些因素和其他因素的討論可以在 Jørgensen 和 Grimstad 的著作中找到[29]。
- 估計你知道的東西很容易。
- 估計你知道你不知道的東西很難。
- 估計你不知道你不知道的東西非常困難。
- ↑ Jørgensen, M. "A Review of Studies on Expert Estimation of Software Development Effort".
- ↑ Molokken, K. Jorgensen, M. "A review of software surveys on software effort estimation".
{{cite web}}: horizontal tab character in|author=at position 13 (help)CS1 maint: multiple names: authors list (link) - ↑ Jørgensen, M. Teigen, K.H. Ribu, K. "Better sure than safe? Over-confidence in judgement based software development effort prediction intervals".
{{cite web}}: horizontal tab character in|author=at position 14 (help)CS1 maint: multiple names: authors list (link) - ↑ Edwards, J.S. Moores, T.T. (1994), "A conflict between the use of estimating and planning tools in the management of information systems.". European Journal of Information Systems 3(2): 139-147.
- ↑ Goodwin, P. (1998). Enhancing judgmental sales forecasting: The role of laboratory research. Forecasting with judgment. G. Wright and P. Goodwin. New York, John Wiley & Sons: 91-112.
- ↑ Farr, L. Nanus, B. "Factors that affect the cost of computer programming".
{{cite web}}: horizontal tab character in|author=at position 9 (help)CS1 maint: multiple names: authors list (link) - ↑ Nelson, E. A. (1966). Management Handbook for the Estimation of Computer Programming Costs. AD-A648750, Systems Development Corp.
- ↑ Anda, B. Angelvik, E. Ribu, K. "透過應用用例模型改進估算實踐".
{{cite web}}: 在|author=中的水平製表符字元在位置 9 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Briand, L. C. 和 I. Wieczorek (2002)。軟體工程中的資源估算。軟體工程百科全書。J. J. Marcinak。紐約,John Wiley & Sons:1160-1196。
- ↑ Jørgensen, M. Shepperd, M. "軟體開發成本估算研究的系統性綜述".
{{cite web}}: 在|author=中的水平製表符字元在位置 14 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Hill Peter (ISBSG) - 估算手冊 2 - 由國際軟體基準標準組出版 ISBSG - 估算和基準資源中心
- ↑ Morris Pam - 功能點分析概述 Total Metrics - 功能點資源中心
- ↑ Shepperd, M. Kadoda, G. "使用模擬比較軟體預測技術" (PDF).
{{cite web}}: 在|author=中的水平製表符字元在位置 13 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Jørgensen, M. "軟體開發工作量估計:專家判斷和形式模型的證據".
- ↑ Winkler, R.L. "結合預測:哲學基礎和一些當前問題經理".
- ↑ Blattberg, R.C. Hoch, S.J. "資料庫模型和管理直覺:50% 模型 + 50% 經理".
{{cite web}}: 在|author=中的水平製表符字元在位置 16 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Jørgensen, M. "軟體開發工作量估計:專家判斷和形式模型的證據".
- ↑ Armstrong, J. S. "預測原則:面向研究人員和實踐者的手冊".
- ↑ Angelis, L. Stamelos, I. "一種用於高效類比成本估算的模擬工具".
{{cite web}}: 在|author=中的水平製表符字元在位置 12 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Jørgensen, M. Sjøberg, D.I.K. "基於先前估算準確性的經驗分佈的努力預測區間方法".
{{cite web}}: 在|author=中的水平製表符字元在位置 14 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Jørgensen, M. "努力估計不確定性評估的現實主義:問法很重要".
- ↑ Shepperd, M. Cartwright, M. Kadoda, G. "關於為軟體工程師構建預測系統".
{{cite web}}: 在|author=中的水平製表符字元在位置 13 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Kitchenham, B. Pickard, L.M. MacDonell, S.G. Shepperd,. "What accuracy statistics really measure".
{{cite web}}: 水平製表符在|author=中的第 15 個位置 (幫助)CS1 維護:額外的標點符號 (連結) CS1 維護:多個名稱:作者列表 (連結) - ↑ Foss, T. Stensrud, E. Kitchenham, B. Myrtveit, I. "A Simulation Study of the Model Evaluation Criterion MMRE". IEEE.
{{cite web}}: 水平製表符在|author=中的第 9 個位置 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Miyazaki, Y. Terakado, M. Ozaki, K. Nozaki, H. "Robust regression for developing software estimation models".
{{cite web}}: 水平製表符在|author=中的第 13 個位置 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Lo, B. Gao, X. "Assessing Software Cost Estimation Models: criteria for accuracy, consistency and regression".
{{cite web}}: 水平製表符在|author=中的第 7 個位置 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Hughes, R.T. Cunliffe, A. Young-Martos, F. "Evaluating software development effort model-building techniquesfor application in a real-time telecommunications environment".
{{cite web}}: 水平製表符在|author=中的第 13 個位置 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Grimstad, S. Jørgensen, M. "A Framework for the Analysis of Software Cost Estimation Accuracy".
{{cite web}}: 水平製表符在|author=中的第 13 個位置 (幫助)CS1 維護:多個名稱:作者列表 (連結) - ↑ Jørgensen, M. Grimstad, S. "How to Avoid Impact from Irrelevant and Misleading Information When Estimating Software Development Effort".
{{cite web}}: 水平製表符在|author=中的第 14 個位置 (幫助)CS1 維護:多個名稱:作者列表 (連結)
- 行業生產力資料用於軟體開發估計輸入,以及估計指南和工具 - 國際軟體基準測試標準組:http://www.isbsg.org
- 來自軟體基準測試組織的免費一階基準測試工具:http://www.sw-benchmarking.org/report.php
- 軟體工作量估計特別興趣小組:http://www.forecastingprinciples.com/Software_Estimation/index.html
- 一般預測原則:http://www.forecastingprinciples.com
- 專案估計工具:http://www.projectmanagementguides.com/TOOLS/project_estimation_tools.html
- 關於工作量估計的可下載研究論文:http://simula.no/research/engineering/projects/best
- Mike Cohn 的用例點估計,來自方法和工具的文章:http://www.methodsandtools.com/archive/archive.php?id=25
- 來自 Steve McConnell 的軟體估計資源:http://www.construx.com/Page.aspx?nid=297
- 來自 Dan Galorath 的軟體估計資源:http://www.galorath.com/wp/