首页 » 技术分享 » 第五章 软件项目成本管理

第五章 软件项目成本管理

 
  • 软件项目的成本管理,就是为了确保项目在既定预算内按时、按质、经济、高效地实现项目目标所开展的一种项目管理过程。
  • 项目的成本管理包括成本估算、成本预算和成本控制。

本章内容提要

5.1 软件项目成本管理概述

5.2 软件规模度量

5.3 成本估算

5.4 成本预算

5.5 成本控制

5.1 软件项目成本管理概述

  • 软件项目规模一般是指所开发软件的规模大小,它的度量方法一般有两种:

       LOC(Lines of Code):源代码程序长度的测量

       FP(Function Point):系统功能数量的测量

  • 软件项目工作量是指为了提供软件的功能而必须完成的软件工程任务量。其度量单位为:

       人月、人天、人年:人在单位时间内完成的任务量

       为了确定工作量度量单位,可设定一个“标准程序员”,例如具有15~18个月开发经验的程序员。

  • 工作量与规模紧密相关,此外还与项目和产品特性(如团队的技术和能力、所使用的语言和平台、团队的稳定性、项目中的自动化程度、产品复杂性等)相关。
  • 在不会引起混淆的情况下,工作量和规模这两个概念可不做区别。

软件项目成本

  • 完成软件项目工作量相应付出的代价,即待开发软件项目所需要的资金。
  • 人的劳动消耗所需要的代价是软件开发的主要成本。
  • 成本一般采用货币单位来计算,如人民币、美元等。

工作量和成本的关系

  • 工作量是项目成本的主要考虑因素,完成项目工作量所消耗的成本是项目成本最主要的部分。因此,项目的工作量估算和成本估算常常同时进行。
  • 如果确定了单位工作量所消耗的成本,则可根据项目工作量直接计算出完成项目工作量所消耗的成本。

    例如:如果一个软件项目的工作量是20人月,而企业的人力成本参数是2万元/人月,则完成项目工作量所需的成本是40万元。

软件项目成本的构成

  • 软件项目通常是技术密集型项目,其成本构成与一般的建设项目有很大区别,其中最主要的成本是在项目开发过程中所花费的工作量及相应的代价,它不包括原材料及能源的消耗,主要是人的劳动消耗。
  • 一般来讲,软件项目的成本构成主要包括以下几种:

(1)软硬件购置成本:这部分费用虽然可以作为企业的固定资产,但因技术折旧太快,需要在项目开发中分摊一部分费用。
(2)人工成本(软件开发、系统集成费用):主要是指开发人员、操作人员、管理人员的工资福利费等。在软件项目中人工费用总是占有相当大的份额,有的可以占到项目总成本的80%以上。
(3)维护成本: 维护成本是在项目交付使用之后,承诺给客户的后续服务所必需的开支。可以说,软件业属于服务行业,其项目的后期服务是项目必不可少的重要实施内容。所以,维护成本在项目生命周期成本中,占有相当大的比例。
(4)培训费:培训费是项目完毕后对使用方进行具体操作的培训所花的费用。
(5)业务费、差旅费:软件项目常以招投标的方式进行,并且会经过多次的谈判协商才能最终达成协议,在进行业务洽谈过程中所发生的各项费用比如业务宣传费、会议费、招待费、招投标费等必须以合理的方式计入项目的总成本费用中去。此外,对异地客户的服务需要一定的差旅费用。
(6)管理及服务费:这部分费用是指项目应分摊的公司管理层、财务及办公等服务人员的费用。
(7)其他费用:包括:基本建设费用,如新建、扩建机房、购置计算机机台、机柜等的费用;材料费,如打印纸、磁盘等购置费;水、电、气费;资料、固定资产折旧费及咨询费等等。

  • 从财务角度看,可将项目成本构成按性质划分为两种:

(1)直接成本。与具体项目的开发直接相关的成本。如人员的工资、外包外购成本等。又可细分为开发成本、管理成本、质量成本等。
(2)间接成本。不归属于一个具体的项目,是企业的运营成本,分摊到各个项目中。如房租、水电、保安、税收、福利、培训,等等。

软件项目成本管理的内容和目标

  • 软件项目成本管理的内容包括成本估算、成本预算、成本控制。
  • 现实中,软件项目经常成本超支,这是因为:项目需求含糊,经常会由于客户不断变化的实际要求而变更计划;项目成本结构复杂,成本核算方法和实施难度大;成本的估算不合理,行业标准不明确,尤其是间接成本的估算没有标准成熟的方法和科学依据;项目涉及新的技术或商业过程,有很大的内在风险。
  • 结合IT项目的成本特点,应用恰当的项目成本管理技术和方法可以很有效地改变成本超支状况。
  • 成本管理的主要目的就是将项目的运作成本控制在预算的范围内,或者控制在可以接受的范围内。

