1. 成本计划的主线
规模估算 → 工作量估算 → 成本估算 → 成本预算/成本基线
2. 估算的基本认识
- 估算不是精确计算,一定有误差。
- 项目经验数据非常重要
- 不要太迷信某些数学模型
3. 软件单位
软件规模单位
LOC (Line of Code) 源代码长度的测量
FP (Function Point) 用系统功能数量来测量
软件工作量单位
- 人月
- 人天
- 人年
软件项目成本
- 完成软件规模相应付出的代价。
- 待开发的软件项目需要的资金。
- 人的劳动的消耗所需要的代价是软件产品的主要成本。
- 货币单位。
传统估算方法
- 代码行估算法
- 功能点估算法
- 用例点估算法
- 类比(自顶向下)估算法
- 自下而上估算法
- 三点估算法
- 参数估算法
- 专家估算法
代码行估算法
主要优点
代码是所有软件开发项目都有的“产品”,而且很容易计算代码行数。
主要缺陷
- 对代码行没有公认的可接受的标准定义
- 代码行数量依赖于所用的编程语言和个人的编程风格。
- 在项目早期,需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量。
- 代码行强调编码的工作量,只是项目实现阶段的一部分。
功能点估算法
FP = UFC * TCF
| 缩写 | 英文 | 中文含义 | 简单理解 |
|---|---|---|---|
| EI | External Input | 外部输入 | 用户/外部系统向软件输入数据,比如新增用户、提交订单、录入信息 |
| EO | External Output | 外部输出 | 软件向外输出经过处理的数据,比如报表、统计结果、计算后的清单 |
| EQ | External Inquiry | 外部查询 | 输入查询条件后返回查询结果,通常不做复杂计算,比如按学号查学生信息 |
| 缩写 | 英文 | 中文 | 含义 |
|---|---|---|---|
| ILF | Internal Logical File | 内部逻辑文件 | 系统自己维护、自己保存的一组逻辑相关数据 |
| EIF | External Interface File | 外部接口文件 | 别的系统维护,本系统只是引用/读取的一组逻辑相关数据 |
这张图片的内容是关于用例点估算方法(Use Case Points, UCP)的基本步骤。以下是提取出的文字内容:
用例点估算方法的基本步骤
- 计算未调整的角色权值 UAW;
- 计算未调整的用例权值 UUCW;
- 计算未调整的用例点 UUCP;
- 计算技术和环境因子 TEF;
- 计算调整的用例点 UCP;
- 计算工作量(man-hours)。
类比估算-定义
估算人员根据以往的完成类似项目所消耗的总成本(或工作量),来推算将要开发的软件的总成本(或工作量)。
是一种自上而下的估算形式
自下而上估算法
相对比较准确,它的准确度来源于每个任务的估算情况
花费时间
三点估算
基于任务成本的三种估算值来计算预期成本的方法。
-
最可能成本 ():比较现实的估算成本。
-
最乐观成本 ():最好情况所得得到的估算成本。
-
最悲观成本 ():最差情况所得得到的估算成本。
-
三角分布:
-
贝塔分布:
参数估算法
通过项目数据,进行回归分析,得出回归模型
通过参数模型估算(规模)成本的方法。
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 题 | 中等 COCOMO | KLOC + 项目类型 + 乘法因子 | 工作量、费用 |
| 第 3 题 | IBM / Walston-Felix | 功能点 → KLOC | 代码行、工作量、时间、人数、文档页数 |
考试时你可以这样记:
COCOMO:先判断项目类型,找 a、b,再乘 F。 IBM:先把功能点换成 KLOC,再套 E、D、S、DOC 四个公式。
