软件开发工作量预估

✍ dations ◷ 2025-08-22 19:27:49 #软件开发工作量预估

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

有关预估实务的问卷指出,在预估工作量时,仍建议用专家预估为主要的作法。

一般而言,工作量预估往往会过于乐观,会明显的过度自信。最后的平均工作量会超过30%,而且不会随时间而减少。不过,有关预估量误差的量测有很多的问题,细节可参考预估的准确性评估。对工作量预估准确的强烈自信可以用以下方式说明:平均而言,若软件专业人士在评估实际工作量最大值—最小值的区间时,有90%的信心水准,或认为“几乎一定”准确,“过度自信”的情形,其估计区间符合实际量的比例只有60-70%。

目前“工作量预估”一词用来表示许多不同的概念,例如最可能的工作量(众数),准确率(实际工作量小于估计量)为50%的估计量(中位数)、计划的工作量、对应预算的工作量、或是用来竞标或报价的工作量。不同的人有不同的目标,但在沟通时用“工作量预估”表达其不同的需求。

自从1960年代起,软件研究者以及软件实作者就已提出软件开发专案上,预估工作量的问题,例如Farr和Nelson的研究。

大部分的研究着重在建立型式化的软件开发工作量预估模型。早期的模型一般是依回归分析,或是从其他领域的理论数学推导来的模型。之后已评估了许多模型建立的作法,其基础理论包括案例推论、分类和决策树、仿真、类神经网络、贝叶斯统计、需求规格的词法分析、遗传编程、线性规划、经济生产模型、软计算、模糊逻辑建模、统计bootstrapping(英语:bootstrapping),或是上述理论的组合。其中最常见的可能是参数化的预估模型:构造性成本模型(COCOMO)、SEER-SEM(英语:SEER-SEM)和SLIM。其预估研究的基础是在1970年代至1980年代形成,也配合新的校正资料进行更新,最新版的主要更新是2000年的COCOMO II。以机能基础的大小量测为准进行的预估作法,例如机能点(英语:function points)也是依1970年至1980年的研究所产生,不过也依修正后的大小量测方式以及不同计数方式来进行校正,例如1990年代的用例点(英语:Use Case Points)或物件点(英语:object point)。

有许多方式可以为预估(估计)方式分类。以下是最顶层的分类:

以下是各分类中的一些例子。

根据不同预估方式以及模型之间的预估准确度之间差异的资讯,可以得知没有“最佳方式”,各方式和模型之间互相比较的相对准确度,和其专案情境有强烈的相关性。因此不同的组织会适合不同的预估方式。支持依期望准确度来选择预估方式的发现包括:

在许多预估领域中,最可靠的发现是整合来自各独立来源,应用不同预估方式,所得的结果,平均来说这可以提升预估的准确性。

很重要的是知道软件开发生产力传统度量方式的限制。

此外,在选择方式的阶段,也需要考量其他因素,例如方式的结果是否容易理解和进行沟通、方式使用上的难易度、以及导入预估方式的成本等。

最常见平均预估准确度的测量方式是MMRE(相对误差量值的平均),其中每一个估计量的MRE(相对误差量值)是:

= | actual effort estimated effort | actual effort {displaystyle {frac {|{text{actual effort}}-{text{estimated effort}}|}{text{actual effort}}}}

此测量方式有受到一些人的质疑,也有一些其他的测量方式,例如更对称的测量方式、相对误差的四分位数加权平均值(Weighted Mean of Quartiles of relative errors、WMQ)及估测不平均变异(Mean Variation from Estimate、MVFE)。

若个别资料有歪斜特性,MRE就不可靠了。此时比较会用到PRED(25)来用测量预估准确度。PRED(25)测量预测值在实际值25%误差范围内的比例。

高预估误差不能自动解释为低预估能力的指标。替代、竞争、互补的原因包括专案的低成本控制、开发工作的高复杂性、或是实际交付的机能比一开始规划时要多。也有一些框架可以改善预估误差量测的使用及改善。

在预估软件开发工作量时,过于乐观的情形,可能有许多的心理层面因素,若要增加预估的准确性,需要处理这些层面的议题。这些因素是本质性的,就算是用型式化预估的方式,因为其输入是依判断而决定的,仍会受心理因素的影响。重要的心理因素包括:一厢情愿、锚定效应、计划谬误(英语:planning fallacy)及认知失调。Jørgensen和Grimstad的著作中有相关议题的探讨:

