航天软件可靠性浅议

王建斌,宋建光

(中国航天科工集团公司二院二部,北京)
摘要:从软件可靠性出发,结合航天软件研制和使用特点,对航天软件的故障模式、机理和提高可靠性措施进行了分析。
关键词:航天;软件;中国可靠性,FMEA,kekaoxing

1引言
随着航天科学技术的飞速发展,计算机的应用越来越广泛。与之相对应,软件的规模更大、层次更
复杂,从而使软件出现故障的概率也随之增大。然而,软件的失效引发的后果与硬件一样是不可忽视
的,甚至可能会造成灾难性的后果。尤其是在航天系统中,软件的可靠性更应该加以重视。
相对于硬件的可靠性,软件可靠性技术还很不成熟,这就突出了软件可靠性问题的重要性和迫切
性。譬如在硬件可靠性领域,故障树分析(S&-)、失效模式与效应分析(STU-)技术比较成熟,容错技术也有广泛应用,而在软件可靠性领域相应的技术似乎尚未定型。正是基于此原因,本文对航天领域的软件可靠性进行了一些初步探讨。

2软件可靠性分析
软件可靠性分析主要包括影响软件可靠性因素分析、软件失效机理分析和软件故障类别分析等。
2.1影响软件可靠性因素分析[5]
影响软件可靠性因素很多,包括技术的、社会的、经济的,甚至文化的。除了技术因素外,其它因
素均是由人的因素引起的,这是因为在软件生存期的各个阶段均有人的干预,而人的行为又受到各方
面因素的影响。这里我们只考虑技术因素的影响。(!)运行环境(剖面)
我们知道,软件故障是软件设计(固有的)缺陷在一定输入情况下被激活的结果。所以,如果在运
行环境中不包含激活软件缺陷的输入条件,其可靠性就恒为!;如果在运行环境中总包含激活软件缺
陷的输入条件,其可靠性就恒为”。
(1)软件规模
随着软件规模的增加,软件可靠性问题愈显突出。一般来说,航天项目作为系统工程,其规模都比
较大,相应地,软件规模和复杂度也很大,至少在5000条语句以上。软件工程实践的一个侧面可以
反映出这一点,即单元测试一般由编程者本人进行,而综合测试则需要独立的测试人员。软件可靠性增长模型也主要应用于综合测试阶段。
(2)软件内部结构
对航天软件而言,软件内部结构一般比较复杂,而且动态变化,对可靠性的影响因素也难以分析清
楚。但总的说来,结构越复杂,软件复杂度越高,内含缺陷数就越大,因而软件可靠度也就越低。
(3)软件可靠性设计技术
软件可靠性设计技术是指软件设计阶段中采用的用以保证和提高软件可靠性为主要目标的软件技
术。虽然目前对其定义的外延尚未有明确的界定,但一般来说,我们可以借助硬件产品的可靠性设计
技术,如失效模式与效应分析(FMECA)、故障树分析(FTA)等,进行软件可靠性设计。在软件设计中是否采用软件可靠性设计技术,或者采用什么样的可靠性设计技术,都对软件的可靠性具有很大影响。

