5.2IT项目成本管理有什么不一样

项目成本是完成项目所需要的全部费用的总和。一般项目成本包括项目决策和定义成本、项目获取成本、项目设计成本、项目实施成本等。其中,项目实施成本是项目总成本的主要组成部分。而IT项目有其特殊性,IT项目成本是指完成IT项目所发生的全部资源耗费的货币表现。前面也解释过,为什么IT项目可以视作软件项目。

5.2.1 软件项目的成本构成

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

1. 基本构成项目

一般来讲,软件项目的成本构成主要包括以下几种。

(1)软硬件购置成本:这部分费用虽然可以作为公司的固定资产,但因技术折旧太快,需要在项目开发中分摊一部分费用。

(2)人工成本(软件开发、系统集成费用):主要是指开发人员、操作人员、管理人员的工资、福利费等。在软件项目中,人工费用总是占有相当大的份额,有的可以占到项目总成本的80%以上。

(3)维护成本: 维护成本是在项目交付使用之后,承诺给客户的后续服务所必需的开支。可以说,软件业属于服务行业,其项目的后期服务是项目必不可少的重要实施内容。所以,维护成本在项目生命周期成本中,占有相当大的比例。

(4)培训费:培训费是项目完毕后对使用方进行具体操作的培训所花的费用。

(5)业务费、差旅费:软件项目常以招投标的方式进行,并且会经过多次的谈判协商才能最终达成协议,在进行业务洽谈过程中所发生的各项费用,比如业务宣传费、会议费、招待费、招投标费等必须以合理的方式计入项目的总成本费用。此外,对异地客户的服务需要一定的差旅费用。

(6)管理及服务费:这部分费用是指项目应分摊的公司管理层、财务及办公等服务人员的费用。

(7)其他费用:包括基本建设费用,如新建、扩建机房、购置计算机机台、机柜等的费用;材料费,如打印纸、磁盘等购置费;水、电、气费;资料、固定资产折旧费及咨询费等。

2. 按性质划分构成项目

当然,如果从财务角度看,可将项目成本构成按性质划分为两种。

(1)直接成本:与具体项目的开发直接相关的成本,如人员的工资、外包外购成本等,又可细分为开发成本、管理成本、质量成本等。

(2)间接成本:不归属于一个具体的项目,是公司的运营成本,分摊到各个项目,如房租、水电、保安、税收、福利、培训等。

以上成本中,最难估算的就是人工成本,同时也是IT项目中最大的成本。有人会问,软件成本最难估算的为什么是人工成本?每个人发多少工资应该是固定的,这有什么难估算和难控制的?实际上,项目管理中,最能影响成本的是项目管理另外的两大基准——范围、进度和一大要素——质量。

3. 影响成本的两大基准和一大要素

实际上,项目管理中最能影响成本的是项目管理另外的两大基准:范围、进度,一大要素:质量。

范围与成本成正比关系,项目成本随着项目范围的扩大而增加,随着项目范围的缩小而减少。范围过小而成本很高,必然造成资源浪费,如同帕金森定律,这本来就是项目管理要消除的现象之一。而范围过大成本很低,势必会影响项目的进度和质量,最终导致项目失败。

进度越紧,成本自然就会增加。比如赶工期的时候,因为进度很紧,势必要采取一些赶工的措施,比如加班、高级材料、提高工资、外包等,势必会增加项目成本。

质量更容易理解,质量要求越低,项目成本越低,质量要求越高,完成项目就需要采用更好的资源,验收的标准也就越高,耗费更长的时间,成本自然就会越高。

4. 影响成本的其他因素

软件项目不外如是,除了上述影响因素外,还有六个独特的因素影响软件项目成本。

(1)开发语言和规模:开发语言的选择,开发模式,系统框架的选择、代码行数、交付代码的比例等。

(2)数据库类:数据库的选择,包括记录数及其数据量、存储过程数目、触发器数目等。

(3)系统复杂性:整个系统复杂性的级别、接口的复杂性、系统的唯一性、系统开发难度、系统接口、程序的结构、文件报告和应用程序数目、生产期人力总和、开发期人力总和、测试和验证期人力总和、生存期总时间、开发期总时间等。

(4)软件开发方法:面向问题分析法、面向功能的开发方法、面向数据流的开发方法、面向数据结构方法与结构化开发方法、面向过程方法、面向对象方法、可视化方法等。

(5)文档编写:文档类别、文档数量、文档发布等。

(6)项目配置和支持:硬件配置状态、网络运行环境、专用设备购置、配套软件外购、相关技术资料、各种通信交流支出、不可预见成本等。

以上都是影响软件项目成本的因素,这一切都是靠人做出来的,所以人的劳动消耗需要的代价是软件开发的主要成本。这里的劳动不是指体力劳动,而是指脑力劳动。软件项目通常是技术密集型项目,其成本构成与一般的建设项目有很大区别。我们要计算人工成本,首先计算工作量,那么必然要有一套度量标准。

