本文首次发布于 IEEE Software 杂志,由 InfoQ 和 IEEE Computer Society 为您呈现。
越来越多证据表明这样一个趋势:软件项目的成本和工作量超出限度,泛滥成灾。平均来看,这种泛滥大约在30%左右【1】。而且,对比1980年代和最近的调查中的估算准确程度,可以看出基本上没有改善。(只有 Standish Group 的分析指出估算准确度有显著提升。不过,在他们的 Chaos Reports 中提到的估算准确度显著低声,也许只是由于他们自己分析方法的改变,他们以前选择了太多有问题的项目分析,现在选择的项目更具代表性。【2】)估算方法也没有太多变化。尽管对于正式的估算模型有很多研究,“专家估算”依旧占据主导地位。【3】
估算准确度明显缺乏改善,但我们对工作量估算比以前有了更多了解。本文中,我试图总结获得的一些知识。其中有些知识有可能提高估算准确度,有些能告诉我们什么样的做法不可能带来改善,有些是关于我们对于工作量估算已知和未知的事情。文中用以得出结论的一整套经验证据,可以在其他地方看到。【1】
我们知道的事
研读过关于工作量估算的研究之后,我选出7种证据充足的结论。
不存在“最佳”的工作量估算模型或方法
众多研究对比了多种估算模型和方法的准确度,哪一种是最佳选择【4】,众说纷纭。结果不稳定,主要原因似乎在于几种不同的核心关系,比如开发工作量和项目大小之间,这些关系在不同上下文中也不一样【5】。此外,影响开发工作量的最大因素似乎也不一样,这表明估算模型和方法应该根据所处上下文剪裁。
核心关系不够稳定,同样可以用来解释,相比更简单的模型,为什么统计方法先进的估算模型,对于估算准确度没有多大改善,甚至根本没有改善。统计方法先进的估算模型会更贴近历史数据,因此当上下文改变时,相比简单的模型,准确度更渣。这个结论告诉我们,软件公司应该尝试构建自己的估算模型,而不是期望某个通用的估算模型和工具在他们的环境中能够表现准确。
客户着眼于降低价格,是工作量泛滥的主要原因
低估工作量的趋势,在基于价格的竞争情形中最为明显,比如在投标之中。在价格竞争不那么重要的情形下,比如内部软件开发,这样的趋势就不明显。实际上,你甚至会看到相反的结果。由此说明:工作量泛滥了的主要原因之一,就是客户在选择软件开发供应商时,倾向选择价格低的一方。因此,低估工作量的项目投标书更有可能启动。这些观察说明:客户在选择供应商时,少关注价格,多关注能力,就可以避免工作量泛滥。
最大工作量和最小工作量区间过于接近
最大-最小工作量之间的差距,比如90%置信区间,过于接近,无法反映实际情况中的不确定性。尽管存在有力证据表明,我们无法准确设定最大和最小工作量值域,但目前的估算方法还是假定可以做到这一点。这在 基于PERT计划评价与审查技术(Program Evaluation and Review Technique)的估算方法(三点估算)中尤为明显,其中中值工作量常常由最小和最大工作量计算得出。
软件从业人士应该利用历史数据和此前的估算误差,设定比较现实的最小和最大工作量,而不是使用专家的判断。【6】
工作量估算易于走偏,一旦走偏,难以恢复
所有的软件开发工作量估算,即使使用正式的估算模型,都需要专家判断。但即使专家判断可以很准确,也很容易走偏。最严重的走偏很可能发生于如下情形:负责估算的人,在估算前或者估算中,了解到预算、客户期望、可用时间或其他所谓的“估算锚点”因素。在没有意识到的情况下,估算者的估算结果可能很接近这些锚点。比如,知道客户期望低价格,或者较少的工作小时数,就有可能造成低估工作量。如果估算请求中包括某些引导性词语,比如“这个项目这么小,又简单,大概要花多少钱”,这就会误导专家的估算。
有很多研究,针对如何从误导中恢复,或者如何纠正估算的偏差,但没有发现可靠的方法。由此可以推导出:负责工作量估算的人,应该尽量避免看到误导或无关信息,比如,应该将需求文档中的误导和无关信息去除。
相关历史数据和检查列表可以改善估算准确度
充分证据表明:使用历史数据和估算检查列表,可以改善工作量估算准确度。当历史数据与项目相关,检查列表也根据公司情况进行裁剪之后,这就不太可能遗漏某些工作了,而且很可能加入足够的应急措施,应对某些风险,之前的经验也可以重用。因此可以产生更为现实的估算。特别是当类似项目可用于类比或是参考类【7】估算中时,估算准确度可以提升。
虽然历史数据(比如有百分之多少的工作量用于未规划的工作和项目管理上)和估算检查列表(比如针对易于忘记的工作提醒)有其作用,还是有很多公司没有使用任何一个,因此无法提升估算工作量准确度。
结合多个独立估算可以提升估算准确度
比起单独的工作量估算,来自多方的估算准确度平均值可能更准确。这样做有一个关键前提,就是估算都是独立完成的,也就是说估算者的专业知识、背景和估算过程都不一样。类似德尔菲的估算过程,比如“规划扑克”,软件开发者在其中会同时展示各自独立做出的估算(他们的扑克卡片),这在软件工作量估算上下文中尤其有用。
基于小组的、结构化的估算过程,能够让估算的机械组合更有价值,因为知识的分享能够增加知识的总量,比如完成一个项目需要的工作总和。小组估算判断的负面影响,比如“集体思考”和在小组中承担更多风险,还没有在软件工作量估算的相关文档中看到。
一般来说,估算模型要比专家估算准确度更低。不过,如果能结合起来,模型和专家之间的差异反而可能提升估算准确度。
估算有其害处
估算不仅预测未来,而且会频繁影响未来。过低的估算会导致过低的质量,以后可能要返工;过高的估算可能降低工作效率,遵从“帕金森定律”——工作会自动占满所有可用的时间。
因此,必须考虑是否的确需要工作量估算。如果可有可无,或是以后才有必要,可能不做更好,或是推迟估算,直到可以得到更多信息。敏捷软件开发——只估算下一个 sprint 或者发布版本的工作量,而且必须使用此前 sprint 或者版本发布的反馈信息——可能是避免过早估算带来的潜在危害的良好方法。
我们不知道的事
估算活动中存在一些问题,我们就是找不到好的解决办法,就算进行再多研究也不行。有三方面的挑战,说明我们的知识远远不能令我们满意。
如何准确估算超大型——即大型复杂项目的工作量
超大型项目对工作量估算提出了更高要求。不仅是更多价值面临风险,而且相关经验或历史数据也相对较少。很多超大型项目中的典型活动,比如组织层面的问题——太多项目干系人参与,本来就很难估算,因为其中常常涉及流程变更,以及项目干系人之间、与现有软件应用之间的复杂互动。
如何准确估算软件大小和复杂度
虽然对软件规模和复杂度的度量研究经年,但说到估算软件开发工作量,没有哪种方法特别有效。有些软件规模和复杂度的上下文有可能产生准确估算,但这种情况很少见。
如何度量、预测工作效率
即使可以出色估算软件的规模和复杂度,你还是需要可靠地预测个人或团队完成工作的工作效率。这种预测很复杂,因为不同软件开发者和团队之间的工作效率差距很大。同时也没有什么好的预测方法,除了某些比较实际的编程测试(比如:trialsourcing)之外。
目前,我们甚至不知道软件项目中是否存在“规模经济”效应,或是“规模不经济”效应。很多基于经验的研究表明:一般软件项目都有规模经济效应,但是软件实践者们基本上都相信“规模不经济”。然而,对于规模经济的研究结果,似乎要视乎分析的实施方法而定,而且也没有揭示多少规模和工作效率之间的关系。
就我们现在对软件工作量和成本估算的了解,基本上不能让我们解决软件行业中的估算挑战。不过,它的确指出多种措施,可以提升估算准确率。特别要指出,如果软件公司能执行如下举措,就可以提升估算效率:
- 制定并使用简单的估算模型,并要根据实际情况剪裁,同时和专家估算一起使用。
- 使用历史估算的误差,设定最大—最小工作量区间。
- 避免曝露易于误导和无关的估算信息。
- 使用针对本组织调整过的检查列表。
- 使用结构化的、基于小组的估算过程,要保证估算的独立性。
- 避免基于高度不完整信息的早期估算。
在竞争激烈的投标轮次中,客户很容易重点关注低价格,这很容易导致投标人过于乐观,最终导致成本泛滥,软件质量低下。这在其他领域称为“赢家的诅咒”。长远来看,很多软件客户会开始了解,他们对于软件项目应该固定成本和低价格的看法,会对项目成功造成负面影响。在那之前,软件公司应该意识到:处于这种情况时,他们被选中,是因为他们自己对成本过于乐观;此时要有策略准备,以管理或者避免赢家的诅咒。
参考资料
- T. Halkjelsvik and M. Jørgensen, “From Origami to Software Development: A Review of Studies on Judgment-Based Predictions of Performance Time,” Psychological Bulletin, vol. 138, no. 2, 2012, pp. 238–271.
- M. Jørgensen and K. Moløkken-Østvold, “How Large Are Software Cost Overruns? A Review of the 1994 CHAOS Report,” Information and Software Technology, vol. 48, no. 4, 2006, pp. 297–301.
- M. Jørgensen, “A Review of Studies on Expert Estimation of Software Development Effort,” J. Systems and Software, vol. 70, no. 1, 2004, pp. 37–60.
- T. Menzies and M. Shepperd, “Special Issue on Repeatable Results in Software Engineering Prediction,” Empirical Software Eng., vol. 17, no. 1, 2012, pp. 1–17.
- J.J. Dolado, “On the Problem of the Software Cost Function,” Information and Software Technology, vol. 43, no. 1, 2001, pp. 61–72.
- M. Jørgensen and D.I.K. Sjøberg, “An Effort Prediction Interval Approach Based on the Empirical Distribution of Previous Estimation Accuracy,” Information and Software Technology, vol. 45, no. 3, 2003, pp. 123–136.
- B. Flyvbjerg, “Curbing Optimism Bias and Strategic Misrepresentation in Planning: Reference Class Forecasting in Practice,” European Planning Studies, vol. 16, no. 1, 2008, pp. 3–21.
关于作者
MAGNE JØRGENSEN是 Simula研究实验室的研究院,也是奥斯陆大学的教授。他目前的研究兴趣包括:工作量估算、投标过程、外包、软件开发技能评估等。可以通过 magnej@simula.no 联系他。
关于IEEE
本文首先出现于 IEEE 软件杂志。IEEE 软件杂志提供扎实的、经过同行审阅的信息,设计当今技术战略层面的话题。要想应对运营可靠、灵活的企业面对的挑战,IT 经理和技术主管们依靠 IT高级人员,寻找最先进的解决方案。
查看英文原文:What We Do and Don't Know about Software Development Effort Estimation
相关推荐
* 将软件项目按生存周期分解,分别估算出开发各个阶段的工作量和成本,再汇总项目的总成本。 * 根据实验或历史数据给出软件项目工作量或成本的经验估算公式。 软件项目管理的成本估算方法还包括: * 直接成本的...
由于缺乏有效的方法和技术,我们在估算时往往过于乐观,混淆了进度与工作量的关系。项目经理对估算缺乏信心,导致估算工作不够深入,进一步加剧了进度管理的困难。 其次,忽视对进度的跟踪和监控是另一个问题。在...
这个实验数据集包含了一切必要的元素,包括shape文件,使初学者能够了解并实践地图制作的基本步骤,特别是利用插值法来估算空间数据。 首先,让我们理解什么是shape文件。Shape文件是一种常见的地理数据格式,它...
估算工作量和工作时间,制定项目计划,包括:定义工作产品,建立质量检查点以及确定一些机制以监控计划所规定的工作。 软件项目计划管理还包括五项主要活动:估算、进度安排、风险分析、质量管理计划和变更管理计划...
第二,我们采用的估算技术隐含地假设人和月可以互换,错误地将进度与工作量相互 混淆。 第三,由于对自己的估算缺乏信心,软件经理通常不会有耐心持续地进行估算这项工 作。 第四,对进度缺少跟踪和监督。其他工程...
这是因为他认为产品化会带来3倍的工作量,加上整合、设计和测试的3倍工作量。这强调了软件工程中的复杂性和集成挑战。 2. **编程行业的乐趣与苦恼**:编程行业提供创造的乐趣、实用性、挑战性、持续学习的机会以及...
此外,计算机辅助进度控制也是现代项目管理的重要手段,以减轻协调工作量并提高效率。 【进度控制的主要工作内容】 1. 分析论证项目的建设周期目标。 2. 编制并控制项目总进度规划。 3. 编制各阶段、各级别的进度...
12. 自底向上估算方法让负责具体工作的人来估算自己的任务,这样估算通常较为贴近实际,但可能忽略系统级别的工作量,导致总体估算偏低或不够全面。 软件项目管理的成功依赖于良好的组织、有效的沟通和严谨的流程...
1. **工程量清单的作用**:工程量清单是投标的基础,列出估算或设计的预计工程数量,但不作为最终结算和支付的依据。实际支付基于实际完成的工程量,由承包商按照技术规范进行计量,并按清单单价或总额价计算。 2. ...
这是一切预算工作的基础,只有精确的算量才能保证后续工作的顺利进行。通过反复核对和与实际工程量的对比,我逐渐掌握了更多计算技巧和细节处理方法,提高了工作效率和算量精度。 其次,工地巡查对我而言是一个重要...
工程造价确定与控制是建筑工程领域中的关键环节,它涉及到项目的全...以上知识点涵盖了工程造价确定与控制的主要方面,包括工程量计算、费用估算、变更管理、成本控制等多个层面,对于理解和实践工程造价工作至关重要。
例如,清单计价强调的是按实际完成的工程量进行计价,它更侧重于项目实施过程中的具体操作和实际工作量,而定额计价则依据事先确定的单位工程量成本进行计价,它更侧重于标准化和规范化。造价工程师应能够理解并运用...
而这一切的背后,都离不开精确的计算和科学的估算。本篇将通过细致解析,对卫星运行时间的计算及其相关知识点进行深入探讨。 首先,了解卫星轨道的基本原理是解决卫星运行时间问题的前提。卫星在围绕地球运动时,它...
工程造价确定与控制是建设工程领域中的关键环节,涉及到项目的投资估算、工程量清单编制、招投标、合同管理和竣工结算等多个方面。以下将详细阐述其中的重要知识点: 1. 工程量清单是工程项目报价的基础,它包括...
14. **工程量估算**:清单估算作为报价基础,但不完全定义工作内容,实际工程量以图纸为准。 15. **综合单价包含内容**:单价包括直接成本、管理费、利润和风险金,结算依据招标文件。 16. **清单填写**:所有单项...
精确的工程量计算能够帮助规划资源需求,避免因量估算不足导致的延误或成本超支。 编制施工进度计划是施工方案的核心部分。进度计划需要考虑各种可能影响工期的因素,如工程量的变化、生产效率的波动,以及资源分配...
7. **造价或工作量估算错误**:低估工程成本可能导致合同价格偏低。对策是专门审核投标数据,参考同类项目的合同价格和工程报价。 8. **工程进度失控**:进度延误可能由于多种因素导致。对策包括彻底审查现状,制定...