如何对软件开发项目开展造价评估
如何对软件开发项目开展造价评估
摘要:目前,国内的很多软件开发项目存在着工程延期、投资超支等情况,难以按期竣工并投入使用。此外,做为建设方也很难拥有雄厚的专业技术实力对即将开发的软件有一个客观、真实的认识。针对上述情况,国内的专业第三方咨询机构有能力为建设方提供软件开发项目的造价评估服务,在建设方对项目作投资决策时为其提供参考。本文将介绍当今主流的造价评估理论和方法,结合笔者在税务领域的实践经验,向大家介绍如何开展造价评估工作。
一、造价评估概述
由于软件本身的复杂性、估算工具的缺乏以及一些人为错误,可能导致软件项目的投资估算往往和实际情况相差甚远。
软件开发项目的造价评估,就是由建设方委托权威的第三方专业咨询机构,通过分析软件开发项目较为详细的需求类文档,并结合具有丰富实践经验的咨询顾问的现场调研结果,利用当前国际通行的功能点分析法以及各类相关的数学模型来对软件开发的工作量(人月)、软件开发的建设费用、需要承建单位投入的开发人员数量以及项目的持续时间等做出较为客观、真实的评估。
二、主流的造价评估技术方法
目前,我国软件开发项目主流的造价评估方法一般是以功能点分析法来确定软件的开发规模,再结合各类数学模型得出软件开发的投资规模、工作量等评估数据。本节将首先简要描述功能点及功能点分析法,然后将介绍基于功能点分析法的主流数学模型。
1、功能点分析法
所谓功能点,是指对软件功能和大小的间接度量单位,一般通过必须和用户交互情况的数目来测算程序工作量的大小。功能点与软件成本具有重要的成本估计关系(CER :Cost Estimating Relationship)。成本系数是指完成某个功能点(FP)的规定活动所需要投入的人工时,因此成本系数的单位为人工时/FP。如开发阶段的成本系数,则是指一个功能点(FP)需要完成“详细需求分析”、“系统设计”、“编码”和“测试”等工作所需要投入的人工时。
功能点分析法(FPA,Function Point Analysis)是在需求分析阶段基于系统功能的一种规模估算方法,是基于应用软件的内部、外部特性以及软件性能的一种间接的规模测量方法。它可以作为经验统计参数化的软件成本估算公式和数学模型的输入数据,以对软件直接成本进行估算。功能点分析法被广泛应用在信息系统、数据库密集型、4GL应用系统开发的规模测量,是目前国际上软件行业普遍接受的软件项目规模度量方法。
2、数学模型
在造价评估领域,可以使用Putnam模型、IBM模型以及COCOMO模型等多种数学模型。下面将简要介绍在造价评估中比较主流的IBM模型。在此模型中,一般情况下,一条机器指令为一行源代码。一个软件的源代码行数不包括程序注释、作业指令、调试程序在内。对于非机器指令编写的源程序,如汇编语言或高级语言,应转换成机器指令源代码行数来考虑。具体公式如下表所示:
IBM模型公式 |
|
代码行 L |
FP × KLOC/FP(千代码行) |
工作量 E |
5.2 × L0.91 (人月) |
文档量 DOC |
49 × L1.01 (页) |
系统建设费用 D |
E × 3.23B (万元) |
开发人员数量 S |
0.54 × E0.8 (人) |
项目持续时间 D |
4.1 × L0.14 (月) |
三、如何开展造价评估工作
功能点是对软件功能和软件规模的间接度量单位,一般通过必须和用户交互情况的数目来测算程序工作量的大小。其工作流程如下:
l 确定计算范围:确定功能点的计算规范、划定应用程序的边界;
l 功能点分析:识别和估算与软件数据和事务功能有关的各种要素及其数量;
l 功能点计算(初步):根据功能点均值和权值计算初步的功能点数UFC;
l 代码复用比率调整;
l 确定技术复杂度调整因子TCF;
l 功能点调节:计算出调整后的功能点数:FP = UFC * TCF。
然后,再结合相应的数学模型以及当地的人月成本,对软件的投资规模进行评估。下面,笔者将以某地税局征管系统的个人税收管理模块改造为例,简要讲解如何开展造价评估工作。
1、功能点分析与计算
功能点分析是从软件用户的角度来评估一个软件系统的功能,它将软件的功能分为五个基本要素:其中两个表示终端用户的数据需求,分别是内部逻辑文件(Internal Logical Files),外部接口文件(External Interface Files);另外三个表示用户对数据的获取处理的事务功能,分别是用户输入(External InPuts),用户输出(External Outputs),用户查询(External Inquiries)。
一旦估算出应用程序中每个功能要素的数量后,就可以将每个平均计数与权值(也称复杂度加权因子)相乘,最后进行合计,算出一个初步的系统功能点数UFC。系统功能点数UFC是该系统所有功能点条目的总和(估计者根据对功能模块复杂度的判断,功能点数可以用乐观值、可能值或悲观值调整)。权值表(也称复杂度加权因子表)如下:
功能要素权值表(Complexity weights Factor)
复杂度 功能要素 |
低 |
平均 |
高 |
用户输入数EI |
3 |
4 |
6 |
用户输出数EO |
4 |
5 |
7 |
用户查询表EQ |
3 |
4 |
6 |
内部逻辑文件数ILF |
7 |
10 |
15 |
外部接口文件数EIF |
5 |
7 |
10 |
每个功能要素的复杂度可通过下表进行分析判断:
功能要素复杂度判别表(Determine the complexity-level)
ILF(内部逻辑文件)和 EIF(外部接口文件) |
EO(用户输出)和 EQ(用户查询) |
EI(用户输入) |
|||||||||
记录单元 |
数据单元 |
文件类型 |
数据单元 |
文件类型 |
数据单元 |
||||||
1-19 |
20-50 |
51+ |
1-5 |
6-19 |
20+ |
1-4 |
5-15 |
16+ |
|||
1 |
低 |
低 |
平均 |
0或1 |
低 |
低 |
平均 |
0或1 |
低 |
低 |
平均 |
2-5 |
低 |
平均 |
高 |
2-3 |
低 |
平均 |
高 |
2-3 |
低 |
平均 |
高 |
6+ |
平均 |
高 |
高 |
4+ |
平均 |
高 |
高 |
4+ |
平均 |
高 |
高 |
因此,软件开发项目可以根据委托方提供的资料,经分析统计得出UFC。其中,功能点数(UFC) = 取整 [( 乐观值 + 可能值Î4 + 悲观值)/ 6 ] Î 权值,系统功能点数(UFC)= Σ功能点数。
征管子系统个人税收管理模块改造项目功能点 |
|||||
信息域值 |
乐观值 |
可能值 |
悲观值 |
权值 |
功能点数UFC |
用户输入数EI |
6 |
8 |
11 |
3 |
24 |
用户输出数EO |
9 |
11 |
15 |
4 |
44 |
用户查询表EQ |
9 |
10 |
13 |
3 |
30 |
内部逻辑文件数ILF |
10 |
12 |
17 |
7 |
84 |
外部接口文件数EIF |
1 |
2 |
3 |
5 |
10 |
系统UFC |
|
|
|
|
192 |
2、代码复用比率调整
部分软件开发项目是在原有系统的基础上进行升级、改造,可能与原有系统具有业务内容趋同、管理对象特征近似、流程简明易于实现等特点。因此,在评估时可以参照本次评估项目的建设内容与原有系统的借鉴关系,从工程实施的角度考虑子系统内部、子系统间、子系统与整个系统平台的代码复用情况,选取代码复用比率因子,对功能点数(UFC)进行代码复用调整。
在本项目中,通过现场的实际调研分析,选取代码复用比率因子为30%,对功能点数(UFC)进行代码复用调整。调整后的功能点为:UFC = 192 Î(1 - 30%)= 134.4。
3、确定技术复杂度因子并进行功能点调节
算出系统功能点数UFC后,还需要乘以技术复杂度因子TCF。技术复杂度一共考虑了14个调节参数,设EMi为根据14个方面的调节参数对软件系统的影响程度,从没有影响到要求极高,给出的一个0-5之间的数。由于征管子系统对软件的性能较高,通过调研及类比得出技术复杂度因子为1.10,具体如下表所示:
技术复杂度因子表
征管子系统个人税收管理模块改造项目 |
|||
EMi |
技术复杂度因子 |
|
参数 |
EM1 |
Data communications |
数据通讯 |
5 |
EM2 |
Performance |
软件性能 |
5 |
EM3 |
Heavily used configuration |
可配置性 |
3 |
EM4 |
Transaction rate |
事务效率 |
4 |
EM5 |
Online data entry |
实时数据输入 |
4 |
EM6 |
End user efficiency |
用户界面复杂度 |
3 |
EM7 |
Online update |
在线升级 |
1 |
EM8 |
Complex processing |
复杂运算 |
2 |
EM9 |
Reusability ease |
代码复用性 |
3 |
EM10 |
Installation ease |
安装简易性 |
3 |
EM11 |
Operations ease |
操作方便性 |
3 |
EM12 |
Multiple ease |
跨平台要求 |
2 |
EM13 |
Facilitate change |
可扩展性 |
3 |
EM14 |
Distributed functions |
分布式数据处理 |
4 |
合计 |
|
|
45 |
技术复杂度因子:TCF=0.65 + 0.01× =0.65 + 0.01 × 45 = 1.10 |
通过上述过程的计算,得出经调节后功能点数FP = UFC × TCF = 134.4 × 1.10 = 148。
4、软件行业人月成本估算方法
软件人员的人月成本是指软件企业一个月平均需要的所有成本开销(包括工资、奖金、福利、办公成本、国家各种税费、管理费用等等)及软件企业合理利润的总和,除以企业员工人数。依据国家相关规定综合各类因素可得出软件人员的人月成本约为 = (工资+福利+奖金+办公成本+资源储备+基础建设+税收利润)× (1+管理费率)= ( B + 0.20B + 0.476B + B/3 + 0.2B + 0.15B + B/3 ) × 1.2 = 3.23B。
本次软件开发造价评估中平均工资的取值以项目当地的工资水平为准,在这里人员基本工资B取值为6000元。
5、利用相关模型评估项目工作量和测算投资费用
为了便于计算,我们需要利用逆向法将功能点转化成一个等价的代码行数(SLOC),这一步可以使用如下的语言等价表来完成。本项目使用的是Java,故每功能点的SLOC数选用46。
语言 |
每功能点的SLOC |
C++ |
53 |
Dot Net |
53 |
Java 2 |
46 |
Delphi 5 |
18 |
Visual Basic 6 |
24 |
HTML 4 |
14 |
SQL default |
13 |
结合IBM模型,将代码行数及其它相关数据代入公式,就可以得出软件开发项目的投资规模、开发时间等评估数据。
征管子系统个人税收管理模块项目改造 |
|
代码行L |
148 × 46 = 6808行 = 6.8 KLOC(千代码行) |
工作量E |
5.2 × L0.91 = 5.2 × 6.8 0.91 = 30 人月 |
文档量DOC |
49 × L1.01 = 49 × 6.81.01 = 340页 |
系统建设费用D |
E × 3.23B = 30 × 3.23 × 6000 = 581400 = 58.14万 |
开发人员数量S |
0.54 × E0.6 = 0.54 × 300.6 = 4人 |