軟件開發工作量預估

軟件開發工作量預估是預估軟件開發或維護所需要的工作量(會以人以及工時或是金錢來表示),其參考輸入多半是不完整、不可靠,並且帶有雜訊的資訊。工作量預估可以是專案計劃、迭代計劃、預算、投資分析、定價流程或競標的輸入[1][2]

現行實務

編輯

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

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

目前「工作量預估」一詞用來表示許多不同的概念,例如最可能的工作量(眾數),準確率(實際工作量小於估計量)為50%的估計量(中位數)、計劃的工作量、對應預算的工作量、或是用來競標或報價的工作量。不同的人有不同的目標,但在溝通時用「工作量預估」表達其不同的需求[6][7]

歷史

編輯

自從1960年代起,軟件研究者以及軟件實作者就已提出軟件開發專案上,預估工作量的問題,例如Farr[8][9]和Nelson的研究[10]

大部份的研究着重在建立型式化的軟件開發工作量預估模型。早期的模型一般是依迴歸分析,或是從其他領域的理論數學推導來的模型。之後已評估了許多模型建立的作法,其基礎理論包括案例推論、分類和決策樹仿真類神經網絡貝葉斯統計、需求規格的詞法分析遺傳編程線性規劃、經濟生產模型、軟計算模糊邏輯建模、統計bootstrapping英語bootstrapping,或是上述理論的組合。其中最常見的可能是參數化的預估模型:構造性成本模型(COCOMO)、SEER-SEM英語SEER-SEM和SLIM。其預估研究的基礎是在1970年代至1980年代形成,也配合新的校正資料進行更新,最新版的主要更新是2000年的COCOMO II。以機能基礎的大小量測為準進行的預估作法,例如機能點英語function points也是依1970年至1980年的研究所產生,不過也依修正後的大小量測方式以及不同計數方式來進行校正,例如1990年代的用例點英語Use Case Points[11]物件點英語object point

預估方式

編輯

有許多方式可以為預估(估計)方式分類[12][13]。以下是最頂層的分類:

  • 專家估計:量化步驟(產生預估結果的步驟)是以判斷過程為基礎[14]
  • 型式化估計模型:量化步驟是以數學過程為基礎,例如用歷史數據推導而成的公式。
  • 混合基礎估計:量化步驟的基礎包括判斷,以及來自不同來源的預估值。

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

估計方式 分類 支持此估計方式的例子
類比基礎的估計 型式化估計模型 ANGEL、加權微機能點英語Weighted Micro Function Points
工作分解結構(從下往上)估計 專家估計 項目管理軟件、公司特製的活動模版
參數化模型 型式化估計模型 COCOMOSLIM英語Putnam modelSEER-SEM英語SEER-SEM、TruePlanning for Software
大小為基礎的估計模型[15] 型式化估計模型 機能點分析英語Function Point Analysis[16]用例分析、用例點英語Use Case Points、SSU(軟件大小單位)、敏捷軟件開發中以故事點(Story point)為基礎的估計、物件點英語Object Points
群體估計 專家估計 規劃撲克牌英語Planning poker寬帶德菲法英語Wideband delphi
Mechanical combination 混合基礎估計 將類比基礎以及工作分解結構基礎的估計值進行平均[17]
判斷式合併 混合基礎估計 依參數模型以及群體估計的基礎,再由專家判斷

預估方式的選擇

編輯

根據不同預估方式以及模型之間的預估準確度之間差異的資訊,可以得知沒有「最佳方式」,各方式和模型之間互相比較的相對準確度,和其專案情境有強烈的相關性[18]。因此不同的組織會適合不同的預估方式。支持依期望準確度來選擇預估方式的發現包括[19]

  • 專家預估大致上至少和以模型為基礎旳工作量預估一樣準確。特別有些情境下,存在不穩定的關係以及高重要性的資訊,模型中不會包括這些資訊。此情形下建議使用專家預估。前提是假定有相關經驗的專家可以諮詢。
  • 型式化預估若沒有針對特定組織的情境來調整,其結果可能會相當的不準確。若無法確定預估模型中的核心關係(型式參數)是否是依類似情境的專案所產生,使用自身的歷史資料就格外的重要了。
  • 型式化預估若已針對特定組織的情境來調整(不論是用歷史資料,或是依類似的專案或情境所推導的模型),這類的模型會格外的有幫助,而且專家預估常常會有太過一廂情願的問題出現。

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

