軟體開發工作量預估

软件开发的工作量預估是預估軟體開發或維護所需要的工作量（會以人以及工時或是金錢來表示），其參考輸入多半是不完整、不可靠，並且帶有雜訊的資訊。工作量預估可以是專案計劃、迭代計劃、預算、投資分析、定價流程或競標的輸入。
現行實務

有關預估實務的問卷指出，在預估工作量時，仍建議用專家預估為主要的作法。

一般而言，工作量預估往往會過於樂觀，會明顯的過度自信。最後的平均工作量會超過30%，而且不會隨時間而減少。不過，有關預估量誤差的量測有很多的問題，細節可參考預估的準確性評估。
對工作量預估準確的強烈自信可以用以下方式說明：平均而言，若軟體專業人士在評估實際工作量最大值—最小值的區間時，有90%的信心水準，或認為「幾乎一定」準確，「過度自信」的情形，其估計區間符合實際量的比例只有60-70%。

目前「工作量預估」一詞用來表示許多不同的概念，例如最可能的工作量（眾數），準確率（實際工作量小於估計量）為50%的估計量（中位數）、計劃的工作量、對應預算的工作量、或是用來競標或報價的工作量。不同的人有不同的目標，但在溝通時用「工作量預估」表達其不同的需求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. Hi。

歷史
自從1960年代起，軟體研究者以及軟體實作者就已提出軟體開發專案上，預估工作量的問題，例如Farr和Nelson的研究Nelson, E. A. (1966). Management Handbook for the Estimation of Computer Programming Costs. AD-A648750, Systems Development Corp.。

大部份的研究著重在建立型式化的軟體開發工作量預估模型。早期的模型一般是依迴歸分析，或是從其他領域的理論數學推導來的模型。之後已評估了許多模型建立的作法，其基礎理論包括基于案例的推理、分類和决策树、仿真、類神經網路、贝叶斯统计、需求規格的词法分析、遗传编程、线性规划、經濟生產模型、软计算、模糊逻辑建模、統計，或是上述理論的組合。其中最常見的可能是參數化的預估模型：构造性成本模型（COCOMO）、和SLIM。其預估研究的基礎是在1970年代至1980年代形成，也配合新的校正資料進行更新，最新版的主要更新是2000年的COCOMO II。以機能基礎的大小量測為準進行的預估作法，例如功能點也是依1970年至1980年的研究所產生，不過也依修正後的大小量測方式以及不同計數方式來進行校正，例如1990年代的 .或。

預估方式
有許多方式可以為預估（估計）方式分類Briand, L. C. and Wieczorek, I. (2002). Resource estimation in software engineering. Encyclopedia of software engineering. J. J. Marcinak. New York, John Wiley & Sons: 1160-1196.。以下是最頂層的分類：
 專家估計：量化步驟（產生預估結果的步驟）是以判斷過程為基礎
 型式化估計模型：量化步驟是以數學過程為基礎，例如用歷史數據推導而成的公式。
 混合基礎估計：量化步驟的基礎包括判斷，以及來自不同來源的預估值。

以下是各分類中的一些例子。

 估計方式 分類 支持此估計方式的例子 類比基礎的估計 型式化估計模型 ANGEL、 工作分解结构（從下往上）估計 專家估計 項目管理軟件、公司特製的活動模版 參數化模型 型式化估計模型 COCOMO、、、TruePlanning for Software 大小為基礎的估計模型Hill Peter (ISBSG) - Estimation Workbook 2 - published by International Software Benchmarking Standards Group ISBSG - Estimation and Benchmarking Resource Centre  型式化估計模型 功能點分析Morris Pam — Overview of Function Point Analysis Total Metrics - Function Point Resource Centre 、用例分析、、SSU（軟體大小單位）、敏捷软件开发中以故事点（Story point）為基礎的估計、 群體估計 專家估計 、 Mechanical combination 混合基礎估計 將類比基礎以及工作分解结构基礎的估計值進行平均Srinivasa Gopal and Meenakshi D'Souza. 2012. Improving estimation accuracy by using case based reasoning and a combined estimation approach.  In Proceedings of the 5th India Software Engineering Conference (ISEC '12). ACM, New York, NY, USA,  75-78. DOI=https://dx.doi.org/10.1145/2134254.2134267 判斷式合併 混合基礎估計 依參數模型以及群體估計的基礎，再由專家判斷