2.2软件失效机理分析
软件失效机理可描述为:软件错误–软件缺陷–软件故障–软件失效。下面分别加以描述。
(4)软件错误(softwareerr)
一般来说,软件是由人开发出来的。在整个软件生存期的各个阶段,都贯穿着人的直接或间接的
干预。然而,人作为一种客观实体,在软件设计中难免会犯错误,从而必然会给软件留下各种不良的痕迹。软件错误是指在软件生存期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。
可见软件错误是一种人为过程,相对于软件本身,是一种外部错误。
(5)软件缺陷(kekaoxing.comsoftwaredefect)
软件缺陷是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。其结果是软件运
行于某一特定条件时,软件缺陷被激活。一般来说,软件缺陷是存在于软件内部的一种静态形式。
(6)软件故障(softwarefault)
软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态。此时如果没有适当措施
加以及时处理,便会产生软件失效。显然,软件故障是在软件运行过程中出现的,是一种动态行为。
(7)软件失效(softewarefailure)
软件失效是指软件运行时产生的一种不希望或不可接受的外部行为结果。软件运行中由于软件故
障引发的死机现象是一种常见的严重软件失效结果。
由此可见,软件错误是一种人为错误。一个软件错误必定产生一个或多个软件缺陷。当一个软件
缺陷被激活时,便产生一个软件故障。同一个软件缺陷在不同的条件下被激活,可能导致不同的软件
故障,软件故障如果没有及时的容错措施加以处理,便不可避免地导致软件失效。同一个软件故障在不
同条件下可能会导致不同的软件失效现象发生。
2.3软件错误分类
在软件生存期中存在和产生各种各样的软件错误、缺陷、故障和失效。对航天软件而言,不同的软
件,其错误、缺陷、故障和失效无论在表现形式、性质乃至数量上都可能大不相同。软件错误一般可分为
语法错误、语义错误、运行期错误、规范错误和性能错误。在这里,我们根据软件阶段划分将软件错
误归类为设计错误、编程错误、外界输入错误以及软件异常处理错误四大类。
(1)软件设计错误
软件设计错误主要是由于软件设计过程中对任务书和软件需求理解出现偏差和错误引起的,当然
也与设计者的软件设计水平有关。软件设计错误包括软件文档错误、模型和算法错误以及其它人为错
误。
(2)软件编程错误
软件编程错误主要是由于编程者的编程错误或
者对设计文档理解错误引起的,当然也与编程者的水平有关。软件编程错误包括程序语法错误、语义错误、软件实现逻辑错误,除此之外,还有软件源程序与设计文档不符引发的错误以及其它人为错误。
(3)软件外部输入错误
该错误出现在软件运行过程中。由于软件对外部输入条件都有相应的要求,如果输入数据不满足
条件,可能会引发数值范围越界、数组指针越界、被零除等错误。因此,在软件设计中一定要考虑对输
入数据的检验和越界保护。
(4)软件异常处理错误
由于软件异常处理的不完备,导致软件出现异常时不能及时得到处理而引起软件失效。据有关资
料统计,在发达国家研制的软件中,有60%以上是用来进行异常处理的。

3软件可靠性工程以及航天软件可靠性设计技术
3.1软件可靠性工程
软件可靠性工程是在软件工程基础上发展起来的。软件可靠性工程是指为了保证经济、及时地实
现软件可靠性目标而采取的系统化的技术和管理活动及方法。其技术内涵包括可靠性分析、设计、度量
和管理四个方面。在软件生存周期各阶段,为了保证达到较高的可靠性,需要在一般软件工程活动基
础上再增加或加强一些活动(包括分析、设计、度量和管理四个方面)。

3.2航天软件的可靠性设计技术
虽然在软件工程中已有许多比较成熟的设计技术,但它们并不以提高软件可靠性为主要目标。我
们认为,软件可靠性设计旨在遵循软件工程规范,在软件设计过程中采用一些专门技术将可靠性“设计”
到软件中,以满足软件可靠性要求。而软件可靠性设计技术则是指那些适用于软件设计阶段,以保证
和提高软件可靠性为主要目标的设计技术。