有关开发工作量时常被低估的讽刺性情形,因此出现了一些常见的讽刺性的说法,例如将一些任务视为“软件开发上的小事(英语:small matter of programming)”(认为需要投入的心力不多),以下则是一些有关工作量低估的定律:

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.

It always takes longer than you expect, even when you take into account Hofstadter's Law.

What one programmer can do in one month, two programmers can do in two months.

预估工作量本身是件困难的工作,不适当的增加资源(甚至包括人力)对时程也不一定有帮助。

相关

  • 虚拟现实虚拟现实(英语:virtual reality,缩写VR),简称虚拟技术,也称虚拟环境,是利用电脑模拟产生一个三维空间的虚拟世界,提供用户关于视觉等感官的模拟,让用户感觉仿佛身历其境,可以即时、没
  • 马施纳海因里希·马施纳(德语:Heinrich Marschner,1795年8月16日-1861年12月16日),德国作曲家。马施纳早年曾学习法律,后来决定从事音乐创作。1816年任普雷斯堡宫廷音乐家,1824年到德累斯
  • 格雷迪格雷迪县(Grady County, Oklahoma)是美国奥克拉荷马州中南部的一个县。面积2,863平方公里。根据美国2000年人口普查,共有人口45,516人。县治奇克谢(Chickasha)。成立于1907年7月1
  • 低档商品低档商品(英文:inferior good),或称贫穷商品,在经济学上指,当一个人的实质收入下降后,需求会上升的商品。例子有:长途汽车(相对飞机)、快餐食品(相对餐厅)。要注意的是,低档商品是相对的,
  • 夹竹桃天蛾粉绿白腰天蛾(学名:Daphnis nerii)属于天蛾科(Sphingidae)长喙天蛾亚科(Macroglossinae亚科)白腰天蛾属(Daphnis)属,俗名是夹竹桃天蛾,别名是鹰纹天蛾。在 1758 年林奈(Carl Linn
  • 龙飞御天歌《龙飞御天歌》(韩语:용비어천가)是朝鲜王朝训民正音颁布后,第一首用谚文写作的诗歌,成书于1445年(朝鲜世宗27年)至1447年(世宗29年)。内容为记录朝鲜王朝的发展历史,颂扬朝鲜穆祖、朝
  • 阿尔普山坐标:42°19′18.02″N 1°53′37.75″E / 42.3216722°N 1.8938194°E / 42.3216722; 1.8938194阿尔普山(加泰罗尼亚语:La Tosa),是西班牙的山峰,位于该国东北部加泰罗尼亚,处于莫
  • 阿曼达·柯兹儿阿曼达·柯兹儿(英语:Amanda Coetzer,1971年10月22日-)是一位南非女子职业网球运动员,她的WTA单打排名为世界第3。柯兹儿在1993年墨尔本获得第1个WTA单打冠军,随后在东京获得第2个单打冠军。在柯兹儿1992年进入世界单打排名前20后,在10年之内维持在前20的高水平,她在这段期间获得良好的名声,因为她击败许多高排名的选手,她的身材在球员之中最为娇小的,因此她被称为娇小杀手"The Little Assassin"。在1995年加拿大大师赛,柯兹儿令人震惊的击败3位世界排名前5的
  • 海基·莱赫穆斯托海基·莱赫穆斯托(芬兰语:Heikki Lehmusto,1884年8月30日-1958年9月22日),芬兰男子体操及摔跤运动员。他曾获得1908年夏季奥运会体操比赛男子团体全能铜牌。摔跤是他的主项,他曾在1914年和1915年全国锦标赛上夺得冠军。
  • 朝日村 (岐阜县) */?)是日本岐阜县大野郡内一个已撤销的村,面积达187.37平方公里,据2005年1月1日的统计,人口为2,068人,村名据《益田郡(日语:益田郡)志》记载由于朝日将军木曾义仲的子孙居于此地而得名,《朝日村志》则主张是由于村内各处均能眺望乘鞍岳的日出(朝日),1875年7月29日由阿多野乡内的25村合并而成:149、155、166,1950年4月1日从益田郡划入大野郡,2005年2月1日与丹生川村(日语:丹生川村 (岐阜県))、清见村、庄川村(日语:荘川村)、宫村、久久野町(日语:久々野町)、高根村(