软件估算速度和准确性

时间:2009-09-01 21:46:29

标签: duration software-estimation

假设您有一个项目涉及两个Web应用程序(将共享DAL / DAO / BO程序集和一些OSS库):

  • 半复杂管理应用程序,它使用Windows Live ID进行身份验证,并且还能够与各种通知程序服务(电子邮件,短信,推特等)进行通信,目标通知程序约占功能的10%
  • 低功能到半复杂的用户应用程序,功能较少但更强健,也使用Windows Live ID进行身份验证

我们中有两个人具有中等估计能力,即使我们想要/必须,我们也无法在两天内完成。至少它是远离估计。

问题

  1. 通常需要多长时间才能做出可靠/有价值的估算?
  2. 您建议在不牺牲准确性的情况下加快估算?
  3. 根据估计速度,你会增加多少松弛(在成本/时间方面)(当你说:我可以估计它多一点,因为我认为它仍然很不合适

5 个答案:

答案 0 :(得分:4)

由于我们使用敏捷方法(特别是Scrum),所以我们花费的时间比用户优先处理时间长一个小时。

更多时间不会带来更高的准确性。

然而,困难的部分是让用户优先考虑。我们一直听到这种讨论“如果整件事没有按时完成,那一切都毫无价值。” “除了XYZZY组件,它确实有一些价值。”这个论点可以持续数小时,直到它解决了XYZZY应该是第一个。

通常,我们会尝试创建为期4周的冲刺。前几个很复杂,因为总会有新的东西。在前两个(或三个)之后,我们似乎设定了稳定的步伐。

每个用例都有一个相对简单的主观评估,说明完成它所需的工作量。持续时间超过一个完整冲刺的任何东西都必须被分解。大多数情况下,一些用例被捆绑到一个sprint中。

这是对每个用例进行评分的正式方法,以便更好地处理成本和计划问题。我们不使用它们,因为额外的努力没有帮助。

在前两次短跑后,

  1. 有新的和不同的功能,

  2. 优先事项已全部改变,

  3. 每个用例的详细信息都经过了大幅修改。

  4. 当您尝试估算每个冲刺结束时的变化时,“准确度”是什么意思?


    吸取了一个教训。我公司的部分时间花费时间完全定义完全将要交付什么,然后测量他们正在准确地提供他们想要的东西。

    客户注意到这一点,有人说我们“花了很多时间来交付合同所说的内容,但这不是我们所需要的。”

    坚定的前期估计问题是他们自己的生活。您在估算中“投入”的越多,估算值似乎就越有用。它们没有用,因为它们通常是完全错误的。它们基于完全错误的前期假设。

    更多时间用于估算是一项糟糕的政策。 “准确”的答案并不准确,但每一层管理层都更珍惜这些答案。当您和客户学习时,您无效的假设无效,您绝对必须不断重新估算。

    不要预先做好。如果您的合同要求您事先做好,那么请确保您有变更控制条款,并告诉客户您将继续进行更改。当这两个您和客户都在学习时,您必须进行更改。

答案 1 :(得分:2)

有趣的问题。我担心答案是“它真的取决于它!”我知道这不是非常有用(虽然它是真的)所以这里有一些因素:

1)要求的质量和完整性及其规格。对我而言,这通常是项目估计的杀手。如果您没有质量要求,则没有合理的估算依据。我们在这里使用“RUP-lite”式的产品开发,所以作为工程经理,除了最粗糙的估计之外我不会给出任何东西,直到我们完成“精心制作”阶段并从产品管理中获得签名事实上,80%的产品功能都是准确覆盖的。

2)范围&产品的性质。更大/更昂贵/更复杂=估计要长得多。我花了多年时间在电信运营商的土地上提供解决方案,这些解决方案具有正常的稳健运营商要求(SLA要求的“5 9”正常运行时间意味着您必须真正做好解决方案设计和故障恢复!)。在那种跨越业务功能区域的所有活动部分的环境中,工作的估计将取决于全面了解......具体而言,跨功能依赖关系和外部依赖关系可能是真正的杀手。也就是说,我也建立了许多收缩包装和企业软件。在这些环境中,由于范围通常要小得多,因此更容易估算。

3)这个项目的“新”程度如何?这个产品或技术组的团队有多“新”?产品或团队越新,您应分配的时间越长,缓冲越多。

4)我们需要具体的具体情况?如果这是一个“粗略的猜测”,那么我将依靠我的工程线索提供一个保守的估计,然后我会填补这个。如果我们需要一个“真实的”估计(例如,我的老板使用的那个,我将负责打击),我需要来自许多不同经理和团队成员的意见,他们需要时间来分析要求并相互协商。

这可能只需要几天或几周......这一切都取决于尺寸。坦率地说,“两三天”不足以确定除了最微不足道的项目之外的所有内容。

您可以做的最好的事情是提高估算质量,以提高您的要求质量,并且无情地识别隐藏的依赖关系。

最后一件事:FWIW,自81年以来我一直这样做,我认为准确地估计一个项目的持续时间/成本是最困难/充满危险的工程管理部分。

答案 2 :(得分:0)

为了做出可靠的估计,你真的需要创建一个要完成的任务列表。将其分解为故事/任务(即使您不使用敏捷)并对其进行评估。这可能需要花费很多时间 - 特别是研究的数量(寻找库来做这个通知器的东西以降低成本)。我需要至少3天 - 不过1-2周(s)听起来对我来说更合理。这似乎不是一个小项目。

如果你不想得到一些合理的结果,我不敢加快估算过程。估计从来都不准确,你只会让事情变得更糟。

一个选项是在几个小时内做出一个完全粗略的猜测,然后开始研究它(一个星期左右)。在本周末,您可以根据当前进度给出更好的估算。然而,创建一个好的原型(看起来像废话,但在所有区域都有一点代码)很重要。

答案 3 :(得分:0)

嗯,一个共同的引用是“价格将在我们初步估计的50%到400%之间”。这句话增长的原因是它是真的。估算准确性在很大程度上取决于您的领域知识。如果这是您第100次销售给定类型的博客引擎而不是您对估算值非常肯定。但是,通常情况下,您没有对域的深入了解(如果应用程序已存在,为什么要创建新域?)。

敏捷开发已经变得流行,因为人们很大程度上认识到传统的“瀑布式”思维方式对大多数现实世界的项目都不起作用。您应该对估算采用相同的思维方式。显然,你需要某种卖点,但一定要告诉你的客户这些信息非常模糊(无论竞争对手会告诉他们什么,他们的估计也很模糊)。

您需要销售迭代,因此也需要估算迭代次数。我相信任何公司的营销人员都会知道如何处理文书工作和合法的事情,所以这不应该是那么大的事。

考虑5个迭代项目:

  • 首先提出里程碑。这些可能会有所变化,但会为您提供最终产品的变量估算值。
  • 计划迭代#1。
  • 估算迭代次数#1,相应地调整总估算值。
  • 迭代#1
  • 冲洗/重复直到迭代#5
  • 你已经完成了:)
  • 反思您的项目。您的估算是如何演变的?原因是什么?边做边学:)

大多数客户宁愿进行部分估算和部分解决,而不是某些不合时宜的目标,而某些套装则将其出售:)

答案 4 :(得分:0)

稍微偏离原来的问题,但同样重要的是要从过去产生的估算中学习,了解实际做出估计的事情需要多长时间。

我们估计生产这些页面的时间为5天,实际上需要10天,等等。

从长远来看,这样的信息(希望!)可以让您产生更准确的估算值。