目录

1. 成本估算的重要性和所涉及的挑战

1.1 什么决定了项目成本?

1.2 什么是 software cost estimation 软件成本估算?

1.3 成本估算方面的挑战

1.3.1 可能的解决方案

1.3.2 估算 —— 发展历史

2. 用于成本估算的技术

2.1 成本估算的技术

2.1.1 专家的判断

2.1.2 通过 Analogy 类比进行估算

2.1.3 Parkinson’s Law 帕金森定律

2.1.4 为赢而定价 Pricing to win

2.1.5 Algorithmic cost modelling 算法成本建模

3. Software size estimation 软件规模估算技术

3.1 Software Size Estimation 软件规模估算

3.2 Source Lines of Code 代码行数 (SLOC)

3.3 Function Points 功能点(FP)

4. 敏捷软件开发生命周期中使用的成本估算技术

4.1 敏捷工作估算

4.2 敏捷估算过程

4.3 敏捷估算指南

4.4 敏捷估算技术

4.4.1 Planning Poker

4.4.2 BUCKET SYSTEM

4.4.3 Relative Mass Valuation

4.5 计算速度 Velocity

4.6 估计 Delivery Time 交付时间

4.7 关于估算的最后评论

5. Function Points 功能点(FP)

5.1 Software Requirements 软件需求

5.2 FP计算步骤

5.3 Categorize requirements - 步骤1

5.4 为每个类别或功能估计一个复杂性值 - 步骤2

5.5 Compute count total from Complexity - 步骤3

5.6 Compute value adjustment factors - 步骤4

5.7 Compute total function point - 步骤5

6. Function Points的优缺点


1. 成本估算的重要性和所涉及的挑战

1.1 什么决定了项目成本?

  • 工作量 Effort
  • 硬件成本 Hardware Cost
  • 差旅费用 Travel Expenses
  • 培训费用 Training Cost
  • 沟通成本和其他成本因素 Communication Cost and other Cost Factors

1.2 什么是 software cost estimation 软件成本估算?

什么是 estimation 估算?

  • 是指找到一个估计值或近似值的过程,这是一个可以用于某种目的的数值,即使 input data may be incomplete, uncertain, or unstable 输入的数据可能不完整、不确定或不稳定。

什么是 software cost estimation 软件成本估算

  • 估算建立一个特定的基于软件的系统或产品需要多少 money, effort, resources, and time 资金、精力、资源和时间。

为什么软件成本估算很重要?

  • 你会在不知道你要花多少钱的情况下建造一栋房子吗?—— 当然不会。
  • 由于大多数软件系统的建设成本比一栋大房子要高得多,所以在开始创建软件之前进行估算似乎是合理的。

1.3 成本估算方面的挑战

  1. 成本估计没有精确的科学 —— 它永远不会被认为是完全准确的
  2. 没有人能够合理地预测项目中可能出现的问题。
  3. 大多数估算方法都假定事情会按预期进行,并简单地增加一些松动,以考虑到可能出错的情况。

1.3.1 可能的解决方案

  1. Delay estimation 延迟估计——在项目结束时有100%的准确性,但用处不大!
  2. 根据以前已经完成的项目的数据进行估算
  3. 将系统分解成较小的部分,并为较小的部分生成估算,这比较容易。
  4. 使用 empirically-based 基于经验的估算方法

1.3.2 估算 —— 发展历史

2003

  • 通过专家意见进行的工作量估计被认为是整个IT行业使用最多的方法。
  • 成本和进度超支非常普遍(30-40%),而且估计的准确性被项目经理认为是一个问题。

2013-2014

  • 基于专家的估算方法在敏捷方法论中仍然很受欢迎(2013[5],2014[6])。

2017

  • 71%的组织采用了敏捷方法
  • 9.7%的投资因项目表现不佳而损失
  • 许多项目的完成时间超过了最初预定的时间(49%)和预算(43%)。
  • 成本和任务时间估计不准确,在失败原因中排名靠前(28%和26%)。

2. 用于成本估算的技术

2.1 成本估算的技术

2.1.1 专家的判断

  • 几位专家对所提议的软件开发技术和应用领域进行了项目成本估算。 然后对这些进行讨论、比较和调整,直到达成共识。
  • 一些专家判断技术涉及独立轮询每个专家,在某些情况下进行三个估计:

    • pessimistic estimate 悲观估计 (p)
    • optimistic estimate 乐观估计 (o)
    • most likely estimate 最可能估计 (m)

  • Delphi technique:

    • 要求几位专家使用他们希望的任何方法对工作量进行单独判断。
    • 然后,计算出平均工作量,并提交给所有的专家。
    • 然后,每个专家都有机会修改他们的估计,在某些情况下,要在所有专家之间进行讨论。
    • 这种情况一直持续到没有专家愿意修改他们的估计为止。

2.1.2 通过 Analogy 类比进行估算

  • 一个新项目的成本是根据同一应用领域的类似项目来估算的。

    • 根据之前的经验估算一个数值

2.1.3 Parkinson’s Law 帕金森定律

  • 该定律指出,工作将扩展到填补可用的时间。
  • 成本是由可用资源决定的,而不是由客观评估决定的。
  • 工作总是会占满所有可用时间,因此 cost 取决于当前的所有可用资源,例如你有 3 个人, 12 个月的时间,那么 cost = 36个person months

2.1.4 为赢而定价 Pricing to win

  • 成本是根据客户在项目上的花费来估算的——成本取决于预算,而不是软件功能

    • 取决于客户出多少钱,出多少就是多少

2.1.5 Algorithmic cost modelling 算法成本建模

  • 根据一些 software metric (usually its size) 软件度量(通常是其大小)对 historical cost information 项目成本的历史成本信息,开发出一个模型
  • 当一个项目的工作量需要估计时,就会计算出该指标的估计值。
  • 使用该模型,预测工作量
  • 算法成本估算的最一般形式是由以下几点给出的: