软件工程/项目管理/软件估算简介
软件开发工作量估算是基于不完整、不确定和/或嘈杂的输入预测开发或维护软件所需的实际工作量的过程。工作量估算可以用作项目计划、迭代计划、预算、投资分析、定价过程和投标回合的输入。
已发布的关于估算实践的调查表明,专家估算是在估算软件开发工作量时占主导地位的策略[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/