很重要的是知道軟件開發生產力傳統度量方式的限制[22]

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

預估的準確性評估

編輯

最常見平均預估準確度的測量方式是MMRE(相對誤差量值的平均),其中每一個估計量的MRE(相對誤差量值)是:

MRE =  

此測量方式有受到一些人的質疑[23][24][25],也有一些其他的測量方式,例如更對稱的測量方式[26]、相對誤差的四分位數加權平均值(Weighted Mean of Quartiles of relative errors、WMQ) [27]及估測不平均變異(Mean Variation from Estimate、MVFE)[28]

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

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

心理因素

編輯

在預估軟件開發工作量時,過於樂觀的情形,可能有許多的心理層面因素,若要增加預估的準確性,需要處理這些層面的議題。這些因素是本質性的,就算是用型式化預估的方式,因為其輸入是依判斷而決定的,仍會受心理因素的影響。重要的心理因素包括:一廂情願錨定效應計劃謬誤英語planning fallacy認知失調。Jørgensen和Grimstad的著作中有相關議題的探討[30]

  • 人們知道的事務,很容易預估。
  • 人們確定自己不知道的事務,不容易預估(已知的未知)。
  • 人們不知道自己不知道的事務,非常不容易預估(未知的未知)。

相關的「定律」

編輯

有關開發工作量時常被低估的諷刺性情形,因此出現了一些常見的諷刺性的說法,例如將一些任務視為「軟件開發上的小事英語small matter of programming」(認為需要投入的心力不多),以下則是一些有關工作量低估的定律:

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

相關條目

編輯

參考資料