5.2 软件规模度量

  • 软件的规模是影响软件项目成本和工作量的主要因素。
  • 最常用的度量软件规模的方法是代码行(Lines of Code,LOC)和功能点(Function Point,FP),分别利用代码行数和功能点数来表示软件系统的规模。

代码行(LOC)

从软件程序量的角度定义项目规模。

  1. 要求功能分解足够详细。
  2. 一般是根据经验数据估计实现每个功能模块所需的源程序行数,然后把源程序行数累加起来,得到软件的整体规模。
  3. 有一定的经验数据(类比和经验方法)。
  4. 与具体的编程语言有关。

优点:

  1.     直观、准确(在有代码的情况下)、易于计算(可使用代码行统计工具)。

缺点:

  1. 对代码行度量没有公认的标准定义。
  2. 代码行数量依赖于所用的编程语言和个人的编程风格。
  3. 在项目早期,需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量。

功能点(FP)

  • 用系统的功能数量来测量其规模,与实现产品所使用的语言没有关系。
  • 对系统的外部功能和内部功能进行计数。
  • 根据技术复杂度因子(权)对它们进行调整,产生产品规模的度量结果。

功能点计算公式

  • FP =UFC*TCF
  1. UFC(Unadjusted Function Point Count)未调整功能点计数
  2. TCF(Technical Complexity Factor)   技术复杂度因子

UFC的计算方法

  • 首先计算功能计数项,对以下五类元素计数:
  1. 用户输入:由用户输入的面向应用的数据项。
  2. 用户输出:向用户提供的输出数据项。
  3. 用户查询:要求系统回答的交互式输入。
  4. 外部接口文件:与其它系统的接口数据文件。
  5. 内部文件:系统使用的内部固定文件。
  • 然后对各功能计数项加权并求和,得到UFC。


案例分析

  • 某学院安装了一个工资系统,人事处要求创建一个子系统来分析每门课程的人力资源成本。要求该子系统提供查询每门课程人力资源成本的功能。每名教师所得工资的细节可以通过工资系统中的文件得到,教师花在教每门课上的小时数可通过一个基于计算机的计时表系统中的文件得到。该子系统将计算结果存放到由总会计系统读取的一个文件中,并产生一个报告,来显示每名教师每门课的课时数及这些课时数相应的成本。
  • 问题:计算该子系统的UFC。(子系统产生的报告复杂度为高,其它所有元素的复杂度均为中等)

  • 答案:UFC=1*7+1*4+3*7=32      

TCF的计算方法


每个技术复杂度影响因素的取值范围:

TCF=0.65+0.01(sum(Fi)): Fi:0-5,TCF:0.65~1.35

  • 该子系统的功能点为:  FP=UFC*TCF=32*0.87=27.8

功能点度量的优缺点

  • 优点:
  1. 软件系统的功能与实现该软件系统的语言无关;
  2. 在软件开发的早期阶段(如需求分析)就可通过对用户需求的理解获得软件系统的功能点数目,因而该方法可以较好地克服基于代码行的软件项目规模表示方法的不足。
  • 缺点:
  1. 功能点计算主要靠经验公式,主观因素比较多;
  2. 没有直接涉及算法的复杂度,不适合算法比较复杂的软件系统;
  3. 计算功能点所需的数据不好采集。

功能点与代码行的转换

5.3 成本估算

5.3.1 引言

  • 成本估算是对完成项目所需费用的估计,它是项目成本管理的核心。
  • 成本估算可以有一些误差。估算结果可用一个范围表示,例如$10000±$1000。
  • 由于影响软件成本的因素太多(人、技术、环境等),成本估算仍然是很不成熟的技术,大多数时候需要经验。目前没有一个估算方法或者成本估算模型可以适用于所有软件类型和开发环境。

成本估算的依据

  • WBS:根据WBS,可将整体成本分解到各工作包中,使成本的估算能够分项进行,各个工作包的成本估算能够做到尽量的准确合理。
  • 资源要求:是进行成本估算的基础,用来说明所需资源的类型和数量以及分配情况。
  • 资源消耗率,即资源单价。必须知道每种资源单价(例如每小时人员费用等)以计算项目成本。如果实际单价不知道,则必须估计资源单价本身。
  • 进度规划:进度计划中的活动持续时间估计会影响项目成本估计。
  • 历史项目数据:以往项目的数据,包括规模、进度、成本等,是项目估算的主要参考。一个成熟的软件企业应该建立完善的项目档案。

