为什么软件项目比您想象的时间更长:统计模型(2019)

2021-03-11 00:30:32

任何建造软件的人都知道,估计一些东西需要多长时间是艰难的。很难提出一个无偏见的估计,在根本上的工作是关于解决某些东西的时候。宠物理论I' ve已经很久了,这是其中一些真的只是一个统计艺术品。

我怀疑DEVS实际上是估计*中位数*时间来完成任务。规划很难,因为他们吮吸*平均*。

- 2017年5月11日的Erik Bernhardsson(@fulhack)

让' s说你估计一个花一个花一周的项目。让' s说有三种同样可能的结果:它需要1/2周,或1周或2周。中位数结果实际上与估计相同:1周,但平均值(AKA平均值,AKA预期值)为7/6 = 1.17周。估计实际上是校准(为中位数(1)的校准(无偏),但不是均值。

“吹气因子”(估计时间除以估计时间)的合理模型将是像日志正态分布的类似。如果估计为一周,则让''将实际结果模拟为根据一周的日志正态分布分布的随机变量。这使得分配中位数的属性正好一周,但平均值更大:

如果我们采取吹气因子的对数,我们最终会以左右为中心的旧正常分布。这假设中位数爆炸系数是1x,正如您希望记住的那样,日志(1)= 0.然而,不同的任务可能会在0周围有不同的不确定性。我们可以通过改变Σ参数来模拟这一点,这对应于正态分布的标准偏差:

只是为了给某些号码:当日志(实际/估计)= 1时,吹气因子是exp(1)= e = 2.72。它同样可能是一个项目爆发exp(2)= 7.4的因素,因为它在exp(-2)= 0.14中完成,以14%的估计时间完成。直观的原因是平均值如此之大的原因是完成比估计更快的任务没有办法弥补比估计更长的任务。我们'重新绑定0,但在另一个方向上无限制。

这只是一个模特吗?你打赌!但是,我很快就会获得真实数据,并表明这实际上是使用一些经验数据来相当良好的现实地图。

到目前为止这么好,但是让'真的试图了解在软件估算方面的这种方式。让' S说我们看看路线图,它由20个不同的软件项目组成,我们试图估算:完成所有这些产品估计数长时间。

这里'平均值变得至关重要。意思是补充,但中位数没有。因此,如果我们想了解完成N个项目的总和需要多长时间,我们需要看看平均值。假设我们在管道中有三个不同的项目,完全相同σ= 1:

请注意,该手段加起来4.95 = 1.65 * 3,但另一栏Don' t。

手段仍然加起来,但是你可能会靠近天真3周估计你可能会想到的。请注意,具有Σ= 2的高不确定性项目基本上最终主导了平均完成时间。对于99%的百分位,它不仅仅是占据主导地位,它基本上吸收了所有其他的。我们可以做一个更大的例子:

同样,一个单一行为任务任务基本上最终占据了计算,至少对于99%的情况。尽管如此,尽管所有这些任务都有类似的中音时间,但一个怪胎项目即使是大约一半的时间超过这些任务的时间。为了使其简单,我认为所有任务都具有相同的估计大小,而是不同的不确定性。如果我们还改变大小,则适用相同的数学。

有趣的是我有一段时间的肠道感觉。当您最终以超过几个任务结束时,添加估计很少工作。相反,弄清楚哪些任务具有最高的不确定性 - 这些任务基本上将占据平均完成时间。

我有两种用于估算项目规模的方法:(a)将事物分解为子项目,估计它们,加入(b)肠道感觉估计,基于到目前为止的意外风险的紧张(b)是多么准确项目超过几周

- 2019年3月8日的Erik Bernhardsson(@fulhack)

图表总结了作为不确定性(σ)的函数的平均值和第99百分位数:

现在有数学!在项目规划期间,我开始欣赏这一点:我真的认为加上任务估计是一个真正误导的图片,这是一些东西需要多长时间的画面,因为你有这些疯狂的歪曲任务,最终会接管。

我在“好奇的玩具模型”下在我的大脑中提起了这一点,偶尔认为它的一个真实世界现象的整洁的插图我&#39观察到。但是有一天遇到了互联网上的互动,我遇到了一个有趣的项目估计数据集和实际时间。极好的!

该数据集的中位数爆炸因子表示为1x,而平均喷气因子是1.81倍。再次,这证实了开发商估计中位数井的亨希,但平均最终高得多。

让'看看吹气因子的分布。我们'重新看看它的对数:

你可以看到它'围绕0,爆炸系数是exp(0)= 1的'

我现在将与统计数据有点花哨,随意跳过,如果它'不是你的一杯茶。我们可以从这个实证分布推广什么?您可能希望吹气因子的对数将根据正常分布分发,但是它并不完全是真的。当时σs本身就是随机的,对每个项目变化。

模型的一个方便的方式是它们是从逆伽马分布中采样的。如果我们假设(如前所述),吹气因子的日志根据正常分布分发,那么吹气因子日志的“全球”分布最终是学生' s t分布。

在我看来,体面适合! T分布的参数还定义了Σ值的逆伽马分布:

请注意,值σ> 4非常不太可能,但是当他们发生时,它们会导致均为几千次的爆炸。

假设此数据集代表软件开发(可疑!),我们可以推断更多的数字。我们有T分布的参数,因此我们可以计算完成任务所需的平均时间,而不知道该任务的σ是。

虽然从这种配合占用的中位数爆炸因子是1x(如前所述),但99%百分位的吹气因子是32倍,但如果你去了99.99%百分位数,它' s a abling 5500万!一(手摇波浪)解释是一些任务最终得到了本质上是不可能的。事实上,这些极端边缘案例对平均值具有这样的外径影响,即任何任务的平均爆炸因子最终是无限的。对于试图达到截止日期,这是一个非常糟糕的消息!

由于分布倾斜(正常),平均值比中值变得大致差。

具有最不确定性的任务(相当最大的大小)通常可以占主导地位完成所有任务所需的平均时间。

这显然仅基于我在线找到的一个数据集。其他数据集可能提供不同的结果。

我会❤️将模型应用于更大的数据集,以查看它的持有程度。

我假设所有任务独立。实际上,他们可能会有一种相关性,这将使分析更加烦人,但(我认为)最终得出类似的结论。

日志常常分布式值的总和不是另一个日志通常分布式值。这是一个弱点,因为你可以争辩,大多数任务真的只是子任务的总和,如果我们的分配如此稳定,那将会很好。

由于小任务倾斜分析,我从直方图中删除了小任务(估计时间小于或等于7小时),并且在7中有一个奇数秒数。

标记为:软件,统计,流行