1. 成本计划的主线

规模估算 → 工作量估算 → 成本估算 → 成本预算/成本基线

2. 估算的基本认识

  • 估算不是精确计算,一定有误差。
  • 项目经验数据非常重要
  • 不要太迷信某些数学模型

3. 软件单位

软件规模单位

LOC (Line of Code) 源代码长度的测量

FP (Function Point) 用系统功能数量来测量

软件工作量单位

  • 人月
  • 人天
  • 人年

软件项目成本

  1. 完成软件规模相应付出的代价。
  2. 待开发的软件项目需要的资金。
  3. 人的劳动的消耗所需要的代价是软件产品的主要成本。
  4. 货币单位。

传统估算方法

  1. 代码行估算法
  2. 功能点估算法
  3. 用例点估算法
  4. 类比(自顶向下)估算法
  5. 自下而上估算法
  6. 三点估算法
  7. 参数估算法
  8. 专家估算法

代码行估算法

主要优点

代码是所有软件开发项目都有的“产品”,而且很容易计算代码行数。

主要缺陷

  1. 对代码行没有公认的可接受的标准定义
  2. 代码行数量依赖于所用的编程语言和个人的编程风格。
  3. 在项目早期,需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量。
  4. 代码行强调编码的工作量,只是项目实现阶段的一部分。

功能点估算法

FP = UFC * TCF

缩写英文中文含义简单理解
EIExternal Input外部输入用户/外部系统向软件输入数据,比如新增用户、提交订单、录入信息
EOExternal Output外部输出软件向外输出经过处理的数据,比如报表、统计结果、计算后的清单
EQExternal Inquiry外部查询输入查询条件后返回查询结果,通常不做复杂计算,比如按学号查学生信息
缩写英文中文含义
ILFInternal Logical File内部逻辑文件系统自己维护、自己保存的一组逻辑相关数据
EIFExternal Interface File外部接口文件别的系统维护,本系统只是引用/读取的一组逻辑相关数据

这张图片的内容是关于用例点估算方法(Use Case Points, UCP)的基本步骤。以下是提取出的文字内容:

用例点估算方法的基本步骤

  1. 计算未调整的角色权值 UAW;
  2. 计算未调整的用例权值 UUCW;
  3. 计算未调整的用例点 UUCP;
  4. 计算技术和环境因子 TEF;
  5. 计算调整的用例点 UCP;
  6. 计算工作量(man-hours)。

类比估算-定义

估算人员根据以往的完成类似项目所消耗的总成本(或工作量),来推算将要开发的软件的总成本(或工作量)。

是一种自上而下的估算形式

自下而上估算法

相对比较准确,它的准确度来源于每个任务的估算情况

花费时间

三点估算

基于任务成本的三种估算值来计算预期成本的方法。

  • 最可能成本 (CMC_M):比较现实的估算成本。

  • 最乐观成本 (COC_O):最好情况所得得到的估算成本。

  • 最悲观成本 (CPC_P):最差情况所得得到的估算成本。

  • 三角分布:CE=(CO+CM+CP)/3C_E = ( C_O + C_M + C_P ) / 3

  • 贝塔分布:CE=(CO+4CM+CP)/6C_E = ( C_O + 4C_M + C_P ) / 6

参数估算法

通过项目数据,进行回归分析,得出回归模型

通过参数模型估算(规模)成本的方法。

Walston-Felix模型

1977年,IBM的Walston和Felix提出了如下的估算公式

E = 5.2 × (KLOC) ^ 0.91, KLOC是源代码行数,E是工作量(以PM计)

D = 4.1 × (KLOC) ^ 0.36, D是项目持续时间(以月计)

S = 0.54 × E ^ 0.6, S是人员需要量(以人计)

DOC = 49 × (KLOC) ^ 1.01 , DOC是文档数量(以页计)

Walston-Felix模型举例

采用java 完成项目,估计有366功能点,则

L = 366 × 46 = 16386行 = 16.386KLOC

E = 5.2 × (KLOC) ^ 0.91 = 5.2 × 16.386 ^ 0.91 = 66人月

