曹杨华 曹健 李虎/中国航空无线电电子研究所
随着软件和信息技术应用的飞速发展,我们正在进入一个“软件定义一切”的时代,全球软件行业处于成长期向成熟期转变的阶段,我国的软件行业正处于高速发展的水平[1]。装备软件作为信息化装备的灵魂,其比重不断增大,作用日益突出,软件研制的复杂度也越来越高,使得软件成本逐渐升高,软件复杂度和价格已经成为产品和系统研发的重要风险来源。
表1 规模估计方法优缺点比较
由于软件本身的复杂度,估算人员经验的缺乏和人为的错误、估算工具的缺乏等原因,软件项目的成本估算和实际情况相差甚远,因此,软件估算错误已经被列为软件项目失败的四大主要原因之一[1]。软件的规模是软件度量体系中重要的度量指标,它是决定软件成本的重要因素,业界提出了很多规模估计方法,常用的有专家法、代码行(Line of Code,LOC)、COCOMOII 模型、功能点分析(Function Point Analysis,FPA)等方法,这些方法各有优缺点,具体如表1所示。
功能点分析方法是一种以功能点(Function Point)为单位测量软件功能规模的度量方法,根据Daich和Kitchenharm提出的分类方法,功能点分析方法是一种分解类的规模度量方法,即把复杂系统分解成子系统进行评估的方法,它主要基于软件文件对功能性需求进行分析与度量,其结果以功能点的形式表示功能规模,功能点分析方法经过近40年的发展,以IFPUG 方法为主线,演化了NESMA、COSMIC和MarkII这三种主要方法和十几个分支方法[1]。功能点分析法已于2007 年被纳入ISO14143标准系统,目前符合ISO 标准的功能点方法共有5种,如表2所示。
装备软件计价依据的《某软件研制概算计价规范(试行)》中软件功能规模估算参考了NESMA标准。
表2 符合ISO标准的功能点方法
图1 NESMA方法六步骤
NESMA 方法借鉴IFPUG,主要分为6 个步骤[1],如图1所示。
根据使用阶段和收集到文档清晰度不同,NES‐MA 方法提供了三种类型的功能点估算方法,依次是:指示功能点计数、估算功能点计数、详细功能点计数,三类方法的计数比较如表3所示。
软件成本估算有两个基本的要求:一是估算要有一定的准确性,不够精确的估算只会给软件开发带来危机和灾难,二是估算方法要力求节省劳动力。由于指示功能点误差较大,详细功能点需要完善的文档材料,一般采用估算功能点计数,将用户功能需求分解到可以被估算的最小功能单元。
《某软件研制概算计价规范(试行)》中软件功能规模估算借鉴了NESMA中的估算功能点计数的类型,如表4所示,根据估算功能点计数的参数设置,原始功能点计数公式为:
UPF=N1×nILF+N2×nEIF+N3×nEI+N4×nEO+N5×nEQ
其中:nILF、nEIF、nEI、nEO、nEQ 分别为ILF、EIF、EI、EO、EQ的数量。
以规模为基础估算工时,需要考虑相关的一些调整因素。规模调整因子:
表3 NESMA三种类型功能点估计方法[1]
表4 NESMA功能需求名称及含义
VAF=1.3+0.1×(关键性F1+分布式处理F2+性能F3+计算机资源限制F4+复杂处理F5+可重用性F6+多环境F7)
其中:F 为0 或1 或2,规模调整因子取值范围为1.3~2.7。
调整后的功能点计算公式。
FP=UPF×VAF
工作量AE=FP×PDR
其中:PDR 为功能点消耗率,单位为人时每功能点。
某态势系统软件,具备态势显示和计划制定功能,由态势组件和计划组件两个模块组成。态势组件主要显示实时航迹信息、航线信息、空域信息、气象信息,可以开展手工态势标注;计划组件主要具备飞行计划的编辑、制定,航线的增加、修改、删除,航点信息的增加、修改、删除等功能。对此系统开展基于功能点模型,计算软件工作量;依据组织资产数据,估算软件工作量,统计实际工时系统数据,并对这三种方法开展比较。
1.收集现有文档:一般功能点计数根据经过正式评审的文件为依据,本项目根据软件研制任务书。
2.确定软件用户:软件用户为系统操作员、关联系统。
3.确定估算类型:估算功能点计数。
4.识别功能部件并确定复杂度,见表5:
表5 功能部件
原始功能点:UPF=386
调整因子:VAF=1.3+0.1×(关键性1+分布式处理2+性能2+计算机资源限制1+复杂处理0+可重用性1+多环境1)=2.1
根据《某软件研制概算计价规范(试行)》计算功能点数为:
FP=844.6842
工作量:
AE=FP×PDR=844.6842×7.12=6014.1518人时
5.与用户验证结果:与系统操作员确认功能点数。
6.与功能点分析专家验证估算结果:与估算专家讨论功能点识别,并验证结果。
此软件功能为新研产品,根据组织的项目经验数据,估算的代码行为64200 行,软件的开发效率为0.2小时/行。
在最后一层灰土压实后,进行垫层放线。为了进一步控制基础水平,在垫层模板支设过程中,技术人员要使用水准仪对模板四角进行标高测量,以保证工程质量。
组织项目总工作量=项目工程活动工作量+项目管理与支持工作量=项目工程活动工作量+0.22×项目工程活动工作量=(开发效率×新研代码行+开发效率×复用因子×复用代码行)×1.22=(0.2×64200+0.2×0.7×0)×1.22=15664.8人时
此软件功能已基本完成,根据工时系统数据统计,如表6所示。
综合费用采取基于软件功能规模和行业平均费用水平的估算方法,按照软件研发工作量乘以软件研发人月综合费率计算,人月按照176 人时等于1人月计算,根据中国电子技术标准化研究院等三家单位联合发布的2019年中国软件行业基准数据,上海软件开发人月费率2.85万元/人月。计算出的综合费用见表7。
可以看出,此软件采用功能点计数法估算的工作量和实际数据有一定的差别,三种方法估算的软件成本相当于用三种不同的标尺对软件的度量,采用功能点计数是从用户的角度对软件的功能进行度量,国外研究已有丰富的经验积累,方法相对科学,从内部逻辑文件、外部接口文件、输入、输出、查询等五个维度度量软件的价值,用户易于理解和认同,但在我国装备软件领域使用时,缺少相关经验值,标尺的刻度还需要适当调整。采用组织经验数据对工作量估算采用的是经验法,是组织数据的平均值,是不同类型软件的历史数据总结整理而来,具有一定的不准确性。工时数据的统计是站在开发者的角度衡量工作时间,不同开发人员的效率不一,不能直接体现软件本身的价值输出,在装备软件领域中,工时数据包含的内容较多,比如保密性、数据交换输入输出工时等人员的管理时间也包含在统计范围中。
表6 某态势系统软件工时统计
表7 基于功能点的成本与实际成本比较
软件计价有助于武器装备发展,软件在装备中占比不断提高,在某种程度上直接影响装备战斗力的形成和保持[3],高效研发高质量的软件对国防建设至关重要,《某软件研制概算计价规范(试行)》的出台对装备软件的优质发展带来好的时机,装备软件向高效、高质、高端人才引入迈进。
1.软件计价的核心是通过功能点数计算工时,依据现有规范试算,实际工时和功能点估算的工时偏差较大,倒逼提升开发效率,高效的团队会有更高的利润,从而在竞争中胜出。
2.软件计价有助于体现软件价值,价值的引领会促进研发的投入,从而加速智能化高质量装备的进化。
3.装备软件价值的体现能吸引高端软件人才流入武器装备软件行业。
基于功能点方法的软件计价在民用领域发展已有近四十多年,数据积累丰富,引入NESMA 方法到我国装备软件领域要考虑其特殊性:
1.在我国装备领域并没有经验数据积累,应注重基础数据的长期积累,根据实际情况逐步修正功能点计算因子,尤其在嵌入式航空电子领域,NES‐MA 方法估算的结果低于实际工作量,要通过功能点方法体现工作量,应进一步增加影响因子,提升因子权重。
2.建议增加成熟度研制等级的影响因子,如在装备领域GJB5000三级及以上单位的软件质量和可靠性相对较高,过程控制的工作量也比仅按照二级要求的多20%以上,应考虑将类似因子引入。
3.对嵌入式实时系统的影响权重应再提高,嵌入式实时系统应用模型时原始功能点的方法计算基数相对较少,需要通过提升调整因子来弥补方法的先天不足。
1.注重数据的积累,根据不同专业不同领域的软件特性分别统计,积累工时数据,为准确调整因子提供基础依据。
2.当前装备软件开发工程中,变更频繁已经是常态,变动带来的成本在功能点计数中很难体现。由于需求获取不准确而导致的工作量浪费将会直接体现在成本增加中,亟需提升系统及需求的获取准确性。
3.功能点估算主要依据软件文档对功能性需求进行分析与度量,一般根据正式评审的文件为依据。当前武器装备软件研制任务书的描述相对简单,并不利于识别计价,应特别关注前期方案及任务书等文档的质量,着重明确软件实现的功能。