軟體開發工作量預估
软件开发的工作量預估是預估軟體開發或維護所需要的工作量(會以人以及工時或是金錢來表示),其參考輸入多半是不完整、不可靠,並且帶有雜訊的資訊。工作量預估可以是專案計劃、迭代計劃、預算、投資分析、定價流程或競標的輸入[1][2]。
現行實務
有關預估實務的問卷指出,在預估工作量時,仍建議用專家預估為主要的作法[3]。
一般而言,工作量預估往往會過於樂觀,會明顯的過度自信。最後的平均工作量會超過30%,而且不會隨時間而減少[4]。不過,有關預估量誤差的量測有很多的問題,細節可參考預估的準確性評估。 對工作量預估準確的強烈自信可以用以下方式說明:平均而言,若軟體專業人士在評估實際工作量最大值—最小值的區間時,有90%的信心水準,或認為「幾乎一定」準確,「過度自信」的情形,其估計區間符合實際量的比例只有60-70%[5]。
目前「工作量預估」一詞用來表示許多不同的概念,例如最可能的工作量(眾數),準確率(實際工作量小於估計量)為50%的估計量(中位數)、計劃的工作量、對應預算的工作量、或是用來競標或報價的工作量。不同的人有不同的目標,但在溝通時用「工作量預估」表達其不同的需求[6][7]。
歷史
自從1960年代起,軟體研究者以及軟體實作者就已提出軟體開發專案上,預估工作量的問題,例如Farr[8][9]和Nelson的研究[10]。
大部份的研究著重在建立型式化的軟體開發工作量預估模型。早期的模型一般是依迴歸分析,或是從其他領域的理論數學推導來的模型。之後已評估了許多模型建立的作法,其基礎理論包括案例推论、分類和决策树、仿真、類神經網路、贝叶斯统计、需求規格的词法分析、遗传编程、线性规划、經濟生產模型、软计算、模糊逻辑建模、統計bootstrapping,或是上述理論的組合。其中最常見的可能是參數化的預估模型:构造性成本模型(COCOMO)、SEER-SEM和SLIM。其預估研究的基礎是在1970年代至1980年代形成,也配合新的校正資料進行更新,最新版的主要更新是2000年的COCOMO II。以機能基礎的大小量測為準進行的預估作法,例如機能點也是依1970年至1980年的研究所產生,不過也依修正後的大小量測方式以及不同計數方式來進行校正,例如1990年代的用例點[11]或物件點。
預估方式
有許多方式可以為預估(估計)方式分類[12][13]。以下是最頂層的分類:
- 專家估計:量化步驟(產生預估結果的步驟)是以判斷過程為基礎[14]
- 型式化估計模型:量化步驟是以數學過程為基礎,例如用歷史數據推導而成的公式。
- 混合基礎估計:量化步驟的基礎包括判斷,以及來自不同來源的預估值。
以下是各分類中的一些例子。
估計方式 | 分類 | 支持此估計方式的例子 |
---|---|---|
類比基礎的估計 | 型式化估計模型 | ANGEL、加權微機能點 |
工作分解结构(從下往上)估計 | 專家估計 | 項目管理軟件、公司特製的活動模版 |
參數化模型 | 型式化估計模型 | COCOMO、SLIM、SEER-SEM、TruePlanning for Software |
大小為基礎的估計模型[15] | 型式化估計模型 | 機能點分析[16]、用例分析、用例點、SSU(軟體大小單位)、敏捷软件开发中以故事点(Story point)為基礎的估計、物件點 |
群體估計 | 專家估計 | 規劃撲克牌、寬帶德菲法 |
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]。
心理因素
在預估軟體開發工作量時,過於樂觀的情形,可能有許多的心理層面因素,若要增加預估的準確性,需要處理這些層面的議題。這些因素是本質性的,就算是用型式化預估的方式,因為其輸入是依判斷而決定的,仍會受心理因素的影響。重要的心理因素包括:一廂情願、錨定效應、計劃謬誤及認知失調。Jørgensen和Grimstad的著作中有相關議題的探討[30]:
- 人們知道的事務,很容易預估。
- 人們確定自己不知道的事務,不容易預估(已知的未知)。
- 人們不知道自己不知道的事務,非常不容易預估(未知的未知)。
相關的「定律」
有關開發工作量時常被低估的諷刺性情形,因此出現了一些常見的諷刺性的說法,例如將一些任務視為「軟體開發上的小事」(認為需要投入的心力不多),以下則是一些有關工作量低估的定律:
(开发软件时)前90%的代码要花费90%的开发时间,剩余的10%的代码要再花費90%的开发时间。
The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time. |
||
——Tom Cargill,贝尔实验室[31] |
做事所花费的时间总是比你预期的要长,即使你的预期中考虑了侯世达定律。
It always takes longer than you expect, even when you take into account Hofstadter's Law. |
||
——侯世达,《哥德尔、埃舍尔、巴赫》[32] |
一個工程師花一個月可以完成的工作,二個工程師需要花上二個月的時間。
What one programmer can do in one month, two programmers can do in two months. |
||
——佛瑞德·布魯克斯 |
預估工作量本身是件困難的工作,不適當的增加資源(甚至包括人力)對時程也不一定有幫助。
相關條目
- 不定度錐
- 軟體工程的成本預估
- 成本預估模型
- 成本超支
- 機能點
- 計畫謬誤
- Putnam模型
- 軟體度量
- 軟體參數模型
參考資料
- . [2021-02-25]. (原始内容存档于2021-02-08).
- (PDF). US Government Accountability Office. 2009 [2021-02-25]. (原始内容存档 (PDF)于2020-08-06).
- Jørgensen, M. . 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).
- Molokken, K. Jorgensen, M. . . 2003: 223–230. ISBN 978-0-7695-2002-5. S2CID 15471986. doi:10.1109/ISESE.2003.1237981.
- Jørgensen, M. Teigen, K.H. Ribu, K. . Journal of Systems and Software. 2004, 70 (1–2): 79–93. doi:10.1016/S0164-1212(02)00160-7.
- Edwards, J.S. Moores. . European Journal of Information Systems. 1994, 3 (2): 139–147. S2CID 62582672. doi:10.1057/ejis.1994.14.
- 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
- Farr, L. Nanus, B. (PDF). [2021-03-18]. (原始内容存档 (PDF)于2017-11-18).
- Farr, L. Nanus, B. (PDF). [2021-03-18]. (原始内容存档 (PDF)于2018-07-28).
- Nelson, E. A. (1966). Management Handbook for the Estimation of Computer Programming Costs. AD-A648750, Systems Development Corp.
- Anda, B. Angelvik, E. Ribu, K. . 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 9783540002345、9783540362098.
- 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.
- Jørgensen, M. Shepperd, M. . [2021-02-25]. (原始内容存档于2021-04-13).
- . [2021-02-25]. (原始内容存档于2019-02-01).
- Hill Peter (ISBSG) - Estimation Workbook 2 - published by International Software Benchmarking Standards Group ISBSG - Estimation and Benchmarking Resource Centre 的存檔,存档日期2008-08-29.
- Morris Pam — Overview of Function Point Analysis Total Metrics - Function Point Resource Centre Archive.is的存檔,存档日期2012-09-12
- 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
- Shepperd, M. Kadoda, G. . IEEE Transactions on Software Engineering. 2001, 27 (11): 1014–1022 [2021-03-18]. doi:10.1109/32.965341. (原始内容存档于2017-09-03).
- Jørgensen, M. . [2021-03-18]. (原始内容存档于2021-04-13).
- Winkler, R.L. . International Journal of Forecasting. 1989, 5 (4): 605–609. doi:10.1016/0169-2070(89)90018-6.
- Blattberg, R.C. Hoch, S.J. . Management Science. 1990, 36 (8): 887–899. JSTOR 2632364. doi:10.1287/mnsc.36.8.887.
- BlueOptima. . 2019-10-29 [2021-03-18]. (原始内容存档于2021-03-03).
- Shepperd, M. Cartwright, M. Kadoda, G. . Empirical Software Engineering. 2000, 5 (3): 175–182. S2CID 1293988. doi:10.1023/A:1026582314146.
- Kitchenham, B. Pickard, L.M. MacDonell, S.G. Shepperd. .
- Foss, T. Stensrud, E. Kitchenham, B. Myrtveit, I. . IEEE Transactions on Software Engineering. 2003, 29 (11): 985–995. CiteSeerX 10.1.1.101.5792 . doi:10.1109/TSE.2003.1245300.
- Miyazaki, Y. Terakado, M. Ozaki, K. Nozaki, H. . Journal of Systems and Software. 1994, 27: 3–16. doi:10.1016/0164-1212(94)90110-4.
- Lo, B. Gao, X. . [2021-02-28]. (原始内容存档于2014-04-27).
- Hughes, R.T. Cunliffe, A. Young-Martos, F. . IEE Proceedings - Software. 1998, 145: 29 [2021-02-28]. doi:10.1049/ip-sen:19983370. (原始内容存档于2017-09-20).
- Grimstad, S. Jørgensen, M. . 2006 [2021-02-28]. (原始内容存档于2016-12-20).
- Jørgensen, M. Grimstad, S. . [2021-03-15]. (原始内容存档于2016-10-23).
- Bentley, Jon. . Communications of the ACM (fee required) . 1985, 28 (9): 896–901. ISSN 0001-0782. S2CID 5832776. doi:10.1145/4284.315122.
- Gödel, Escher, Bach: An Eternal Golden Braid. 20th anniversary ed., 1999, p. 152. ISBN 0-465-02656-7
外部連結
维基语录上的軟體開發工作量預估语录 |