編輯
  1. ^ What We do and Don't Know about Software Development Effort Estimation. [2021-02-25]. (原始內容存檔於2021-02-08). 
  2. ^ Cost Estimating And Assessment Guide GAO-09-3SP Best Practices for developing and managing Capital Program Costs (PDF). US Government Accountability Office. 2009 [2021-02-25]. (原始內容存檔 (PDF)於2020-08-06). 
  3. ^ Jørgensen, M. A Review of Studies on Expert Estimation of Software Development Effort. Journal of Systems and Software. 2004, 70 (1–2): 37–60 [2021-02-25]. doi:10.1016/S0164-1212(02)00156-5. (原始內容存檔於2017-02-02). 
  4. ^ Molokken, K. Jorgensen, M. A review of software surveys on software effort estimation. 2003 International Symposium on Empirical Software Engineering, 2003. ISESE 2003. Proceedings. 2003: 223–230. ISBN 978-0-7695-2002-5. S2CID 15471986. doi:10.1109/ISESE.2003.1237981. 
  5. ^ Jørgensen, M. Teigen, K.H. Ribu, K. Better sure than safe? Over-confidence in judgement based software development effort prediction intervals. Journal of Systems and Software. 2004, 70 (1–2): 79–93. doi:10.1016/S0164-1212(02)00160-7. 
  6. ^ Edwards, J.S. Moores. A conflict between the use of estimating and planning tools in the management of information systems. European Journal of Information Systems. 1994, 3 (2): 139–147. S2CID 62582672. doi:10.1057/ejis.1994.14. 
  7. ^ 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
  8. ^ Farr, L. Nanus, B. Factors that affect the cost of computer programming, volume I (PDF). [2021-03-18]. (原始內容存檔 (PDF)於2017-11-18). 
  9. ^ Farr, L. Nanus, B. Factors that affect the cost of computer programming, volume II (PDF). [2021-03-18]. (原始內容存檔 (PDF)於2018-07-28). 
  10. ^ Nelson, E. A. (1966). Management Handbook for the Estimation of Computer Programming Costs. AD-A648750, Systems Development Corp.
  11. ^ Anda, B. Angelvik, E. Ribu, K. Improving Estimation Practices by Applying Use Case Models. Lecture Notes in Computer Science. 2002, 2559: 383–397. CiteSeerX 10.1.1.546.112 . ISBN 978-3-540-00234-5. doi:10.1007/3-540-36209-6_32.  ISBN 97835400023459783540362098.
  12. ^ 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.
  13. ^ Jørgensen, M. Shepperd, M. A Systematic Review of Software Development Cost Estimation Studies. [2021-02-25]. (原始內容存檔於2021-04-13). 
  14. ^ Custom Software Development Services - Custom App Development - Oxagile. [2021-02-25]. (原始內容存檔於2019-02-01). 
  15. ^ Hill Peter (ISBSG) - Estimation Workbook 2 - published by International Software Benchmarking Standards Group ISBSG - Estimation and Benchmarking Resource Centre 互聯網檔案館存檔,存檔日期2008-08-29.
  16. ^ Morris Pam — Overview of Function Point Analysis Total Metrics - Function Point Resource Centre Archive.is存檔,存檔日期2012-09-12
  17. ^ 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
  18. ^ Shepperd, M. Kadoda, G. Comparing software prediction techniques using simulation. IEEE Transactions on Software Engineering. 2001, 27 (11): 1014–1022 [2021-03-18]. doi:10.1109/32.965341. (原始內容存檔於2017-09-03). 
  19. ^ 19.0 19.1 Jørgensen, M. Estimation of Software Development Work Effort:Evidence on Expert Judgment and Formal Models. [2021-03-18]. (原始內容存檔於2021-04-13). 
  20. ^ Winkler, R.L. Combining forecasts: A philosophical basis and some current issues Manager. International Journal of Forecasting. 1989, 5 (4): 605–609. doi:10.1016/0169-2070(89)90018-6. 
  21. ^ Blattberg, R.C. Hoch, S.J. Database Models and Managerial Intuition: 50% Model + 50% Manager. Management Science. 1990, 36 (8): 887–899. JSTOR 2632364. doi:10.1287/mnsc.36.8.887. 
  22. ^ BlueOptima. Identifying Reliable, Objective Software Development Metrics. 2019-10-29 [2021-03-18]. (原始內容存檔於2021-03-03). 
  23. ^ Shepperd, M. Cartwright, M. Kadoda, G. On Building Prediction Systems for Software Engineers. Empirical Software Engineering. 2000, 5 (3): 175–182. S2CID 1293988. doi:10.1023/A:1026582314146. 
  24. ^ Kitchenham, B. Pickard, L.M. MacDonell, S.G. Shepperd. What accuracy statistics really measure. 
  25. ^ Foss, T. Stensrud, E. Kitchenham, B. Myrtveit, I. A Simulation Study of the Model Evaluation Criterion MMRE. IEEE Transactions on Software Engineering. 2003, 29 (11): 985–995. CiteSeerX 10.1.1.101.5792 . doi:10.1109/TSE.2003.1245300. 
  26. ^ Miyazaki, Y. Terakado, M. Ozaki, K. Nozaki, H. Robust regression for developing software estimation models. Journal of Systems and Software. 1994, 27: 3–16. doi:10.1016/0164-1212(94)90110-4. 
  27. ^ Lo, B. Gao, X. Assessing Software Cost Estimation Models: criteria for accuracy, consistency and regression. [2021-02-28]. (原始內容存檔於2014-04-27). 
  28. ^ Hughes, R.T. Cunliffe, A. Young-Martos, F. Evaluating software development effort model-building techniquesfor application in a real-time telecommunications environment. IEE Proceedings - Software. 1998, 145: 29 [2021-02-28]. doi:10.1049/ip-sen:19983370. (原始內容存檔於2017-09-20). 
  29. ^ Grimstad, S. Jørgensen, M. A Framework for the Analysis of Software Cost Estimation Accuracy. 2006 [2021-02-28]. (原始內容存檔於2016-12-20). 
  30. ^ Jørgensen, M. Grimstad, S. How to Avoid Impact from Irrelevant and Misleading Information When Estimating Software Development Effort. [2021-03-15]. (原始內容存檔於2016-10-23). 
  31. ^ Bentley, Jon. Programming pearls. Communications of the ACM (fee required). 1985, 28 (9): 896–901. ISSN 0001-0782. S2CID 5832776. doi:10.1145/4284.315122. 
  32. ^ Gödel, Escher, Bach: An Eternal Golden Braid. 20th anniversary ed., 1999, p. 152. ISBN 0-465-02656-7

外部連結

編輯