一、学习目的与要求
- 成本估算是项目管理的基础和核心内容之一;
- 掌握软件项目成本估算的含义、过程和方法;
- 初步具备进行软件项目成本估算的能力;
二、学习内容
1. 概述(次重点)
1. 成本
- 项目成本:人力资源成本、软硬件资源成本、商务活动成本、其他成本费用;
2. 成本管理
- 目标:确保在比准的预算范围内完成项目所需的各项任务;
- 软件项目成本管理活动:
(1)软件系统规模估算:软件项目工作任务分解,并且对程序量进行估算;
(2)软件项目成本估算:软件生产效率估计,根据系统规模和生产效率估计完成项目所需各项资源成本;
(3)软件项目成本预算制定:将软件项目的整体成本估算配置到个单项任务中,并输出成本估算表和使用计划表,
(4)软件项目成本监控:定期项目成本统计、核算,监控预算完成情况,偏差分析和预算调整;
3. 成本估算的时机
- 目的:寻找估算意义和估算精度对立程度最小的估算方法;
- 时机:
(1)可行性论证:软件组织提供初步信息,考虑软件项目是否有利,根据结果考虑可行性;
(2)需求分析:在产品开发之前再次权衡产品的可行性;
(3)系统设计:进行估算影响各阶段资源分配;
(4)系统实现:根据前期活动中消耗的资源和工作量,对原有估算进行调整;
(5)系统运行维护:认识到估算活动中需要提高的地方及组织本身的特点,为下一个项目积累经验;
2. 软件项目规模估算
1. WBS(工作分解结构)
- 软件规模是软件成本的主要影响因素;
- 常用的规模度量标准:代码行(LOC)、功能点(FP)
- WBC越细,软件规模的估计就越准确;
- 软件规模估计原则:
(1)在技术允许的条件下,应从最详细的WBS开始;
(2)精确定义度量标准;
(3)估计底层每一模块的规模,汇总以得到总体估计;
(4)适当考虑偶然因素的影响。
2. LOC估计
- 概念:是常用的源代码程序长度的度量标准,指源代码的总行数;
- 分类:NCLOC(无注释的源代码行)、CLOC(注释的源代码行);
- 公式:LOC=NCLOC+CLOC;
- 经常使用 KLOC来表示程序长度;
- 1代码行价值和人月均代码行数可以体现一个软件生产组织的生产能力;
3. FP估计
- 概念:用需求来确定各种输入、输出、查询以及外部文件和内部文件的数量;
- 未调整的功能点数(UFP)计算步骤:
(1)计算输入(由用户提供的、描述面向应用的数据项)、输出(向用户提供的、用于生成面向应用的数据项)、查询(要求回答的交互式输入)、外部文件(对其他系统的机器可读界面)和内部文件的(系统里面的逻辑主文件)数量;
(2)判断项目的复杂性,计算UFC:根据表求出功能项加权即为UFC;
(3)FP=UFC × TCF(技术复杂度因子)
(4)TFC = 0.65+0.01(SUM(对系统重要程度对应的值)),取值范围(0.65~1.35)
(5)用FP度量的情况:估计新的软件开发项目;应用软件包括很多输入输出或文件活动;拥有经验丰富的FP估计专家;拥有充分的数据资料,可以准确的将FP转化为LOC。
功能点的复杂度权重 | |||
---|---|---|---|
功能项 | 权重 | ||
简单 | 一般 | 复杂 | |
输入 | 3 | 4 | 6 |
输出 | 4 | 5 | 7 |
查询 | 3 | 4 | 6 |
外部文件 | 7 | 10 | 15 |
内部文件 | 5 | 7 | 10 |
技术复杂度因子的组成 | |||||||
---|---|---|---|---|---|---|---|
名称 | 对系统的重要程度 | ||||||
无影响 | 影响很小 | 有一定影响 | 重要 | 比较重要 | 很重要 | ||
可靠的备份和恢复 | 3 | 4 | 5 | ||||
分布式函数 | 0 | 1 | 2 | 3 | 4 | 5 | |
大量使用的配置 | 0 | 1 | 2 | 3 | 4 | 5 | |
操作简便性 | 0 | 1 | 2 | 3 | 4 | 5 | |
复杂界面 | 0 | 1 | 2 | 3 | 4 | 5 | |
重用性 | 0 | 1 | 2 | 3 | 4 | 5 | |
多重站点 | 0 | 1 | 2 | 3 | 4 | 5 | |
数据通信 | 0 | 1 | 2 | 3 | 4 | 5 | |
性能 | 0 | 1 | 2 | 3 | 4 | 5 | |
联机数据输入 | 0 | 1 | 2 | 3 | 4 | 5 | |
在线升级 | 0 | 1 | 2 | 3 | 4 | 5 | |
复杂数据处理能力 | 0 | 1 | 2 | 3 | 4 | 5 | |
安装简易性 | 0 | 1 | 2 | 3 | 4 | 5 | |
易于修改性 | 0 | 1 | 2 | 3 | 4 | 5 |
4. PERT估计
- 计划评审技术(PERT):用于项目进度规划的一种技术;
- 理论基础:假设项目持续时间以及整个项目完成时间是随机的,且服从某种概率分布;
- 公式:E(期望规模) = (a(可能的最低规模)+ b(可能的最大规模)) / 2;
- 公式:б(标准差) = ( b(可能的最大规模)- a(可能的最低规模)) / 6;
- 公式:Ei(第i部分期望规模) = (ai(第i部分可能的最低规模)+ 4mi(第i部分最可能的规模)+ bi(第i部分可能的最高规模)) / 6;
- 公式:бi(第i部分标准差) = ( b(第i部分可能的最高规模)- a(第i部分可能的最低规模)) / 6;
- 公式:E(总软件期望规模) = 所有部分的期望规模累加;
- 公式:б(总软件标准差) = 所有部分的标准差的平方累加的½次方;
3. 软件项目成本估算
1. 软件生产率估算
- 软件生产率:在从软件项目规模估算到成本估算的转换过程中,首先要确定每个人越平均完成代码数量;
- 生产率数据获取:
(1)选取最佳完成的规模、语言、应用类型和团队开发经验相似的项目;
(2)获取各个项目的LOC数据;
(3)对于更改国的程序,记录更改代码所占比例;
(4)计算投入到每个项目的人员数量;
(5)计算更i昂木的软件生产率,LOC/PM(每个人月生产代码的数量)。 - 影响因素
(1)软件规模和产品类型对生产率的影响
(2)软件变更和产品类型对生产率的影响规模(KCSI) 产品类型 <10 10~50 >50 语言 1.8 3.9 4.0 控制 1.6 1.8 2.4 通信 1.0 1.6 2.0 变更或新增的百分比 产品类型 <20% 20%~40% >40% 语言 3.0 6.0 6.6 控制 1.5 2.3 2.3 通信 1.4 1.8 1.9 - 估算:生产率 = 历史生产率 × (规模 / 变更新增百分比)
2. 软件项目成本估算方法(重点)
- 专家判定:
(1)求中值或平均值;
(2)召开小组会议;
(3)Delphi法(不能讨论);
(4)Wideband Delphi技术(可以讨论)。 - 类比:把当前项目和以前做过的类似项目比较,通过比较获得其工作量估算值;
- 自顶向下:根据将要开发的软件i项目的总体特性,结合以前完成项目积累的经验进行推算,优点:对其系统级重视,缺点:难以识别较低级别上的技术性困难;
- 自底向上:把带开发的软件逐步细化,知道能明确工作量,容易忽略许多与软件开发有关的系统级成本;
- 算法模型:
(1)模型的分类:静态模型、动态模型;
(2)静态单变量模型:C(待估算的量) = aL(输入的预测量)^b,a和b为历史经验得到的参数;
(3)静态多变量模型:基本COCOMO模型(以已经估算出来的LOC为自变量的函数来计算软件开发工作量)、中级COCOMO模型(在基础模型的基础上,再用成本驱动因子来调整工作量的估计)、高级COCOMO模型(在中级模型的基础上,结合成本驱动因子对软件工程过程中每一个步骤);
(4)动态多变量模型:通过多个变量的相互作用对软件工程作出估算;
(5)其他模型:
①Bailey-Bashili模型(E=5.5 + 0.73 × (KLOC)1.16);
②Doty模型(E=5.288 × (KLOC)1.16);
③Albrecht 和 Gaffney模型(E = -13.39 + 0.0545FP);
④Kemerer模型(E = 60.62 × 7.728 × 10-8FP3);
⑤Maston\Barnett和Mellichamp模型(E = 585.7 + 5.12FP)。
3.软件项目成本估算模型
- COCOMO模型:自底向上的方法
(1)E(每人每月工作量) = aS(KLOC程序规模)b × EFA(工作量调整因子,基本模型取1);
(2)开发模式:有机式、嵌入式、半分离式
(3)基本COCOMO模型:t(开发时间)= cEd
(4)中级COCOMO模型开发模式 a b c d 有机式 2.4 1.05 2.5 0.38 半分离式 3.0 1.12 2.5 0.35 嵌入式 3.6 1.20 2.5 0.32
(5)详细COCOMO模型:两种功能(阶段敏感的成本驱动因素、三层次的产品分级结构),改编后的模块规模 = (原模块的LOC × AAF(调节因子)/100);AAF = 0.4 × 设计修改的比例 + 0.3 × 编程修改的比例 + 0.3 × 集成修改的比例;开发模式 a b 有机式 3.2 1.05 半分离式 3.0 1.12 嵌入式 2.8 1.20 - COCOMO ⅱ
- Putnam模型:自顶向下的宏观估算模型
(1)软件方程:S(源代码行数) = C(技术因子) × E(每人每年工作量) 1/3 × t (每年的耗费时间)4/3
(2)人力增加方程:D(人员配备加速度的一个常数)= E / t3
(3)工作量计算方程:E = S9/7 × D4/7 / C9/7,E = S3 / C3 × t4;软件项目 D 与其他系统有很多界面和互相作用的新软件 12.3 独立的系统 15 现有系统的重复事项 27
(4)软件工具SLIM:软件生命周期管理软件(SLIM)是一个以Putnam模型为基础的专用软件费用估算工具;使用方面如下:①软件预算,②软件开发费用,计划和风险预测,③软件开发环境的生产率状况,④承包商软件标书的评价。 - 成本模型的评价:存在的问题
(1)主观因素的存在;
(2)估算模型样本的有限性;
(3)Norden-Rayleigh曲线;
(4)估算模型的某些秦阿琪假定有悖于软件哦工程;
(5)模型之间有矛盾的地方;
(6)软件项目规模与其工作量关系的问题。
4.软件项目成本估算步骤
- 建立目标;
- 规划需要的数据和资源;
- 确定软件需求;
- 拟定可行的细节:原因如下
(1)考察越细,对软件开发技术理解得越透彻;
(2)在估算时把软件分的越细、模块越多,使各个部分的误差趋向于相互抵消,总的误差减小;
(3)在软件必须执行的功能考虑的越多,遗漏某些次要成本的可能性就越小。 - 运用多中独立的技术和原始资料;
- 比较并迭代各个估算值;
- 随访跟踪:原因如下:
(1)软件成本估算的输入和相应技术是不完善的;
(2)通过估算值和实际值的比较还能确认有些项目的确不符合估算模型;
(3)在项目进行过程中,往往会发生某些变动;
(4)软件领域是不断发展的。
5. 软件项目成本预算制定
- 注意事项:
(1)资源计划的匹配;
(2)预算的全面性;
(3)预算的综合性;
4. 软件项目成本监控(重点)
软件项目成本控制包括监控成本预算执行状况,确保证字啊执行的预算计划是有效的,对于不适合的计划进行修改变更后及时通知i项目干系人。
1.成本管理常见的问题
- 项目成本估算不准确;
- 预算不详细;
- 成本预算变更不及时。
2. 软件项目成本监控要素
- 资源计划的完备性;
- 成本估算的准确性;
- 预算计划的有效性;
- 成本控制过程的完备性。
3. 赢得值分析法
- 状态表示
(1)累计计划成本额或成计划投资额(BCWS);
(2)赢得值或完成投资额(BCWP);
(3)实际成本额(ACWP) - 项目预算和计划:
C B C = ∑ t = 1 T ∑ n = 0 N R b n ( t ) × Q s n ( t ) CBC=\displaystyle\sum_{t=1}^T\displaystyle\sum_{n=0}^NRb_n(t) \times Qs_n(t) CBC=t=1∑Tn=0∑NRbn(t)×Qsn(t)
CBC:累计计划预算成本,反映了到某期位置按计划进度完成的项目预算值;
Rb:预算单价
Qs:计划工作量
n:某一预算项
N:预算项数
t:时段
T:当前时段 - 收集实际成本
C A C = ∑ t = 1 T ∑ n = 0 N R c n ( t ) × Q p n ( t ) CAC=\displaystyle\sum_{t=1}^T\displaystyle\sum_{n=0}^NRc_n(t) \times Qp_n(t) CAC=t=1∑Tn=0∑NRcn(t)×Qpn(t)
CAC:累计实际成本,反映了实际成本花费;
Rc:合同单价
Qp:已完成工作量
n:某一合同报价单项
N:合同报价单项数
t:时段
T:当前时段 - 计算赢得值
C E V = ∑ t = 1 T ∑ n = 0 N R b n ( t ) × Q p n ( t ) CEV=\displaystyle\sum_{t=1}^T\displaystyle\sum_{n=0}^NRb_n(t) \times Qp_n(t) CEV=t=1∑Tn=0∑NRbn(t)×Qpn(t)
CEV:累计赢得值,反映了项目实际绩效的价值
Rb:预算单价
Qp:已完成工作量
n:某一合同报价单项
N:合同报价单项数
t:时段
T:当前时段 - 成本/进度绩效:CPI(成本绩效指数) = CEV / CAC,CV(成本差异) = CEV - CAC;
- 成本/进度控制:经常及时地分析成本/进度绩效,及早地发觉差异和无效率;CPI最小或CV负值最大的工作包或分析工作应该给与最高优先权。
三、小结
- 软件项目成本管理是软件项目的早期要开展的一项重要工作,也是软件项目管理的重要内容之一;
- 成本估算是制定软件项目计划的依据,对于软件项目的整个运行过程有重要意义。