功能点在软件造价评估中的应用∗
2018-08-28吴叶青
吴叶青
(海装驻武汉地区军事代表局 武汉 430070)
1 引言
任何一个软件项目预算、招投标、项目策划和监控、项目结算中的核心问题就是软件造价,但是如何核算软件造价,始终没有一个很好的解决方案。
甲方往往缺乏有效的方法来衡量软件项目开发和维护所需的工期和成本,最后只能听取软件开发团队和软件维护团队的“一面之辞”,因而使得甲方在项目预算、招投标、项目监督和合同验收等项目管理方面遇到许多“说不清”的情形。
对软件研发单位而言,软件产品价格与研发成本存在的较大偏差,可能导致软件研发单位无法合理估量软件研发和维护投入,使得软件研制进度策划不合理、软件研发和维护投入资源不足或过多,带来软件产品不能按期交付、软件功能萎缩、软件质量下降、软件交付后不能足够保障等诸多不良后果。
工业和信息化部《软件和信息技术服务业发展规划(2016年—2020年)》中明确提出,软件市场定价与软件价值不匹配的问题是我国软件和信息技术服务业发展依然面临迫切需要解决的突出问题。
2013年,工业和信息化部行业标准SJ/T 11463—2013《软件研发成本度量规范》正式发布。在《软件研发成本度量规范》中规定了从软件规模估量到软件成本度量的技术路线,其中软件规模度量推荐采用国际通行的几种功能点分析方法。其中NESMA方法、IFPUG方法是目前国内外最通用、最实用的功能点规模度量方法。
2 功能点分析方法
功能点是度量软件规模的一种单位。功能点分析是从用户角度来看的规模估计,是通过量化与主要外部数据输入、输出或文件类型等有关的功能性处理信息,来度量软件规模的方法[1]。
功能点分析方法是IBM的Albrecht在1979年提出的,这种方法可以用于“需求文档”、“设计文档”、“源代码”、“测试用例”度量,是一种与程序语言无关,能够有效衡量软件规模的方法[2]。功能点的估算基于对功能点分析的基础上。
功能点分析的基础是基于五个使用户受益的外部用户类型[3]:
1)外部输入:更新内部计算机文件的输入事务。
2)外部输出:输出数据给用户的事务。
3)内部逻辑文件:系统使用的固定文件,也可以指一起访问的一组数据,可能由一个或多个记录类型组成。
4)外部接口文件:允许输入和输出从其他计算机应用程序传出或传入。
5)外部查询:由提供信息的用户引发的事务,但不更新内部文件。用户输入信息来指示系统得到需要的详细信息。
功能点分析方法的核心思想是系统维护的信息及处理的复杂程度决定了系统价值。功能点方法的依据是,用软件执行功能的数量和复杂程度来衡量软件规模比用软件的源代码行的数量衡量要准确[4]。
功能点分析方法不依赖于项目开发的语言,度量出来的结果可以在不同的开发过程间进行比较,因而适用于确定软件开发项目或已安装软件的规模[5]。
功能点方法已成为软件规模度量的国内外标准(也是唯一纳入国际标准的软件规模度量方法),目前国际标准化组织ISO/IEC已发布的软件功能规模度量标准有五种:
1)ISO/IEC 19761(COSMIC-FFP方法);
2)ISO/IEC 20926(IFPUG方法);
3)ISO/IEC 20968(Mk II方法);
4)ISO/IEC 24570(NESMA方法);
5)ISO/IEC 29887(FiSMA方法)。
这五种功能点方法标准间有所差异,适用范围也有所不同。根据相关国际标准中的方法适用范围声明,COSMIC方法适用于商业应用系统和实时系统;IFPUG方法和FiSMA方法适用于所有类型软件的功能规模度量;Mk II方法适用于逻辑事务能被确定的任何软件类型;NESMA方法与IFPUG方法非常类似,通过对功能点计数分级,可根据估算的不同时期选择不同精度的方法进行估算。
这五种方法中,IFPUG方法、NESMA方法因其方法可操作性、适用范围等因素成为最主要的两种功能规模度量方法,在美国、巴西、印度、韩国、意大利、西班牙、德国、加拿大、日本、中国等国家的软件造价活动中广泛应用。
3 软件研发成本
在《软件研发成本度量规范》中,软件研发过程包括从立项开始到项目完成验收之间的需求分析、设计、编码、集成、测试、验收交付活动及相关的项目管理、支持活动。软件研发成本由软件研发过程中的所有直接成本和间接成本组成。直接成本由直接人力成本和直接非人力成本组成,间接成本包括间接人力成本和间接非人力成本[6]。
直接人力成本包括开发方的项目组成员工资、奖金、福利等人力资源费用。项目成员包括参与该项目研发过程的所有研发或支持人员。
直接非人力成本包括:办公费、差旅费、培训费、业务费、采购费等。
间接人力成本指开发方服务于研发管理整体需求的非项目组人员的工资、奖金、福利等人力资源费用分摊。
间接非人力成本指开发方不为研发某个特定项目而产生的,但服务于整体研发活动的非人力成本分摊。
软件研发成本估算基本流程步骤如下:
1)据项目特点和估算需求,选用合适的规模度量标准估算软件规模;
2)根据估算软件规模,利用基准数据或组织生产率数据估算工作量;
3)利用行业基准数据、组织基准数据或其他数据,估算工期、直接人力成本;
4)根据项目、组织相关情况估算间接人力成本、间接非人力成本、直接非人力成本;
5)确定软件研发成本。
软件研发成本估算基本流程见图1。
图1 软件研发成本估算基本流程
软件研发成本估算中软件规模的估算结果对整个软件研发成本有着决定性的影响,软件规模估算结果直接对工作量、工期估算结果产生影响,对间接非人力成本、间接人力成本估算数据均会产生影响。
4 功能点分析方法在软件造价评估中的应用
软件造价评估受到许多因素的影响,包括人的技术和环境的影响。在不同软件造价评估应用场景下,也需要使用适宜的功能点分析方法开展估算,提高在当前估算应用场景下功能规模、估算结果保持应有的估算准确率。
软件造价评估中,最广泛应用的功能点分析方法是IFPUG和NESMA功能点标准。
4.1 IFPUG功能点标准
IFPUG功能点标准将所度量的项目或应用区分为两大类型功能:对最终用户可见的事务功能(Transaction Function)和对最终用户不可见的数据功能(Data Function)[7]。
1)数据功能
数据功能有区分为两种:内部逻辑文件(Inter⁃nal Logic File,ILF)、外部接口文件(External Inter⁃face File,EIF)。
数据功能表示的是提供用户的、满足内部或外部数据存储需求的功能。内部逻辑文件指在软件或软件部件内部维护、用户可识别的、逻辑相关的数据组或控制信息组;保存由软件或软件部件的一个或多个基本过程维护的数据。外部接口文件是用户可识别的、逻辑相关的数据组或控制信息组;主要保存软件或软件部件的一个或多个基本过程引用的数据。
数据功能的功能规模由其复杂性决定,由其所包含的数据元素类型(DET)和记录元素类型(RET)的数目决定。数据元素类型是唯一的、用户可识别的、非重复属性。记录元素类型是在一个数据功能中用户可识别的数据元素类型子集。
数据功能的复杂性判定见表1。
表1 数据功能复杂性判定表
对内部逻辑文件和外部接口文件,其复杂性决定了其功能规模,不同复杂性转换的功能规模见表2。
表2 数据功能复杂性转换系数表
当一个软件或软件部件被度量其功能规模时,识别其数据功能,其中ILF中低复杂性、平均复杂性、高复杂性ILF数目分别为n1、n2、n3;EIF中低复杂性、平均复杂性、高复杂性EIF数目分别为m1、m2、m3。
数据功能的原始功能点规模为ILF、EIF的功能规模之和。
2)事务功能
事务功能可区分为三个类型:外部输入(Exter⁃nal Input,EI)、外部查询(External Input,EQ)、外部输出(External Output,EO)。
事务功能是对用户提供处理数据功能的基本过程,对数据功能的维护、提取、显示都通过事务功能进行。事务功能包括外部输入(EI)、外部输出(EO)和外部查询(EQ)。
外部输入指处理来自软件或软件部件外的数据或控制信息的基本过程,主要目的是维护一个或多个ILF或者改变应用行为;外部输出是发送数据或控制信息到软件或软件部件外部的基本过程,主要目的是将数据或控制信息经处理逻辑后发送给用户;外部查询是提取数据或控制信息并把信息呈现给用户的基本过程,该过程中不包含处理逻辑,不对ILF进行维护,不改变应用行为。
事务功能的功能规模由其复杂性决定。复杂性由其所包含的数据元素类型(DET)和引用文件类型(FTR)的数目决定。事务功能的数据元素类型与数据功能的定义相同,但其识别规则存在差异。引用文件类型指由事务功能读取或维护的数据功能。
事务功能的复杂性判定见表3、表4。
事务功能的功能规模复杂性转换关系见表5。
当一个软件或软件部件被度量其功能规模时,识别其事务功能,其中EI、EO、EQ的低复杂性、平均复杂性、高复杂性数目分别为a1、a2、a3;b1、b2、b3;c1、c2、c3。
表3 事务功能EI复杂性判定表
表4 事务功能EO、EQ复杂性判定表
表5 事务功能复杂性转换系数表
事务功能的原始功能点规模为EI、EO、EQ的功能规模之和。
软件的原始功能点规模为ILF、EIF、EI、EO、EQ的功能规模之和。
整个软件开发过程的环境因素对原始功能规模存在影响,IFPUG标准附录中给出了14种环境因素的详细定义及选择这些环境因素权值的指导原则。这14种环境因素及其调整因子[8]可见表6。
表6 环境因素及其调整因子
4.2 NESMA功能点标准
NESMA功能点标准2005年正式将其标准升为国际标准,随后在美国、巴西、印度、韩国、意大利、西班牙、德国、加拿大、日本等国应用。
NESMA功能点标准中将所度量的项目或应用区分为两大类型功能。数据功能与IFPUG功能点标准的一样分为内部逻辑文件(ILF)、外部接口文件(EIF);事务功能包括外部输入(EI)、外部输出(EO)和外部查询(EQ)。
NESMA功能点标准集成并发展IFPUG功能点标准所提出的功能点分析方法,较大程度借鉴IF⁃PUG功能点标准,其度量过程与有关术语几乎完全一致。NESMA功能点标准与IFPUG功能点标准存在的些许差异主要表现外部查询与外部输出的识别差异、外部查询的复杂度确定、隐含查询处理和代码表处理等方面[10]。
NESMA功能点标准中包含三种类型的功能点分析方法。这三种功能点分析方法为指示功能点分析方法、简略功能点分析方法、详细功能点分析方法。这三种类型功能点分析方法间的差异主要是根据数据模型的详细程度确定其功能规模计数分级存在差异[11]。
1)指示功能点分析方法
指示功能点分析方法基于概念数据模型或规范化数据模型来确定软件规模大小。指示功能点分析方法在进行功能规模度量时,只需要识别被度量软件或软件部件的内部逻辑文件和外部接口文件。指示功能点法解决了在项目早期模糊需求下进行功能规模估算的问题。
当度量概念数据模型或同等详细水平的模型时,识别ILF数目为n,EIF数目为m,则其功能规模为
当度量满足第三范式数据模型或同等详细水平的模型时,识别ILF数目为n,EIF数目为m,则其功能规模为
2)简略功能点分析方法
简略功能点分析方法应用于可识别事务功能的数据模型。在进行功能规模度量时,需识别内部逻辑文件、外部接口文件、外部输入、外部输出、外部查询。
假设识别事务功能和数据功能的数据为:ILF为n,EIF为m,EI为a,EO为b、EQ为c。则其功能规模为
原始功能规模=10n+7m+4a+5b+4c
3)详细功能点分析方法
详细功能点分析方法应用于具备详细数据模型,且事务功能使用数据模型的内在逻辑明确的场景。详细功能点分析方法中对事务功能、数据功能的复杂性判定与IFPUG功能点标准的一致。
在得到软件的原始功能规模后,NESMA功能标准和IFPUG标准一样,需根据软件实际情况,确定14种环境因素调整因子取值,并估算得到调整后功能规模。
4.3 不同应用场景下的功能点分析方法应用
软件造价评估应用场景可分为预算、项目研发策划估算、项目结算三种。
1)初步预算应用场景
在初步预算应用场景中,功能规模估算包括招标方进行的成本估算、评标基准价设定、投标方进行的成本估算和项目报价、评标及合同签订等类似应用场景。在该应用场景中,应已确定详细软件工作说明书,工作说明书应能满足已选定的规模估算方法所需的功能点计数要求。
在招标、评标基准价设定场景中,计算软件研发成本时,应使用权威机构发布的行业基准数据和人力成本基准费率等相关信息。在投标方的成本估算和项目报价场景中,除了使用行业基准数据、人力成本基准费率信息,还应考虑投标方的组织基准数据、人力成本基准费率信息。在评标及合同签订应用场景中,招标方依据综合评标法,检查投标方的功能规模估算成本,评定报价合理性,选择最终投标方。
在初步预算应用场景中,往往因项目需求尚还较为粗略,适用NESMA标准中的指示功能点分析方法或简略功能点分析方法对功能规模进行估算。
2)项目研发策划估算应用场景
项目研发策划估算应用场景主要包括软件研发方为制定或维护项目详细开发计划而开展的成本估算活动。其中包括因项目范围发生变更引起的项目计划的变更维护。在该应用场景中,应已具备已确认的软件工作说明书,且软件工作说明书应满足已选定的规模估算方法所需的功能点计数要求。
在进行项目研发策划估算时,应使用组织的基准数据和人力成本基准费率信息,并参考使用权威机构发布的行业基准数据和人力成本基准费率信息;除估算研发成本外,还应估算研发工作量、研发工期;综合考虑资源投入和项目活动、进度要求,以保证项目活动、计划与资源相协调。
在项目研发策划估算应用场景中,软件研发方已进一步细化软件工作说明书,软件实现方案已获得软件客户确认,适宜使用NESMA标准中的简略功能点分析方法对功能规模进行估算。
3)项目结算应用场景中,
项目结算应用场景多发生在软件项目后期或软件项目已经结束,主要包括为编制结算/决算而进行的成本测量、为绩效评价和过程改进等后评价活动而进行的成本数据的测量和分析。
当在项目结算/决算成本数据测量应用场景中,软件客户对项目完成情况进行成本核算,根据最终软件功能度量软件实际功能规模,根据组织的基准数据和人力成本基准费率相关信息,以及项目的组织他项实际费用,核算软件实际成本;将项目测量的规模、成本、工期与预算进行对比,以掌握和评价项目预算的执行情况。
当处在绩效评价和过程改进等后评价活动[12]的成本数据测量场景中,软件研发方对最终软件功能度量功能规模,并列出软件功能的功能点清单;同时对项目成本、工期测量数据域项目计划进行对比,以掌握项目计划执行情况,考核项目实施效果。
在该应用场景中,软件设计已实现,适宜使用IFPUG标准、NESMA标准中详细功能点分析方法对软件的实际功能规模进行度量。
在项目结算应用场景中,对项目的规模、成本、工期、生产率等有效测量数据应纳入到组织或行业的基准数据库,为以后类似项目成本估算、项目策划提供参考数据;通过将这些测量数据与组织或行业的基准数据进行对比分析,发现组织软件过程改进机会。
5 结语
功能点分析方法可应用于软件项目的不同阶段或应用场景中。在软件项目的早期,使用NES⁃MA标准的指示功能点或简略功能点方法对软件功能规模进行估算,作为软件成本预算依据;在获得详细软件需求后,可进一步完善功能规模度量相关细节,得到更为准确的软件规模估算数据,开展项目策划工作;在软件项目审查、结算、过程绩效评价时,根据软件需求、设计、或代码等相关资料,使用IFPUG标准或NESMA标准中详细功能点分析方法,对软件的实际功能规模进行度量,丰富组织或行业基准数据库数据,评价项目软件过程执行和改进情况。