1. 引言
装备软件已经成为新型军事装备中的重要组成部分,软件维护在现代军事装备中的作用越来越重要。在软件寿命周期中,维护阶段是寿命周期中非常昂贵的阶段。有研究表明,软件维护成本占寿命周期费用的60%~80%,并且还有继续增加的趋势。据2007年的相关文献显示,美国每年用于软件维护的费用高达700亿美元。软件维护费成为现代武器系统寿命周期费用中的重要组成部分。科学预测软件维护所需的费用可以为决策部门进行采购定价、经费拨付等决策过程提供重要的理论支持。
舰船装备软件是指单独使用或嵌入、集成于舰船装备硬件中,与舰船装备硬件一起形成装备规定能力的各种计算机程序、数据及其相应文档的总称。本文针对舰船装备软件从定型交付至合同保质期满这一段时间内的维护工作,着眼舰船装备软件研制生产的特点,分析影响维护工作量的因素,并参考COCOMO的基本模型,利用装备软件维护工作的历史数据,探求维护成本的一般规律,建立舰船装备软件维护成本的估算模型。
2. 舰船装备软件维护分析
软件维护是指软件在交付使用后为纠正错误或改进性能与其它属性,或使软件产品适应改变了的环境而进行的修改活动。在实际工作中,软件维护是指从软件研发结束,软件产品交付使用到合同规定的质保期结束的这一时间段的工作(不包括新增需求和需求的重大变更)。软件维护不同于硬件维修。硬件维修经常包括替换损坏部件、纠正缺陷、加强设计以及润滑和清洗零部件等,这些一般都不会影响装备系统设计的功能。因此对于用户来说,不会有什么变化。而软件维护通常得重新设计软件以排除类似故障或缺陷,且必须通过系统测试确保不将其他错误或潜在故障引入系统。一般,在用户处系统的软件维护只进行简单的启动、复制和安装等工作,软件的修改必须由软件原承制单位或其他软件研发中心进行,要经过理解原软件、修改原软件并经过评审验收合格后,才能再交付使用。因此软件维护与软件研发工作是类似的。
根据国军标《军用软件维护》 [1] 的规定,软件维护一般可分为改正性维护、适应性维护和完善性维护三种类型。改正性维护主要是指诊断和改正在测试和验收过程中没有发现的软件设计或开发缺陷,它属于开发过程中产生的,应当由承制方承担,以促使承制方加强管理,提高技术,保障软件质量。因此,改正性维护不计算在维护成本范围内。适应性维护是为适应软件运行环境环境而作的修改软件,它是对用户个性的适应,应当由用户承担。完善性维护是根据最终用户的要求,改进或扩充软件,使之更加完善,因此应当由用户承担。因此,本文研究的舰船装备软件维护成本只包括适应性维护和完善性维护发生的费用,改正性维护不应该计算在内。
根据不同的用户要求,软件维护服务主要有以下三种方式:方式I,软件承制单位派出技术人员常住用户处,提供运行服务;方式II,按双方约定的系统服务质量要求与响应时间提供非常住人员服务;方式III,按用户要求,按次提供服务。由于目前舰船装备软件绝大多数采用维护方式II,以下详细讨论此种方式下维护成本估算问题。
舰船装备软件维护成本是指在软件交付到合同保质期结束这一时间段内,对软件进行适应性维护和完善性维护或其它服务性工作所耗费的资源(人力、物力和财力)的货币表现,主要包括软件的安装部署、用户培训、应用咨询、适应性维护、完善性维护和系统修复等活动。其成本主要包括:到用户处出差的差旅费;对用户进行培训的费用;对软件进行适应性维护和完善性维护所花费的人力成本;软件工程环境和软件测试环境的分摊成本以及其它成本。
3. 舰船装备软件维护成本估算指标体系
为了准确的估算舰船装备软件维护成本,分析和总结影响软件维护成本的相关因素,并建立维护成本估算的指标体系。
3.1. 影响因素分析
1) 软件原始规模
软件原始规模是软件产品内部属性之一,也是维护成本最重要的特征之一。一般的,原始规模越大,则软件的开发难度与维护难度会越大。软件规模度量通常用软件长度(如源代码行)、功能性指标(如功能点)体现。
2) 软件复杂度
软件可靠性与复杂性是密不可分的,当软件复杂性超过一定限度时,软件缺陷或错误便急剧上升,有研究表明维护工作量是软件复杂性的一个指数函数。在进行维护费估算时,软件复杂度是一个重要的影响因素。越复杂的软件,其维护难度就越大,相应的维护费也就越高。软件复杂度的含义较为广泛,包括①需求复杂度,用于衡量用户所提需求复杂性;②认知复杂度,用于测量理解软件的困难程度的度量指标;③结构复杂度,用于衡量软件结构复杂性的相关度量;④算法复杂度,反映为了求解问题所实现的算法的复杂度等等。
3) 维护规模
在进行维护成本估算时,维护规模是最具决定性的因素,直接影响软件维护成本的大小。维护规模越大,则维护活动所耗费的工作量也越大,相应地,维护成本也越高。维护规模的单位应该与软件原始规模的单位相同,即可以是源代码行或功能点。
利用代码行来测量维护规模是最简单直观的方法,可将维护规模度量定义为:维护代码行=插入代码行+更新代码行+删除代码行。除此以外,还可以用维护涉及到的模块数来作为维护规模的研究对象,将维护度量定义为:维护模块数=增加的模块+修改的模块+删除的模块。但是,这种简单的累加掩盖了不同软件维护工作之间的差异。比如将插入代码行数、更新代码行数和删除代码数直接累加,显然忽略了完成三种工作需要的工作量差异,一般来说增加和修改代码所需维护工作量要明显大于删除代码。
另外还可以采用维护功能点来度量维护度量,但功能点不能作为单一要素来解释维护工作量,应与软件复杂度等其它度量共同使用。
4) 软件质量
软件质量是软件产品中能满足规定需求的性质和特性的总体 [2] ,产品质量对软件维护阶段的工作量和费用产生至关重要的影响。功能性、可靠性、应用性、效率、维护和可移植性是软件质量的五个特性 [2] ,其中可维护性、可靠性是衡量软件质量的两个主要的、也是同维护成本密切相关的质量特性。每个特性包括多个可测量的子特性,如,功能性可以从适合性、准确性、互操作性、安全保密性、依从性等进行测度等等。
5) 软件维护生产率
最普遍使用的软件生产率度量被定义为产出的软件规模与投入的总工作量的比,即:软件生产率=产出的软件规模/投入的总工作量。类似的,维护生产率=维护规模/维护工作量,即在维护规模一定的情况下,维护生产率越高,维护成本越低,相反生产越低维护成本越高。
6) 软件团队、工具和方法
团队结构是决定团队生产率的关键因素之一。团队成员之间的沟通复杂性将会影响到软件生产率,最后也会间接对维护成本造成影响。一般来说,团队规模越大、人员层次越多、人员交流越广泛,团员之间沟通交流的复杂度越高,团队的生产率越低、工作质量越差。相反每个软件团队如果比较小,便能够有效的进行控制,工作单元可明确分配到软件团队,如果每个软件团队被分配的工作单元是高内聚的,则能使软件团队之间的沟通量最少(即团队之间为松散耦合的状态),此时团队的生产率较高。
人员经验和先进工具、技术的使用情况也是影响生产率的主要因素。另外,软件维护成本还在一定程度上取决于开发过程。开发过程质量的好坏会直接影响软件产品质量的好坏,从而在一定意义上可以左右维护的难度、工作量和维护生产率。除此以外,软件开发者的态度(即他们对增强软件可维护性的实践和过程的重视程度)与软件维护成本之间也存在着相关性。
3.2. 维护成本估算指标
维护成本受很多因素的影响,本文分6大类对维护成本的影响因素进行了总结。但是,估算软件维护成本时不加筛选的对所有因素均加以考虑显然是不可行的:从理论角度来讲,在维护成本的影响因素中,必然存在许多冗余因素,而冗余因素的存在会严重干扰后续建模和估算的精度;从实际角度来讲,特征越多,后续模型就越复杂,且可理解性也越低,模型的推广能力下降。因此,我们对影响因素进行了适当的筛选,建立维护成本指标集。
1) 从研究目的考虑,本文研究维护成本估算是站在用户的角度,为软件定价、采购经费预算服务的,因此,针对软件质量、生产率和软件团队工作与方法等三个软件维护成本的影响因素,我们都考虑采用社会平均水平,而不是软件承制单位的个别水平,因此软件质量、生产率和软件团队工作与方法等三个因素不进入软件维护成本估算的指标体系。
2) 从指标的可获取性考虑,选取软件类型作为表征软件复杂度的指标。软件复杂度是一个重要的影响维护成本的因素。越复杂的软件,其维护难度就越大,相应的维护费也就越高。但是软件复杂度度量比较广泛,就哪个指标能够综合度量软件复杂度学术界还没有共识。因此,综合考虑估算的可操作性以及准确性,我们选择软件类型作为软件复杂度的代表。软件类型包括组织型、嵌入型和中间型等三类,同类型的软件具有相似的复杂度,能综合反映需求复杂度、认知复杂度、结构复杂度等。
其中,组织型软件是指在组织型方式下开发的软件项目,即由规模较小的一组软件开发人员在非常熟悉的内部环境中开发完成的项目,大多数与项目相关的人员在机构内部研究同类系统方面都有丰富的经验,并且十分了解开发中的系统对本机构的目标会产生何种影响;嵌入型软件是指在嵌入型开发方式下开发的软件项目,嵌入型开发方式的主要特点是,产品必须在严格约束的条件下开发,必须嵌入在一个硬件、软件、规则和操作过程紧密结合的复合体中,软件系统与硬件设备有密切关系,通常具有相当的独特性;中间型软件是指项目特性介于嵌入型和组织型之间的一个中间阶段,或者嵌入型和组织型方式特性的混合体。
综上所述,本文选取软件原始规模、软件维护规模和软件类型作为舰船装备软件维护成本估算的指标。
4. 舰船装备软件维护成本估算方法
根据前文的阐述,舰船装备软件维护成本指标包括软件原始规模、软件维护规模和软件类型,以下参考COCOMOII模型,研究给出软件维护成本与软件原始规模、软件维护规模和软件类型的定量关系。
4.1. 基本估算模型
Barry W. Boehm教授1981年在其著作 [3] 《software Engineering Economics》中提出了用于软件开发成本估算的构造性成本模型(COCOMO, Constructive Cost Model),根据开发环境及项目规模等因素估算软件开发成本与维护成本。COCOMO81在80年代被称为最通用的参数成本估算模型之一,1995年COCOMOII发布,其具备处理非连续和快速开发过程模式、再工程化、重用、面向对象法等成本估算的能力。
根据COCOMOII模型 [4] ,软件维护的定义为:在不改变现有软件基本功能的前提下对其进行修改的过程。COCOMOII模型假定软件维护成本具有与软件开发成本相同的成本驱动因子属性。维护包括对原始产品小部分的重新设计和编码、接口的重新设计与开发,以及产品结构的细微修改。维护包括纠错性维护、适应性维护和完善性维护。
采用与软件开发成本估算 [4] 相同的模型
,其中PM是软件开发工作量,
是软件规模,A、B为模型参数。软件维护工作量模型为:
其中,
为软件维护工作量,
是软件维护规模,A、B为模型参数,A通常取值为2.94,而指数B反映了项目的规模经济性,通过衡量有前例W1、开发灵活性W2、体系结构和风险控制W3、项目组成员合作程度W4、过程成熟度W5等5个规模度因子采用
计算得到。
规模度因子的一般取值范围 [4] 见表1。针对舰船装备软件,分析有前例W1、开发灵活性W2、体系结构和风险控制W3、项目组成员合作程度W4和过程成熟度W5等五个规模度因子的等级。其中过程成熟度因子W5,由于目前我国对软件研制单位进行软件能力成熟度等级评估,承担舰船装备软件研制任务的软件研制单位的能力成熟度是可以得到保证的,因此组织型软件、中间型软件和嵌入型软件三类软件的过程成熟度均较高,即
。其他四个因子,针对三类软件的不同特点分别进行赋值,得舰船装备软件的5个规模度因子的取值见表2。根据
,针对组织型软件、中间型软件和嵌入型软件,计算得到指数B的取值分别为1.06、1.10和1.13。
因此,由COCOMOII模型,软件维护成本具有与软件开发成本相同的成本驱动因子属性,在给定软件开发规模
和维护规模
的情况下,维护成本
与开发成本
之间的关系为:
即维护成本
与开发成本
之间的关系为:
(1)
针对舰船装备软件,组织型软件、中间型软件和嵌入型软件的指数B的取值分别为1.06、1.10和1.13。
4.2. 维护成本系数取值
记
,则维护费的估算值
与软件开发费为
存在:
Table 1. Range of scale factors [4]
表1. 规模度因子取值范围 [4]
Table 2. Scale factors’ values for equipment software
表2. 不同类型舰船装备软件规模度因子取值
(2)
其中,P为维护成本系数,针对组织型软件、中间型软件和嵌入型软件,舰船装备软件B的取值分别为1.05、1.12和1.20。
因此,估算软件维护费的关键在于确定维护成本系数P的取值。
通过对24个单位(其中工厂、公司15家,研究所8家,院校1家)近五年鉴定定型且已使用的121种产品的软件技术状态变动情况进行统计,分析了纠错性维护、适应性维护和完善性维护的软件规模占鉴定定型时软件总规模的比例,且按照算术平均方法分析结果见表3。
从表3可知,组织型软件的完善性维护比例最高,原因在于组织型软件一般规模较大,采用高级语言编写出错率较小,平台一般向下兼容,因此适应性维护较少,但该类型软件直接与用户见面,需求易变动,所以完善性维护比例高。中间型软件的纠错性维护比例与完善性维护比例相当,中间型软件一般混合采用高级语言和汇编语言,与硬件交互密切,所以纠错性和完善性维护比例较高。嵌入型软件的适应性维护比例最高,嵌入型软件一般软件规模较小,且采用汇编语言编写,硬件代换频繁,所以适应性维护比例较高。
由于软件维护就是“软件再开发”,根据软件工程经济学 [3] 和实际软件开发数据推导出软件维护成本与软件开发成本的关系如下:
其中,
为软件的原始规模,
为软件维护规模,
为软件开发费,
为软件维护成本,B的取值针对组织型软件、中间型软件和嵌入型软件分别为1.06、1.10和1.13。
Table 3. Values of S i z e M S i z e D for different software type and maintenance type
表3. 不同软件类型和维护类型下维护规模占软件总规模的比例
Table 4. Value of software maintenance cost coefficient
表4. 不同类型舰船装备软件维护成本系数
舰船装备软件维护成本只考虑适应性维护和完善性维护,根据表3中的数据,我们分别计算组织型、中间型和嵌入型软件的维护规模占软件总规模的比例,得到:
组织型:
;
中间型:
;
嵌入型:
。
根据
,B针对组织型软件、中间型软件和嵌入型软件分别取值1.06、1.10和1.13。进一步计算不同类型的软件维护成本与开发成本的比例关系,如表4所示:
综上所述,针对普遍采用维护方式II,按双方约定的系统服务质量要求与响应时间提供非常住人员服务,用户不承担软件的纠错性维护成本,只考虑完善性维护和适应性维护,在软件交付使用至合同保质期结束这一段时间内的维护成本
的估算公式为:
。
其中,
为软件开发成本,维护成本的估算值为
,P为维护成本系数:组织型软件
,中间型
,嵌入型
。
5. 结束语
本文分析装备软件维护工作的影响因素,建立维护成本估算指标体系,在COCOMOII基本模型的基础上,利用收集到的数据建立了软件维护成本的估算模型。由于数据量有限,得出的不同类型舰船装备软件的维护成本系数不一定真实地反映了维护成本的一般规律,需要扩大数据来源,广泛收集舰船装备软件维护数据,统计分析出更一般性的结论;同时进一步将估算结果与实际发生成本做对比分析,对维护成本系数进行校准,逐步提高估算的准确度。
基金项目
国家社科基金资助项目(14GJ003-149)。
参考文献
NOTES
*通讯作者