5.2.2 测量软件项目规模的方法

对于软件项目,一般会测量软件项目的规模。软件项目规模一般是指开发软件的规模大小,是影响软件项目成本和工作量的主要因素。它的度量方法一般有三种:代码行数估算法 (lines of code,简称LOC);功能点估算法 (function point,简称FP);PERT估算法。

1. 代码行数估算法(LOC)

(1)从软件程序量的角度定义项目规模

(2)要求功能分解足够详细。

(3)一般是根据经验数据估计实现每个功能模块所需的源程序行数,然后把源程序行数累加起来,得到软件的整体规模。

(4)有一定的经验数据(类比和经验方法)。

(5)与具体的编程语言有关。

优点:①直观;②准确(在有代码的情况下);③易于计算(可使用代码行统计工具)。

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

2. 功能点估算法(FP)

(1)用系统的功能数量来测量其规模,与实现产品所使用的语言没有关系。

(2)对系统的外部功能和内部功能进行计数。

(3)根据技术复杂度因子(权)对它们进行调整,产生产品规模的度量结果。

功能点计算公式如下。

FP =UFC×TCF

UFC(unadjusted function point count),未调整功能点计数。

TCF(technical complexity factor) ,技术复杂度因子。

计算UFC时,首先计算功能计数项,对以下五类元素计数。

①用户输入:由用户输入的面向应用的数据项。

②用户输出:向用户提供的输出数据项。

③用户查询:要求系统回答的交互式输入。

④外部接口文件:与其他系统的接口数据文件。

⑤内部文件:系统使用的内部固定文件。

其次对各功能计数项加权并求和,得到UFC。

计算TCF时的技术复杂度影响因素,见表5-1。

表5-1 技术复杂度影响因素

每个技术复杂度影响因素的取值范围,见表5-2。

表5-2 取值范围

优点:①软件系统的功能与实现该软件系统的语言无关;②在软件开发的早期阶段(如需求分析),就可通过对用户需求的理解获得软件系统的功能点数目,因而该方法可以较好地克服基于代码行的软件项目规模表示方法的不足。

缺点:①功能点计算主要靠经验公式,主观因素比较多;②没有直接涉及算法的复杂度,不适合算法比较复杂的软件系统;③计算功能点所需的数据不好采集。

3. PERT估算法

最初PERT可以估算整个项目在某个时间内完成的概率,后来学者将其引入软件规模估计的应用。计算方式有以下两种。

(1)一种简单的PERT规模估算技术是假设软件规模满足正态分布。软件的实际规模在a、b之间的概率为0.997,a是软件可能的最低规模,b是软件可能的最大规模,则期望规模如下。

E=(a+b)÷2

(2)较好的PERT规模估计技术是一种基于正态分布和软件各部分单独估算的技术,该技术需要产生三个规模估算量。即a——软件可能的最低规模;m——软件最可能的规模;

b——软件可能的最高规模。

此时的期望规模如下。

E=(a+4m+b)÷6

优点:①软件系统的功能与实现该软件系统的语言无关;②可以快速估算出软件规模。

缺点: PERT估算法完全依赖专家的经验,主观因素较多。

当我们完成了软件规模的估算,就可以按照上一节的内容继续估算成本了。

5.2.3 成本估算方法

成本估算是对完成项目所需费用的估计,它是项目成本管理的核心。成本估算可以有一些误差,估算结果可用一个范围表示。至于估算方法可以参照上一节中的专家判断、类比、参数估算、自下而上估算、三点估算等方法来估算。

由于影响软件成本的因素很多(人、技术、环境等),成本估算对于软件项目开发来说仍然是很不成熟的技术,大多数时候需要经验。就目前的实际情况来说,没有一个估算方法或者成本估算模型可以适用于所有软件类型和开发环境。但是,项目还得继续,工作还是要去做。

所以,我们通过估算软件项目规模,就能够得到软件项目工作量。当然,这种估算也不一定准确,但是如同成本估算的那么多种方法也没办法准确估算软件项目成本,通过估算得到软件项目规模也只是一个范围值,并不精确,但可以指明为了提供软件的功能而必须完成的软件工程任务量。

我们将这个的度量单位定为:人月、人天、人年,即人在单位时间内完成的任务量。为了确定工作量度量单位,可设定一个“标准程序员”,例如具有15~18个月开发经验的程序员。

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

有了工作量估算值后,就可以计算项目的人力成本了,计算公式如下。

项目人力成本=项目工作量×平均人力资源单价×成本系数

平均人力资源单价可由人员的工资确定。之所以要乘以成本系数,是因为人力资源的成本要高于工资,公司除了要为人员支付工资外,还要支付各种保险金、福利、资源消耗等。对软件或IT公司来说,一般成本系数大约是1.5~2.0。所以,最难估算的就是人工成本。