DOC = 49 × (KLOC) ^ 1.01 = 49 × 16.386 ^ 1.01 = 826页

COCOMO(Constructive Cost model)

  • 结构化成本模型
  • 是目前应用最广泛的参数型软件成本估计模型
  • 由Barry Boehm团队开发的

有COCOMO 81和COCOMO II

专家估算法

由多位专家进行成本估算,一个专家可能会有偏见,最好由多位专家进行估算,取得多个估算值,最后得出综合的估算值。

敏捷估算思维

采用轻量级估算方法快速生成高层级估算

短期规划可以进行详细的估算

统一估算基准 –参照基准

建立团队共同认可的估算基准值

其他 Story以基准值比对

题目

这两道题分别考两个模型:

第 2 题考 中等 COCOMO 模型; 第 3 题考 IBM / Walston-Felix 模型


第 2 题:中等 COCOMO 模型

题目条件:

  • 代码量:50 KLOC
  • 项目类型:中等规模的半嵌入型项目
  • 采用:中等 COCOMO
  • 可靠性为很高级别,取值 1.3
  • 其他属性正常,取值都是 1
  • 人月单价:2 万元 / 人月

中等 COCOMO 公式:

Effort = a × KLOC^b × F

其中:

  • Effort:工作量,单位是人月 PM
  • KLOC:千行代码
  • F:乘法因子,也叫 EAF
  • 半嵌入型项目:a = 3.0,b = 1.12

因为只有可靠性是很高级别,取 1.3,其他都正常为 1,所以:

F = 1.3 × 1 × 1 × …… × 1 = 1.3

代入:

Effort = 3.0 × 50^1.12 × 1.3

算出来约为:

Effort ≈ 311.8 人月

所以项目费用:

费用 = 311.8 × 2 = 623.6 万元

注意图里这一行:

Effort = 3.0 × 50^1.12 × 1 = 311.8

这里写成 ×1 是不严谨的,应该是:

×1.3

否则算不出 311.8。 如果乘 1,大约只有 239.8 人月

所以第 2 题答案本身思路对,但书写有一个小笔误:

F 应该写 1.3,不是 1。


第 3 题:IBM / Walston-Felix 模型

题目条件:

  • 使用 C 语言

  • 功能点:85 FP

  • 用 IBM 模型估算:

    • 源代码行数
    • 工作量
    • 项目持续时间
    • 人员需要量
    • 文档数量

第一步:功能点换算代码行

C 语言经验换算:

1 个功能点 ≈ 150 行代码

所以:

L = 85 × 150 = 12750 行

换成 KLOC:

12750 行 = 12.75 KLOC

这里的 L 后面公式里其实都是指 KLOC,也就是 12.75


第二步:工作量 E

IBM / Walston-Felix 工作量公式:

E = 5.2 × L^0.91

代入:

E = 5.2 × 12.75^0.91

结果:

E ≈ 52.73 PM

也就是:

约 52.73 人月


第三步:项目持续时间 D

公式:

D = 4.1 × L^0.36

代入:

D = 4.1 × 12.75^0.36

结果:

D ≈ 10.25 月


第四步:人员需要量 S

公式:

S = 0.54 × E^0.6

代入:

S = 0.54 × 52.73^0.6

结果:

S ≈ 5.82 人

也就是大概需要 6 人左右

注意这里不是简单用:

人员 = 工作量 / 时间

如果用 52.73 / 10.25,大约是 5.14 人。 但这道题指定用 IBM 模型,所以按公式:

S = 0.54 × E^0.6


第五步:文档数量 DOC

公式:

DOC = 49 × L^1.01

代入:

DOC = 49 × 12.75^1.01

结果约为:

DOC ≈ 640.8 页


两题核心区别

题目模型输入核心输出
第 2 题中等 COCOMOKLOC + 项目类型 + 乘法因子工作量、费用
第 3 题IBM / Walston-Felix功能点 → KLOC代码行、工作量、时间、人数、文档页数

考试时你可以这样记:

COCOMO:先判断项目类型,找 a、b,再乘 F。 IBM:先把功能点换成 KLOC,再套 E、D、S、DOC 四个公式。