软件开发工作量预估

软件开发工作量预估是预估软件开发或维护所需要的工作量(会以人以及工时或是金钱来表示),其参考输入多半是不完整、不可靠,并且带有噪声的资讯。工作量预估可以是专案计划、迭代计划、预算、投资分析、定价流程或竞标的输入[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

外部链接

编辑