摘要:本文就武器装备软件开发的现状和中存在的问题,介绍了软件可靠性工程的发展及其研究的内容,对软件可靠性工程如何在软件开发中应用进行了重点说明,并提供了成功应用软件可靠性工程的典型案例,指出软件可靠性工程研究的必要性。
关键词:软件可靠性工程
随着科学技术的不断进步,计算机技术被越来越多地应用到武器系统中。计算机软件的复杂程度随着功能的增强,因而系统的可靠性也越来越与软件直接相关。例如AFTI/F-16飞机首航因软件问题推迟一年,事先设计的先进程序无法使用;海湾战争中F/A–18飞机飞行控制系统计算机500次故障中,软件故障次数超过硬件。软件可靠性成为我们关注的一个问题,本文仅就软件可靠性工程在软件开发过程中的应用谈谈自己的认识。
1、软件可靠性工程的基本概念及发展
1.1什么是软件可靠性工程
软件可靠性工程简单地说就是对基于软件产品的可靠性进行预测、建模、估计、度量及管理,软件可靠性工程贯穿于软件开发的整个过程。
1.2软件可靠性工程的发展历程
软件可靠性问题获得重视是二十世纪60年代末期,那时软件危机被广泛讨论,软件不可靠是造成软件危机的重要原因之一。1972年正式提出Jelinski—Moranda模型,标志着软件可靠性系统研究的开始。在70年代.软件可靠性的理论研究获得很大发展,一方面提出了数十种软件可靠性模型,另一方面是软件容错的研究。在80年代,软件可靠性从研究阶段逐渐迈向工程化。进入90年代后,软件可靠性逐渐成为软件开发考虑的主要因素之一,软件可靠性工程在软件工程领域逐渐取得相对独立的地位,成为一个生机勃勃的分支。
1.3软件可靠性工程研究的基本问题
软件可靠性工程的主要目标是保证和提高软件可靠性。为达到这一目标,首先要弄清软件为什么会出现故障或失效。只有这样,才有可能在软件开发过程中减少导致软件故障或失效的隐患,且一旦出现软件故障或失效,有可能采取有效措施加以清除。但是软件是开发出来的,满足可靠性要求的软件也是开发出来的,因此,软件可靠性工程的核心问题是如何开发可靠的软件。而有了软件,又该如何检验其是否满足可靠性要求?这是软件可靠性工程的又一个问题。
2、软件可靠性工程在软件开发中的应用
2.1项目开发计划及需求分析阶段
在项目开发计划阶段需根据产品具体要求作出软件项目开发计划,明确项目的目的、条件、运行环境、软件产品要求、人员分工和职责及进度,并估计产品的可靠性。需求分析阶段要根据项目开发计划阶段确定软件开发的主要任务、次要任务和其它任务,并设计软件程序的基本流程、软件结构、模块的定义和输入输出数据、接口和数据结构等同时应对项目开发计划阶段作出的可靠性预计进一步细化形成可靠性需求,建立具体的可靠性指标。这个阶段的可靠性工作一般应如下安排:
⑴确定功能概图
所谓功能概图就是产品的各种功能及其在不同环境条件下使用的概率。为确立功能概图必须定义产品的功能,功能定义不但包括要完成的任务,还包括影响处理的环境因素。
⑵对失效进行定义和分类
这里应从用户的角度来定义产品失效,将软件和硬件失效及操作程序上的失效区分开,并将其按严重程度进行分类。
⑶确定用户的可靠性要求
在这个阶段应由系统设计师、软件设计师、可靠性师、测试人员及用户方代表可靠性评估小组共同根据用户提出的系统可靠性来确定软件的可靠性。
⑷进行平衡关系研究
通常应考虑可靠性和功能之间的关系以及可靠性、开发费用和开发周期之间的关系。一般来说,增加功能会导致可靠性降低,可靠性提高的程度一般与测试加强程度相对应,这意味着时间和费用的增加。
⑸建立可靠性指标
在这个阶段应对每种失效分别建立可靠性指标。通常,首先建立系统可靠性指标,然后在硬件和软件间分配。影响建立可靠性指标的因素主要有:合同或有关标准中明确规定的可靠性指标,相似产品的可靠性指标,产品的质量保证,使用已有模块的可靠性,技术能力和局限(如容错技术的使用)等。
2.2软件设计和功能实现阶段
软件设计是对上一阶段定义的每一个功能模块逐步细化,确立系统体系结构,形成若干可编程的模块。说明硬件和软件模块之间的接口及它们与外部环境的接口,详细描述各模块的输入、处理过程及输出。功能实现是根据设计方案进行软件编程。该阶段主要应做:
⑴在模块间分配可靠性指标
定义系统体系结构时,应将系统分解成模块同时保证总体可靠性指标。进行系统分解是应考虑以下因素:系统的物理特性、以前收集的数据的特性及收集数据需要的工作量等。确定每个模块的可靠性要求时,首先进行可靠性分配,然后根据试分配值计算系统的可靠性。这样及时调整,使各模块开发周期、难度和风险大致相当,系统的开发费用也才能降至最低。
⑵按可靠性指标进行设计
目前,可靠性设计有以下几种方法:设计恢复策略、使用冗余软件单元、鉴别高风险区域。设计恢复策略是指软件只须重新启动即可消除失效的设计,设计恢复应能保存修复可能破坏的数据,应具备确定失效发生时间和阻止继续运行的机制,以减少程序数据的破坏。使用冗余软件单元时是采用与原软件单元不同的冗余软件单元来提高可靠性。鉴别高风险区域采用FMEA(失效类型与后果分析)和FTA(错误树分析)的方法来进行可靠性分析。
⑶根据功能概图集中资源配置
根据功能概图把人力、物力等资源用到用户认为最重要的地方。
⑷控制错误的引入和传播
错误是引起软件失效的根本原因,所以控制每个开发步骤中引入的错误数目及未被察觉的而传入下一步的错误数目,对于控制产品的可靠性是非常重要的。错误控制受多种因素影响,其中主要有:
a.构造模块化系统;
b.进行软件重用;
c.进行单元和集成测试,阻止错误向下一开发步骤传播;
d.进行检查和复核;
e.控制改动。
⑸度量现成软件的可靠性
如果在产品中使用现成的未在本产品中开发或测试过的软件,必须对其进行可靠性证明,证明其可靠性指标在可以接受的范围内方可采用。
2.3系统测试和现场试运行阶段
系统测试和现场运行以确认产品的软件要求是否得到满足,用户是否可以实际应用。系统测试阶段是开发过程阶段的最后阶段,如果措施得当,可以在产品首次使用前进一步提高可靠性。现场试运行阶段在用户环境中验证产品的各种说明及系统测试所得的可靠性指标。这个阶段的工作有以下工作:
⑴确定操作概图
操作概图是指实现系统功能的操作及其概率的集合,一个操作可以是特定环境下执行的一条命令,或同时附有限定范围内的参数或输入变量集。确定操作概图是测试计划的一个重要部分,一般在系统测试阶段之前由测试计划人员,在系统设计师和软件设计人员的协助下完成。
⑵进行可靠性增强测试
在系统测试阶段需进行可靠性增强测试。在可靠性增强测试中,系统测试员根据操作概图描述各种操作的现场发生概率,按比例的执行测试用例,通过模仿用户的应用方式可靠性增强测试,易于发现令用户最不满意的失效,能够反映出用户使用时的可靠性感受。
⑶根据测试进展并证明可靠性指标是否达到要求
在可靠性增强测试中,要收集失效数据,利用已有或自行设计并经验证的可靠性工具跟踪测试进展及规划必须的额外测试,根据进展情况在系统测试进行中可以对资源和进度安排随时做必要的调整。
⑷现场可靠性评估
系统测试阶段完成后,转入现场试运行阶段。在试运行中,从现场收集失效数据,利用此数据和软件工具评估现场可靠性,然后与系统测试结束后测得的可靠性相比较,同时对可靠性差异的产生原因进行分析。
2.4维护阶段
维护阶段是在产品用户使用过程中改正软件暴露出来的与失效有关的错误。在这个阶段监视产品现场运行的可靠性,并和预定指标及用户的满意程度进行对照比较,以便提高后继版本的可靠性,改进软件开发过程中的质量。此阶段主要做的工作是:
⑴用可靠性模型规划产品交付使用之后的人员需求,如:用户恢复失效操作的人员,承制方处理用户报告的失效的人员,承制方处理与用户报告的失效有关的错误的软件开发人员。
⑵监视现场可靠性是否达到预期指标,根据其间的差距采取相应的措施。同时还应跟踪用户是否满意,根据不满意的情况,进行必要的现场支持服务及产品改动。
⑶当加入新的功能时,通过监视可靠性,消除由此带来的失效强度增加。
⑷分析软件交付使用后的失效产生原因,指导工程的改进,降低引入类似错误的可能性。
3、软件可靠性工程成功应用的实例
美国AT&T公司的国际DEFINITYR程控交换机部在系统软件开发过程中应用了软件可靠性工程,相对于以前发行的主要软件版本,产品的质量提高是惊人的:
⑴用户反映的问题下降了10倍;
⑵项目维护费用下降了10倍;
⑶系统测试件的间隔缩短了2倍;
⑷引入新产品的间隔缩短了30%。
而且,在投入运行的前两年,从未发生严重影响业务的机器中断,客户满意程度大为提高。具体分析原因,有以下两点:
⑴把可靠性作为确定是否发行的标准,可避免用户在使用中反映过多问题和进行相应的维护工作。
⑵采用“操作概图驱动”的测试方法,提高了测试效率;20%的操作覆盖了95%的应用,20%的错误导致了95%的实效;先测试20%的使用最频繁的操作可以加速可靠性的提高。
4、结束语
软件的可靠性中正越来越引起软件研发部门的重视,但因为这是一门新兴的学科,对于提高软件质量,国内外还未能从软件可靠性工程的角度总结出一套行之有效的管理方法。
软件可靠性工程是一项涉及面很广的系统工程,应加强这项技术的研究力度。尤其要结合具体项目进行课题研究,使软件的开发过程同时也是软件可靠性工程的实施过程。使自发的可靠性工作成为有计划、有组织和有目标的研究工作。相信经过不断的探索和实践,软件可靠性工程会象硬件可靠性工程那样走向成熟,它的应用将对提高我国软件开发的可靠性起到积极的推动作用。
点此咨询学术顾问 快人一步得到答案