預估方式的選擇
根據不同預估方式以及模型之間的預估準確度之間差異的資訊，可以得知沒有「最佳方式」，各方式和模型之間互相比較的相對準確度，和其專案情境有強烈的相關性。因此不同的組織會適合不同的預估方式。支持依期望準確度來選擇預估方式的發現包括：
 專家預估大致上至少和以模型為基礎旳工作量預估一樣準確。特別有些情境下，存在不穩定的關係以及高重要性的資訊，模型中不會包括這些資訊。此情形下建議使用專家預估。前提是假定有相關經驗的專家可以諮詢。
 型式化預估若沒有針對特定組織的情境來調整，其結果可能會相當的不準確。若無法確定預估模型中的核心關係（型式參數）是否是依類似情境的專案所產生，使用自身的歷史資料就格外的重要了。
 型式化預估若已針對特定組織的情境來調整（不論是用歷史資料，或是依類似的專案或情境所推導的模型），這類的模型會格外的有幫助，而且專家預估常常會有太過一廂情願的問題出現。

在許多預估領域中，最可靠的發現是整合來自各獨立來源，應用不同預估方式，所得的結果，平均來說這可以提昇預估的準確性。

很重要的是知道軟體開發生產力傳統度量方式的限制。

此外，在選擇方式的階段，也需要考量其他因素，例如方式的結果是否容易理解和進行溝通、方式使用上的難易度、以及導入預估方式的成本等。

預估的準確性評估
最常見平均預估準確度的測量方式是MMRE（相對誤差量值的平均），其中每一個估計量的MRE（相對誤差量值）是：

MRE = 

此測量方式有受到一些人的質疑，也有一些其他的測量方式，例如更對稱的測量方式、相對誤差的四分位數加權平均值（Weighted Mean of Quartiles of relative errors、WMQ）
及估測不平均變異（Mean Variation from Estimate、MVFE）。

若個別資料有歪斜特性，MRE就不可靠了。此時比較會用到PRED(25)來用測量預估準確度。PRED(25)測量預測值在實際值25%誤差範圍內的比例。

高預估誤差不能自動解釋為低預估能力的指標。替代、競爭、互補的原因包括專案的低成本控制、開發工作的高複雜性、或是實際交付的機能比一開始規劃時要多。也有一些框架可以改善預估誤差量測的使用及改善。

心理因素
在預估軟體開發工作量時，過於樂觀的情形，可能有許多的心理層面因素，若要增加預估的準確性，需要處理這些層面的議題。這些因素是本質性的，就算是用型式化預估的方式，因為其輸入是依判斷而決定的，仍會受心理因素的影響。重要的心理因素包括：一廂情願、錨定效應、計劃謬誤及認知失調。Jørgensen和Grimstad的著作中有相關議題的探討：
 人們知道的事務，很容易預估。
 人們確定自己不知道的事務，不容易預估（已知的未知）。
 人們不知道自己不知道的事務，非常不容易預估（未知的未知）。

相關的「定律」
有關開發工作量時常被低估的諷刺性情形，因此出現了一些常見的諷刺性的說法，例如將一些任務視為「軟體開發上的小事」（認為需要投入的心力不多），以下則是一些有關工作量低估的定律：
 90-90法则：

 侯世达定律：

 布魯克斯法則：

預估工作量本身是件困難的工作，不適當的增加資源（甚至包括人力）對時程也不一定有幫助。

相關條目




 功能點
 計畫謬誤


 軟體度量


 參考資料 

 外部連結

Category:软件开发
Category:軟體工程