目前,可用于软件可靠性设计的技术有如下几种:
(1)软件在线自检和动态分析技术
软件在线自检和动态分析技术是指对正在执行的程序性能进行实时检查分析。软件动态分析可检
验程序的测试覆盖率和所有功能。
(2)软件容错技术
容错技术是软件设计中常用的方法之一。在软件设计中对于各种输入数据取值范围的越界检查和
保护、对不满足函数定义域的数据处理以及对各种异常的处理设计都可以提高软件的可靠性。
(3)软件失效模式、影响及危害性分析技术(FMECA)
软件FMECA是检查软件设计和代码在出现意外的异常输入或意外的异常环境条件时的特性的一
种分析技术,这可用于保证在整个软件研制周期内得到具有高可靠性的软件。
软件FMECA的目的是为了识别和修正软件中由于设计缺陷造成的系统故障。如果使用合理,该
分析方法可在任何等级提供软件错误信息,以保证在需求定义阶段避免软件故障、在测试阶段确定软
件错误类型和改正措施。当故障确定后,就可以利用容错、自检验技术或制定软件保护措施,以减少程
序执行时出现故障的概率。软件FMECA可利用许多技术,危险分析法和可行性研究是软件需求定义阶段所采用的’种技术,前者用于确定故障模式及其后果,后者用于决定如何消除这些故障模式。
(4)软件故障树分析技术(FTA)
FTA是一种自上而下的技术。它通常是将不希望发生的事件作为顶级事件,然后由熟悉系统及关
键事件的人员进行实施或者管理,以识别和消除引起这些不希望事件的状态。该分析最主要的用途是
把顶级关键事件转变为在分系统级必须防止的事件,然后利用FMECA确定有害事件的潜在原因。在
不可能完全消除的地方,通常是必须建立一种新的配置或者进行程序重新设计和完善,以保证这些有
害事件发生的概率低于一个可接受的门限。
(5)软件复杂性控制技术
在软件设计中,采用模块化、层次化设计等方法,均可以降低软件的复杂度,从而提高软件的可靠性。
(6)软件可靠性预计和估计技术
软件可靠性预计和估计是软件开发人员和用户检查所开发的软件是否满足所要求的常用工具。软
件可靠性预计通常是在开发阶段的早期(在不存在可执行代码前),利用从以前类似的软件中所获得的
数据进行;而软件可靠性估计则通常在测试和使用阶段进行。软件可靠性预计和估计一般可通过’种途径进行:一种是数学模型法,即利用以前已有的较为成熟的软件可靠性模型进行预计和估计;二是经验公式法,该方法是利用所开发的(航天)软件的一些基本特性、软件开发环境及应用类型来预计或估计软件
的可靠性。
(7)软件可靠性建模技术
软件可靠性建模技术包括软件可靠性模型、软件交付时间模型、软件可用度模型等,其中软件可靠
性模型最多,且用途最广。软件可靠性模型通常分为两大类:一类为分析模型,另一类为经验模型。

4提高航天软件可靠性的措施
提高航天软件可靠性的主要途径在于实现软件开发过程和生产过程的工程化,也就是众所周知的
软件工程,同时在航天软件研制过程中建立一种严格的软件质量控制和管理体系。通过编写软件可靠
性管理大纲、严格按照软件工程方法进行软件开发、提高软件开发和测试人员的培训和资金投入等,可
以有效提高航天软件的可靠性。具体措施可归纳为如下几个方面:

首先,要加强软件的质量和可靠性管理。软件可靠性管理旨在系统管理软件生存期各阶段的可靠
性活动,使之系统化、规范化、一体化,这样就可以避免许多人为错误,从而提高软件可靠性。
其次,通过经常性的培训,不断提高航天软件设计人员的能力和经验,同时也通过培训增强他们的
软件质量意识。
再次,严格按照软件工程进行软件开发。根据航天软件任务书要求,首先从项目开发计划做起,依
次进行项目开发可行性论证报告、软件需求分析、软件概要设计和详细设计一直到软件实现、单元测试、
集成测试和交付验收,严把每一阶段每一关,从而使软件研制过程有章可循。这样做不仅可以提高软件
质量,也能够加快软件的研制进度,这对航天软件的研制具有重大意义。
还有,就是增加软件可靠性测试方面的投入。研究表明,软件测试方法与资源投入对软件可靠性
有不可忽视的影响。根据有关资料提供的数据表明,在发达国家,对软件测试投入占总开发成本的
40%以上。

5结论
本文通过对航天软件可靠性分析,提出了几种天软件研制过程中质量控制和管理体系,以提高软
件的可靠性。这对提高我国航天软件可靠性具有一定的借鉴意义。

给TA打赏
共{{data.count}}人
人已打赏
可靠性技术可靠性设计

转:可靠性设计准则

2007-5-10 14:29:28

可靠性技术可靠性设计

转发两个教程,学习一下

2007-5-11 10:06:58

1 条回复 A文章作者 M管理员
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索