成本估算的输出

  • 估算文件:包括项目需要的资源、资源的数量、质量标准、估算成本等信息,估算成本单位一般是货币单位,也可以是规模单位,然后转换为货币单位。
  • 估算说明:包括工作范围的描述(这通常可由WBS获得);说明估算的基础和依据,即确认估算是合理的,说明估算是怎样产生的;确认为成本估算所做的任何假设的合理性以及估算的误差变动等。

5.3.2 成本估算方法

类比估算法

自下而上估算法

参数估算法

专家估算法

“分解-累计”估算方法

类比估算法

  • 也称为基于案例的推理,估算人员根据以往完成的类似项目(源案例)所消耗的成本(或工作量),来推算将要开发的软件(目标案例)的成本(或工作量)。
  • 需提取项目的一些特性作为比较因子,如项目类型(MIS系统、实时系统等)、编程语言、项目规模、开发人员数量、软件开发方法等。利用这些比较因子来确定源案例与目标案例之间的匹配程度。
  • 在新项目与以往项目只有局部相似时,可行的方法是“分而治之”,即对新项目适当地进行分解,以得到更小的任务、工作包或单元作为类比估算的对象。
  • 通过这些项目单元与已有项目的类似单元对比后进行类比估算。
  • 最后,将各单元的估算结果汇总得出总的估计值。
  • 在项目初期信息不足时(例如市场招标和合同签订),且有以往类似项目的数据时,适于采用类比估算法。
  • 该方法简单易行,花费少,但具有一定的局限性,准确性差。

自下而上估算法

  • 首先对单个工作包或活动的成本进行最具体、细致的估算,然后把这些细节性成本向上汇总到更高的层次。
  • 该方法通常在项目开始以后的详细规划阶段,或者WBS已经确定的阶段,需要进行准确估算的时候采用。
  • 优点:因为每项工作的执行者负责对该项工作进行成本估算,比起高层管理人员来讲,这些直接参与项目建设的人员更清楚项目涉及活动所需要的资源量,估算的专业性和准确性都较高。
  • 缺点:花费时间长,工作代价高。

自下而上---举例


参数估算法

  • 使用项目特性参数建立经验估算模型来估算成本。
  • 经验估算模型是通过对大量的项目历史数据进行统计分析(如回归分析)而导出的。
  • 经验估算模型提供对项目工作量的直接估计。
  • 该方法简单,而且比较准确,但如果模型选择不当或提供的参数不准确,也会产生较大的偏差。
经验估算模型
  • 模型形式:E=A+B*SC
  1. E:以人月表示的工作量
  2. A,B,C:经验导出的系数
  3. S:主要的输入参数(通常是LOC,FP等)
  • 面向LOC的:
  1. Walston-Felix(IBM)模型 E= 5.2*(KLOC)^0.91
  2. Balley-Basili模型 E=5.5+0.73*(KLOC)^1.16
  3. Boehm简单模型 E=3.2*(KLOC)^1.05
  4. Doty模型 E=5.288*(KLOC)^1.047
  • 面向FP的:
  1.  Albrecht and Gaffney 模型    E=-13.39+0.0545FP
  2. Matson,Barnett   E=585.7+15.12FP
Walston-Felix(IBM)模型
  • 1977年,IBM的Walston和Felix提出了如下的估算公式:
  1. E = 5.2×L ^0.91 ,L是源代码行数(以KLOC计),E是工作量(以PM计)
  2. D = 4.1×L ^ 0.36,D是项目持续时间(以月计)
  3. S = 0.54×E ^ 0.6,S是人员需要量(以人计)
  4. DOC = 49×L ^ 1.01。DOC是文档数量(以页计)
举例
  • 采用java 完成项目,366功能点,则
  1. L = 366×46 = 16386行 = 16.386KLOC
  2. E = 5.2×L ^ 0.91 = 5.2×16.386 ^ 0.91 = 66人月
  3. DOC = 49×L ^ 1.01 = 49×16.386 ^ 1.01 = 826页
COCOMO(Constructive Cost model)
  • 构造性成本模型,是世界上应用最广泛的参数型软件成本估计模型。
  • 由Barry Boehm利用加利福尼亚的一个咨询公司的大量项目数据推导出的一个成本模型。该模型于1981年首次发表,于1994年又推出了COCOMO II。
COCOMO基本原理
  • 将开发所需要的工作量表示为软件规模和一系列成本因子的函数,基本估算公式:


转载自原文链接, 如需删除请联系管理员。

原文链接:第五章 软件项目成本管理,转载请注明来源!

0