浅谈软件可靠性工程的应用(一)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈软件可靠性工程的应用(一)
摘要:本文就武器装备软件开发的现状和中存在的问题,介绍了软件可靠性工程的发展及其研究的内容,对软件可靠性工程如何在软件开发中应用进行了重点说明,并提供了成功应用软件可靠性工程的典型案例,指出软件可靠性工程研究的必要性。
关键词:软件可靠性工程随着科学技术的不断进步,计算机技术被越来越多地应用到武器系统中。计算机软件的复杂程度随着功能的增强,因而系统的可靠性也越来越与软件直接相关。例如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.控制改动。
⑸度量现成软件的可靠性
如果在产品中使用现成的未在本产品中开发或测试过的软件,必须对其进行可靠性证明,证明其可靠性指标在可以接受的范围内方可采用。