740 likes | 927 Views
软件项目管理. 第四章 软件项目成本管理. 本章内容提要. 软件项目规模成本的概念 成本估算 成本预算 成本控制. 第一节 软件项目规模成本的概念. 软件项目规模度量单位: LOC(Lines of Code) :源代码程序长度的测量 FP(Function Point) :系统功能数量的测量 软件项目工作量是指为了提供软件的功能而必须完成的软件工程任务量。其度量单位为: 人月、人天、人年:人在单位时间内完成的任务量. 为了确定工作量度量单位,可设定一个“标准程序员”,例如具有 15~18 个月开发经验的程序员。
E N D
软件项目管理 第四章 软件项目成本管理
本章内容提要 • 软件项目规模成本的概念 • 成本估算 • 成本预算 • 成本控制
第一节 软件项目规模成本的概念 • 软件项目规模度量单位: • LOC(Lines of Code):源代码程序长度的测量 • FP(Function Point):系统功能数量的测量 • 软件项目工作量是指为了提供软件的功能而必须完成的软件工程任务量。其度量单位为: • 人月、人天、人年:人在单位时间内完成的任务量
为了确定工作量度量单位,可设定一个“标准程序员”,例如具有15~18个月开发经验的程序员。为了确定工作量度量单位,可设定一个“标准程序员”,例如具有15~18个月开发经验的程序员。 • 工作量与规模紧密相关,此外还与项目和产品特性(如复杂性)相关。 • 在不会引起混淆的情况下,工作量和规模这两个概念可不做区别。
软件项目成本 • 完成软件项目工作量相应付出的代价,即待开发软件项目所需要的资金。 • 人的劳动消耗所需要的代价是软件产品的主要成本。 • 成本一般采用货币单位来计算,如人民币、美元等。
工作量和成本的关系 • 工作量是成本的主要考虑因素,项目的工作量估算和成本估算常常同时进行。 • 如果确定了单位工作量的成本,则可根据项目工作量直接计算出项目成本。 例如:如果一个软件项目的工作量是20人月,而企业的人力成本参数是2万元/人月,则项目的成本是40万元。
本章内容提要 • 软件项目规模成本的概念 • 成本估算 • 成本预算 • 成本控制
第二节 成本估算 • 引言 • 成本估算方法 • 一种实用的项目成本估算过程
2.1 引言 • 成本估算是对完成项目所需费用的估计,它是项目成本管理的核心。 • 成本估算可以有一些误差。估算结果可用一个范围表示,例如$10000±$1000。 • 成本估算所依据的信息包括:项目需求和WBS,资源要求、资源消耗率(资源单价)、项目进度规划、历史项目数据等。
项目成本的构成 • 直接成本:与具体项目的开发直接相关的成本。如人员的工资、外包外购成本等。又可细分为开发成本、管理成本、质量成本等。 • 间接成本:不归属于一个具体的项目,是企业的运营成本,分摊到各个项目中。如房租、水电、保安、税收、福利、培训,等等。
2.2 成本估算方法 • 代码行、功能点 • 类比估算法 • 参数估算法 • 专家估算法
代码行(LOC) 从软件程序量的角度定义项目规模。 • 要求功能分解足够详细。 • 有一定的经验数据(类比和经验方法)。 • 与具体的编程语言有关。
代码行(LOC) • 优点: 直观、准确(在有代码的情况下)、易于计算(可使用代码行统计工具)。 • 缺点: • 对代码行度量没有公认的标准定义。 • 代码行数量依赖于所用的编程语言和个人的编程风格。 • 在项目早期,需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量。
功能点(FP) • 用系统的功能数量来测量其规模,与实现产品所使用的语言和技术没有关系。 • 对系统的外部功能和内部功能进行计数。 • 根据技术复杂度因子(权)对它们进行调整,产生产品规模的度量结果。
功能点计算公式 • FP =UFC*TCF • UFC(Unadjusted Function Point Count) 未调整功能点计数 • TFC(Technical Complexity Factor) 技术复杂度因子
UFC的计算方法 • 首先计算功能计数项,对以下五类元素计数: • 外部输入:由用户输入的面向应用的数据项。 • 外部输出:向用户提供的输出数据项。 • 外部查询:要求系统回答的交互式输入。 • 外部接口文件:与其它系统的接口数据文件。 • 内部文件:系统使用的内部固定文件。
UFC的计算方法 • 然后对各功能计数项加权并求和,得到UFC。
案例分析 • 某学院安装了一个工资系统,人事处要求创建一个子系统来分析每门课程的人力资源成本。要求该子系统提供查询每门课程人力资源成本的功能。每名教师所得工资的细节可以通过工资系统中的文件得到,教师花在教每门课上的小时数可通过一个基于计算机的计时表系统中的文件得到。该子系统将计算结果存放到由总会计系统读取的一个文件中,并产生一个报告,来显示每名教师每门课的课时数及这些课时数相应的成本。
案例分析 • 问题:计算该子系统的UFC。(子系统产生的报告复杂度为高,其它所有元素的复杂度均为中等)
案例分析 • 答案:UFC=1*7+1*4+3*7=32
TCF=0.65+0.01(sum(Fi)): Fi:0-5,TCF:0.65~1.35 取值 对系统的影响 0 不存在或者没有影响 1 不显著的影响 2 相当的影响 3 平均的影响 4 显著的影响 5 强大的影响 TCF的计算方法 每个技术复杂度影响因素的取值范围:
案例分析 sum(Fi)=22 TCF=0.65+0.01(sum(Fi))=0.65+0.01*22=0.87
案例分析 • 该子系统的功能点为: FP=UFC*TCF=32*0.87=27.8
成本估算方法 • 代码行、功能点 • 类比估算法 • 参数估算法 • 专家估算法
类比估算法 • 也称为基于案例的推理,估算人员根据以往完成的类似项目(源案例)所消耗的总成本(或工作量),来推算将要开发的软件(目标案例)的总成本(或工作量)。 • 需提取项目的一些特性作为比较因子,如项目类型(MIS系统、实时系统等)、编程语言、项目规模、开发人员数量、软件开发方法等。
类比估算法 • 在项目初期信息不足时(例如市场招标和合同签订)适于采用类比估算法。 • 该方法简单易行,花费少,但准确性差。
成本估算方法 • 代码行、功能点 • 类比估算法 • 参数估算法 • 专家估算法
参数估算法 • 使用项目特性参数建立经验估算模型来估算成本。 • 经验估算模型是通过对大量的项目历史数据进行统计分析(如回归分析)而导出的。 • 经验估算模型提供对项目工作量的直接估计。 • 该方法简单,而且比较准确,但如果模型选择不当或提供的参数不准确,也会产生较大的偏差。
经验估算模型 • 模型形式:E=A+B*SC • E:以人月表示的工作量 • A,B,C:经验导出的系数 • S:主要的输入参数(通常是LOC,FP等)
经验估算模型 • 面向LOC的: • Walston-Felix(IBM)模型 E= 5.2*(KLOC)^0.91 • Balley-Basili模型 E=5.5+0.73*(KLOC)^1.16 • Boehm简单模型 E=3.2*(KLOC)^1.05 • Doty模型 E=5.288*(KLOC)^1.047
经验估算模型 • 面向FP的: • Albrecht and Gaffney 模型 E=-13.39+0.0545FP • Matson,Barnett E=585.7+15.12FP
Walston-Felix(IBM)模型 • 1977年,IBM的Walston和Felix提出了如下的估算公式: • E = 5.2×L ^0.91 ,L是源代码行数(以KLOC计),E是工作量(以PM计) • D = 4.1×L ^ 0.36,D是项目持续时间(以月计) • S = 0.54×E ^ 0.6,S是人员需要量(以人计) • DOC = 49×L ^ 1.01。DOC是文档数量(以页计)
COCOMO(Constructive Cost model) • 构造性成本模型,是世界上应用最广泛的参数型软件成本估计模型。 • 由Barry Boehm利用加利福尼亚的一个咨询公司的大量项目数据推导出的一个成本模型。该模型于1981年首次发表,于1994年又推出了COCOMO II。
模型类别 • 基本COCOMO 静态单变量模型。 • 中等COCOMO 在基本模型基础上考虑各种影响因素(工作量驱动因子),调整模型。 • 高级COCOMO 中等COCOMO模型基础上考虑软件工程中各个步骤的影响。
基本COCOMO • E=a*(KLOC)exp(b) • E是项目的工作量(以人月计) • KLOC是软件产品的代码行数 • a、b是依赖于项目自然属性的参数
系统类型 • 有机(Organic) • 各类应用程序,例如数据处理、科学计算等。 • 受硬件的约束比较小,接口环境灵活;软件的规模不是很大。 • 嵌入式(Embeded) • 系统程序,例如实时处理、控制程序等。 • 在硬件和软件的严格约束条件下运行,对系统进行变更的代价很高;软件的规模任意。 • 半相连(Semidetached) • 介于上述两种系统之间。
基本COCOMO举例 • 一个33.3 KLOC的软件开发项目,属于半相连型的项目,采用基本COCOMO进行工作量的估算: • a=3.0,b=1.12 • E = 3.0*L ^1.12 = 3.0*33.3 ^1.12 = 152 PM
中等COCOMO • E=a(KLOC)exp(b)*工作量系数 工作量系数是根据成本驱动因子的打分计算得出,是对公式的校正系数。
工作量系数的计算 • 规定每个成本驱动因子的取值范围,将其取值划分为非常低、低、正常、高、非常高等级别,每个级别对应一个值。例如,软件组织可以决定使用以下系数来评估分析员能力(ACAP)的影响: 非常低(very low) 1.46 低(low) 1.19 正常(nominal) 1.00 高(hign) 0.80 非常高(very hign) 0.71
工作量系数的计算 • 当每个成本驱动因子Fi的值选定后,工作量系数的计算如下: 工作量系数=F1*F2*…Fi…*Fn
中等COCOMO举例 • 一个33.3 KLOC的软件开发项目,属于半相连型的项目,采用中等COCOMO进行工作量的估算: • a=3.0,b=1.12 • 工作量系数=0.70*0.85*1……*1.15=1.09 • E = 3.0*33.3 ^1.12 ×1.09=166 PM
高级(详细)COCOMO • 考虑了各成本驱动因子对分析、设计等各项目阶段的影响。
成本估算方法 • 代码行、功能点 • 类比估算法 • 参数估算法 • 专家估算法
专家估算法 • 由多位对应用领域和开发环境有丰富经验的专家进行成本估算。 • 为避免单个专家产生偏见,尽量由多位专家进行估算,取得多个估算值,最后得出综合的估算值。