CHAP6 软件项目成本计划
软件项目成本计划
估算过程概念
软件项目规模
- 软件项目规模即工作量
- 例如:软件规划,软件管理,需求,设计,编码,测试,以及后期的维护等任务。
软件规模单位
-
LOC(Loc of Code)
- 源代码长度的测量
-
FP(Function Point)
- 用系统的功能数量来测量
-
人月
-
人天
-
人年
软件项目成本
- 完成软件规模相应付出的代价
- 待开发的软件项目需要的资金
- 人的劳动的消耗所需要的代价是软件产品的主要成本
- 货币单位
成本估算结果
-
直接成本
-
是软件产品的主要成本
-
例如
- 参与项目的人员成本
-
-
间接成本
-
可以分摊到各个具体项目中的成本
-
例如
- 培训
- 房租水电
- 员工福利
- 市场费用
- 管理费
- 其他
-
传统估算方法
代码行估算法
-
优点
- 任何软件项目都有的“产品”
- 很容易计算代码行数
-
缺点
- 没有公认接受的标准定义
- 代码行数量不同语言不同人差异大
- 项目早期不确定性大,难以准确估算代码量
- 代码行只强调编码的工作量,只是项目实现阶段的一部分
功能点估算法
-
概念
- 最早由Albrecht提出,称为Albercht功能点
- 也称为IFPUG(国际功能点用户组织)功能点
- 适用于信息系统
-
实际内容
- 与实现的语言和技术没有关系
- 用系统的功能数量来测量其规模
- 通过评估、加权、量化得出功能点
-
公式
-
FP =UFC*TCF
-
UFC :未调整功能点计数
- 外部输入External Inputs: EI
- 外部输出External Outputs EO
- 外部查询External Inquiry EQ
- 外部接口文件External Interface Files EIF’s
- 内部逻辑文件Internal Logical Files: ILF’S
-
TCF :技术复杂度因子
-
-
其他方法
- Mark II 功能点
主要应用在英国 - COSMIC-FFP 功能点
适用实时系统或者嵌入式系统
- Mark II 功能点
用例点估算法
-
步骤
-
计算 未调整的角色权值 UAW
- UAW = 求和(权值*角色数)
-
计算未调整的用例权值 UUCW
- UUCW = 求和(权值*用例数)
-
计算未调整的用例点 UUCP
- UUCP =UAW+UUCW
-
计算技术和环境因子 TEF
- 技术因子TCF
- 环境因子ECF
-
计算调整的用例点 UCP
- UCP = UUCP * TCF * ECF
-
计算工作量 (man hours)
- Effort = UCP * PF
-
类比(自顶向下)估算法
-
根据以往类似项目的成本估计
-
使用情况
- 有类似的历史项目数据
- 信息不足(例如市场招标)的时候
- 要求不是非常精确估算的时候
-
方法
-
理论举例
- 两个项目间的相似度计算
-
主观判断举例
- 两者之间有大体相似的需求
-
自下而上估算法
-
利用WPS(见上一章)对各个具体工作包进行详细的成本估算,然后将结果累加起来得出项目总成本
-
特点
- 比较精确(准确度来自每个任务的估算)
- 花费时间
三点估算法
-
基于任务成本的三种估算值来计算预期成本的方法
-
估算值
- 最可能成本:比较现实的估算成本
- 最乐观成本:最好情况所得到的估算成本
- 最悲观成本:最差情况所得到的估算成本
-
估算结果
- 三角分布
- β分布
参数估算法
-
定义
- 通过项目数据,进行回归分析,得出回归模型
- 通过参数模型估算(规模)成本的方法。
-
整体公式
- E: 以人月表示的工作量
a,b,c 经验导出的系数
M: 调节因子
S: 主要的输入参数 通常是 LOC,FP 等
- E: 以人月表示的工作量
-
Walston-Felix 模型
- KLOC 是源代码行数, E 是工作量 (以 PM 计)
- D 是项目持续时间(以月计)
- S 是人员需要量(以人计)
- DOC 是文档数量(以页计)
-
COCOMO模型
-
介绍
- 结构化成本模型 Constructive Cost model
- 是目前应用最广泛的参数型软件成本估计模型
- 由 Barry Boehm 团队开发的
-
基本原理
- A:可以校准的常量
- S:KLOC 软件规模
- E:为规模的指数,说明不同规模软件具有的相对规模经济和不经济性
- EM 为工作量乘数,反映某个项目特征对完成项目开发所需工作量的影响程度
- n:为描述软件项目特征的成本驱动因子的个数
-
版本
-
COCOMO 81
-
模型级别
- 基本 COCOMO
- 中等 COCOMO
- 高级 COCOMO
-
项目类型
-
有机 : Organic
- 各类应用程序,例如数据处理、科学计算 等
- 受硬件的约束比较小,程序的规模不是很大
-
嵌入式 : Embedded
- 系统程序 ,例如实时处理、控制程序等
- 紧密联系的硬件、软件和操作的限制条件下运行,软件规模任意
-
半嵌入 : Semidetached
- 各类实用程序,介于上述两种软件之间, 例如 编译器(程序)
- 规模和复杂度都属于中等或者更高
-
-
-
COCOMO II
-
组成
- 规划阶段
- 设计阶段
- 开发阶段
-
比较复杂,讲不清楚,考虑单开一章
-
-
-
专家估算法
-
Deiphi方法
-
组织者确定专家,这些专家互相不见面
-
组织者发给每位专家一份软件规格说明
-
专家以无记名对该软件给出 3 个规模的估算值
- 最小 ai
- 最可能的 mi
- 最大 bi
-
组织者计算每位专家的
-
最终可以获得一个多数专家共识的软件规模:
n表示n个专家 -
如果各个专家的估算差异超出规定的范围(例如:15%),则需重复上述过程
-
敏捷估算方法
Story point估算方法
-
常用的两个标准
- Fibonacci: 0, 1, 2, 3, 5, 8, 13, 21,34, 55, 89
- Power of 2: 0, 1, 2, 4, 8, 16, 32, 64,128