【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

关于工作量估算,你知道的和你不知道的一切

  • 2014-09-16
  • 本文字数:4279 字

    阅读完需:约 14 分钟

本文首次发布于 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)之外。

目前,我们甚至不知道软件项目中是否存在“规模经济”效应,或是“规模不经济”效应。很多基于经验的研究表明:一般软件项目都有规模经济效应,但是软件实践者们基本上都相信“规模不经济”。然而,对于规模经济的研究结果,似乎要视乎分析的实施方法而定,而且也没有揭示多少规模和工作效率之间的关系。

就我们现在对软件工作量和成本估算的了解,基本上不能让我们解决软件行业中的估算挑战。不过,它的确指出多种措施,可以提升估算准确率。特别要指出,如果软件公司能执行如下举措,就可以提升估算效率:

  • 制定并使用简单的估算模型,并要根据实际情况剪裁,同时和专家估算一起使用。
  • 使用历史估算的误差,设定最大—最小工作量区间。
  • 避免曝露易于误导和无关的估算信息。
  • 使用针对本组织调整过的检查列表。
  • 使用结构化的、基于小组的估算过程,要保证估算的独立性。
  • 避免基于高度不完整信息的早期估算。

在竞争激烈的投标轮次中,客户很容易重点关注低价格,这很容易导致投标人过于乐观,最终导致成本泛滥,软件质量低下。这在其他领域称为“赢家的诅咒”。长远来看,很多软件客户会开始了解,他们对于软件项目应该固定成本和低价格的看法,会对项目成功造成负面影响。在那之前,软件公司应该意识到:处于这种情况时,他们被选中,是因为他们自己对成本过于乐观;此时要有策略准备,以管理或者避免赢家的诅咒。

参考资料

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. J.J. Dolado, “On the Problem of the Software Cost Function,” Information and Software Technology, vol. 43, no. 1, 2001, pp. 61–72.
  6. 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.
  7. 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

2014-09-16 06:397787
用户头像

发布了 479 篇内容, 共 152.4 次阅读, 收获喜欢 47 次。

关注

评论

发布
暂无评论
发现更多内容

《巫师》系列游戏及《赛博朋克2077》本地化总监 Mikołaj Szwed 将出席 2023 中国游戏开发者大会(CGDC)

CGDC中国游戏开发者大会

本地化 游戏开发 ChinaJoy

IPQ6010 QCA8075 QCN5052 QCN5022 WiFi Embedded Motherboard

wifi6module

IPQ6000 ipq4029

神级外挂 | 网络性能优化,2个补丁就足够

鼎道智联

参展有礼|华秋电子诚邀您参加2023慕尼黑上海电子展

华秋电子

保姆级教程:带你体验华为云测试计划CodeArts TestPlan

华为云PaaS服务小智

云计算 开发者 软件开发 华为云

保险业务连续性保障:从测试到生产,混沌平台建设节奏如何把控?

TakinTalks稳定性社区

代码随想录训练营 Day02 - 数组(下)

jjn0703

算法

会是调用第三方接口那么简单吗?

高端章鱼哥

程序员 前端 接口 系统

人脸识别技术的分类和实现方法

来自四九城儿

倒计时1天 | 诚邀见证“九章云极DataCanvas新产品发布会”!

九章云极DataCanvas

我为什么选择多边形架构做为工程的基础思想

软件工程师-罗小东

ChatGPT与码农的机会

这我可不懂

人工智能 ChatGPT

数智时代的守护者:低代码开发平台如何解决AI安全挑战?

快乐非自愿限量之名

AI 低代码 数智时代

【汽车虚拟仿真】VR技术如何加速自动驾驶进程?

3DCAT实时渲染

虚拟仿真 云仿真 汽车虚拟仿真

重磅发布 | 博睿数据发布互联网行业精选案例集

博睿数据

互联网 可观测性 博睿数据 One 精选案例

HTML5 游戏开发实战 | 俄罗斯方块

TiAmo

html html5 6 月 优质更文活动

通过构建背景图学习CSS径向渐变

南城FE

CSS 前端开发 渐变

鲲鹏入晋,乘云而起,华为开发者大会开启“山西时刻”,共话山西鲲鹏生态建设

彭飞

人脸识别技术的未来发展方向

来自四九城儿

筑牢三大新型能源基础设施,能源变革的分水岭和路线图

脑极体

新能源

C++实现简单的ls命令以及原理

二哈侠

es 笔记二之基础查询

Hunter熊

elasticsearch

我在中小型项目SuperCell模式实战经验

软件工程师-罗小东

人脸识别技术在智慧城市建设中的应用

来自四九城儿

为什么负数的补码等于反码加一

xzy

采用Qt+Live555搭建RTSP服务器

DS小龙哥

6 月 优质更文活动

未来已来!探索AI医疗与低代码开发平台:引领健康浪潮的科技巨潮

不在线第一只蜗牛

人工智能 医疗健康领域 AI医疗

让沉寂的数据“活”起来,用友BIP资产云提升港口企业决策效率

用友BIP

港口 资产云

一文吃透MAUI、WinUI3和WPF的优势及劣势

这我可不懂

WPF MAUI

起风了,泛娱乐企业出海如何正确扬帆?

ToB行业头条

九章云极DataCanvas公司加入中国移动信息现代产业链“十百千万”计划

九章云极DataCanvas

关于工作量估算,你知道的和你不知道的一切_语言 & 开发_Magne Jorgensen_InfoQ精选文章