(瓦锡兰玉柴发动机有限公司519175)
摘要:随着现代化科学技术的不断发展,计算机技术的更新速度也随之提升,同时其也被广泛应用于人们的日常生活中,因而在此基础上为保障计算机技术应用的可靠性,要求软件设计人员应结合软件运行的特殊环境将可靠性设计技术应用于其中,继而以此来保障软件的高效运行,达到最佳的网络运行状态。软件可靠性工程是以保证和提高软件可靠性为目标,采用系统化的技术,通过工程化方法加以实施并对其过程进行工程化管理的过程技术。本文主要讨论了实施软件可靠性设计的必要性、软件可靠性设计和分析的主要技术,以及软件可靠性设计和分析技术在机电管理系统软件中的具体应用。
关键词:机电管理系统;软件;可靠性
1引言
现在,科学技术在不断地发展,计算机技术的更新换代也越来越快,计算机技术在人们的生活和生产中得到了广泛地应用,尤其是在军事、航空海天领域的应用,要求软件具有高度的可靠性,软件的可靠性指的是软件在特殊环境下也能够正常的运行。软件可靠性工程是软件工程研究与实践和可靠性工程发展的必然结果,已经成为软件业界和可靠性工程界关注的焦点、研究的热点和实践的重点。我国的软件可靠性工作起步较晚,与国际先进水平相比,存在着较大差距。据统计,在我国航空系统中,软硬件的故障率比例达到了3∶1,有的甚至达到了4∶1,因此,如何提高软件的可靠性是摆在我们面前急需解决的一个问题。
2软件可靠性设计的必要性
从软件的重要性和传统软件设计的弊病这两个方面来阐述软件可靠性设计的必要性。
1)软件的重要性
表1列出了美国第2~4代飞机航电系统功能实现软、硬件所占比例,从中我们可以清楚地看到软件在装备中扮演着越来越重要的地位。
2)传统软件设计的弊病
在传统的软件设计中,缺乏整体的设计思想,只是采用功能化的软件设计,随着系统功能及要求的增加不断修改软件的功能。在软件的调试和程序修改时也是点对点式的,同样缺乏整体宏观的规划,程序的修改常常是牵一发而动全身,从而造成意想不到的后果。从软件的重要性和传统软件设计的弊病可以看出,传统的软件设计方法已经不能满足现代软件工程发展的需要,因为软件失效而导致的灾难性后果也时有发生。
3软件可靠性
3.1可靠性的定义及软件引起系统失效的原因
GJB/Z102-97《软件可靠性和安全性设计准则》中对软件的可靠性有着明确的定义:软件可靠性是指在规定的条件下和规定的时间内,软件不引起系统故障的能力。软件可靠性不但与软件存在的差错有关,而且与系统输入和系统使用有关。软件引起系统失效的可能原因包括:1)软件开发过程中开发人员产生的失误(mis-take),包括对用户需求的错误理解或认识不够、知识欠缺;设计不完整、不正确;编码的错误或更改中犯新的错误;2)软件产品中存在隐错与缺陷(bug&defect);3)软件运行过程中隐错或缺陷被激活导致故障(fault);4)用户运行阶段经历的失效(failure)。
3.2软件可靠性技术
常用的软件可靠性技术有软件可靠性设计技术和可靠性分析技术。
3.2.1软件可靠性设计技术
软件可靠性设计技术是指在软件设计阶段中采用的用以保证和提高软件可靠性为主要目标的技术,主要包括避错设计、查错设计和容错设计。
1)避错设计
体现了预防为主的设计思想,是软件可靠性设计的主要方法,其原则就是简单即可靠。它的基本方法就是在软件开发过程中进行模块化设计,尽量减少和控制程序的复杂性,满足GJB/Z102-97《软件可靠性和安全性设计准则》中的相关要求;
2)查错设计
是指在设计中赋予程序某系特殊功能,使程序在运行中自动查找存在错误的一种设计方法,包括被动式错误检测和主动式错误检测;
3)容错设计
是指在设计中赋予程序某些特殊功能,使错误在已被触发的情况下,系统仍然具有正常运行能力的一种方法,包括静态冗余(N版本程序设计法)和动态冗余(恢复块法)。
3.2.2软件可靠性分析技术
软件可靠性分析技术对提高软件的可靠性有特别重要的作用。在软件设计时,可以利用可靠性分析技术来分析预测软件最可能出现的错误,从而用来指导软件的设计,并为软件的维护提供必要的依据。常用的软件可靠性分析技术有:软件可靠性模型和软件故障树分析(SFTA)。
1)软件可靠性模型建立的目的在于定量估计或预测软件的可靠性行为。现有的软件可靠性模型大致可分为失效间隔时间模型、缺陷技术模型、故障播种模型和数据模型。
2)故障树分析方法是硬件可靠性和安全性分析的重要技术工具,在上世纪被移植到软件领域,成为软件安全性分析的重要手段。故障树分析是一种系统化、形式化的分析方法,旨在以演绎的方法找出导致系统故障的各种可能的基本原因,进而找到系统的薄弱环节,改善系统设计。在软件的开发早期,可用故障树分析方法来确定软件的安全要求。在进入设计后期或编码完成后,可以对故障树加以扩充,继续进行更深入的分析,该分析最重要的一个用途就是将顶级关键事件转变为分系统必须防止的事件,并在设计时消除这些事件。
4机电管理系统软件可靠性设计
4.1机电管理系统
4.1.1机电管理系统功能
某型机的机电管理系统是通过GJB289A总线与航空电子系统交联,通过离散量、模拟量、RS-422A串行通讯接口与机上电源、液压和燃油等机电系统交联。机电管理系统监控直升机上电源、液压、燃油等十多个机电系统的工作状态,把采集的信号处理后,经总线传送至航电系统进行告警、显示或记录;发送燃油油量、发动机及电源等关键参数给机电参数显示器显示;同时将采集的数据传输给飞行参数记录系统进行记录。
4.1.2机电管理
计算机软件架构机电管理计算机软件根据机电系统的监控需求及航电设计要求开发的,是一个多任务实时软件,它的模块按功能划分,而任务等级(优先级)则按事件的重要程度来定义。软件组成如图1所示,分为十个模块,在十个模块中定义了十二个任务,模块划分及功能描述如下:1)入口模块:初始化变量、故障状态及故障标志,并创建模式控制任务,此模块只在软件开始运行时执行一次;2)模式控制模块:软件的主控模块,是优先级最高的周期任务,创建其它的周期和非周期任务并响应航电模式命令及状态请求命令;3)机电系统周期监测模块:是一个周期任务,监控机电系统的故障状态,完成十多个机电系统的故障诊断功能;4)航电命令处理模块:是一个周期任务,采集机电系统数据,给航电分发数据,完成模式控制模块中有关状态的响应过程;5)串口通讯模块:包括多个不同的周期任务,实现机电管理计算机与机电系统的十多路串行接口通讯;6)维护模块:是一个非周期任务,完成维护信息的记录、查看和清除以及指定的机电系统或机电管理计算机自身的维护自检测;7)启动检测模块:是一个非周期任务,根据航电命令完成机电管理计算机的启动检测;8)硬件自检模块:是一个优先级最低的非周期任务,在系统空闲时执行机电管理计算机硬件自检测任务;9)例外模块:将系统运行过程中出现的异常信息(包括异常的过程号、中断号及中断次数的累加值)记录在非易失存储器中;10)公用模块:各个功能函数的集合,主要完成机电系统故障信息的处理及RS422通讯数据包的解算处理。
4.2机电管理系统软件可靠性设计
4.2.1避错设计
1)减少和控制程序的复杂性
慎用嵌套的if语句,避免程序冗长导致可读性降低;减少嵌套语句的使用,降低软件单元的圈复杂度;控制各程序单元的源代码行数,一个软件单元实现一个单一功能;各模块在逻辑上构成分层次的结构,高层模块调用低层模块,不可反向调用,符合扇出一般控制在7以下的要求。
3)模块化设计运用
模块化设计方法将机电管理计算机软件分解为十个功能单位,各个功能单位又被设计成多个功能相对独立的小模块,通过调用与被调用的关系,将所有大大小小的模块连接起来。将程序分解成若干模块,相当于把一个复杂的问题分为若干易于处理的子问题,能降低程序的复杂性,提高程序的可读性。在模块划分恰当时,可有效地减少开发工作量,这是因为单个模块更易于理解,可以分别地编程、调试、查错和修改。运用模块化技术,可以将错误局限在各个模块内部,避免错误蔓延,从而提高整个软件的可靠性。
4)余量设计
软件设计还进行了余量设计,军用软件一般要求留有不少于20%的余量。在资源分配、处理时间、工作时序等方面考虑余量设计,使用高性能的486DX2CPU提高了系统处理能力,指令执行速度比以前使用的486DXCPU快一倍。按CPU的指令执行速度为1667万/s,一个端口操作相当于执行100条C语句,一条C语句平均约为7至8条指令,机电管理计算机软件代码为25000条估算,正常情况下,系统有80%左右的时间余量,完全符合军用软件设计要求。4)采用成熟技术运用模块化技术,还可以利用以前己经被证明是可靠的模块,这不但减少了开发的工作量,也提高了软件的可靠性。GJB/Z102-97写到:“鼓励采用经过实践考验、可靠且适用的现有软件,但必须仔细分析其适用性,并对所有不适用之处作妥善处理”。机电管理计算机软件的公用模块中除了新增的串口通讯数据包的解算处理功能之外,其余均采用NAMP软件成熟的模块,完成机电系统PFL、MFL故障信息处理、记录等功能。
4.2.2查错设计
在软件设计过程中,正确地采用各种避错设计方法,可以大幅度降低设计中引入的错误,得到较为纯净的产品。然而,面对日益庞大、复杂的各类软件系统,不论构思和设计是何等精心,软件产品中仍然难免存在错误。这种情况促使软件工程界去探索,寻找使软件产品具有自动查错、改错的设计方法。错误检测在很大程度上取决于软件的用途、功能、结构及算法,没有通用的模式可供遵循。主要考虑了如下几个方面:1)软件设计必须考虑在系统加电时完成系统级的检测,验证系统是安全的并在正常地起作用;在可能时软件对系统进行周期性检测,以监视系统的安全状态。机电管理计算机软件实现了在机电管理计算机加电时完成整机的检测功能,验证机电管理计算机是安全的并在正常地工作。机电管理计算机正常运行之后,软件的硬件自检模块———一个低优先级的非周期任务被启动,它可自动检测并记录机电管理计算机自身的故障,以监视硬件是否处于安全状态。若故障被检测出,则机电管理计算机自动重启,试图恢复故障;若重启6次后故障仍然存在,则等待航电命令并向其报告自身的故障状态。
2)采用看门狗技术,当出现潜在不安全的系统状态或有可能转移到这种状态时,将系统转移到规定的安全状态。
机电管理计算机软件是嵌入式实时运行的,任务调度频繁,为防止任务超时,不能正常完成相关功能,采用了看门狗定时器技术,在软件所有模块中一定时间范围内周期性进行“喂狗”操作,目的是检测软件是否运行正常,有没有跑飞。若“狗叫”,即程序跑飞了,则机电管理计算机自动复位以试图恢复故障。
3)硬件设计
应按规定要求将干扰控制在规定的水平之下,软件设计要使得在出现这种干扰时,系统仍能正常运转。机电管理计算机有十多路RS422通讯接口,接收的数据易受硬件模块、电气线路等环境干扰,为保证向航电、飞参等分发的数据的正确性,机电管理计算机软件利用串口通讯数据包解算函数处理串口接收到的原始数据,剔除不正确的数据,解析成符合通讯协议的可供其余功能模块使用的数据包。
4.2.3容错设计
软件容错的基本思想来源于硬件可靠性中的冗余技术。在系统运行中设备由于硬件或软件原因出现故障是时有发生的事。采用有效的防错容错机制对一个需要稳定运行的系统是必需的。一般来说可以采用冗余备份、故障恢复、设备告警等手段来防范错误。重组机制是其中一种故障保护机制,它需要对容易出错的硬件设备进行冗余备份。当其中一个设备或模块由于某种原因不能正常工作时,另一个设备或模块马上代替这个设备或模块完成相同的功能。软件容错设计是一种有效的可靠性设计技术,应有选择的用于失效后果非常严重的场合。机电管理计算机不正常工作不会影响直升机的安全,只会影响其任务完成情况,因此机电管理计算机软件定为C级软件,GJB/Z102-97明确表示C级软件可不考虑失效容限,无需进行软件冗余设计。但是可进行信息冗余设计,在进行机电系统故障诊断时,为降低故障误报率,机电管理计算机在判断故障时,若连续三个周期检测到故障,才判为故障。
4.3机电管理系统软件可靠性分析
机电管理系统软件暂时没有采用软件可靠性建模的方法对其进行定量的分析,只是采用了故障树的方法对其可靠性进行了定性的分析。机电管理系统中,需要进行多个设备之间的串口通讯,通讯数据量大,实时性要求高,且发动机参数、燃油油量及电源参数等关键信息都是通过串口传递的,因此要求串口通讯任务具有很高的可靠性。在此结合串口通讯任务,对其进行软件故障树分析。首先,选取“串口通讯任务错误”这个影响比较大的故障模式作为顶事件。接下来是定义底事件。定义底事件需要明确软件故障树分析应深入到哪个层次,于是就要定义最小模块单元,认为最小模块单元不可分,其失效即为底事件。由于语法出错等静态错误基本上可以在程序编码和编译过程中排除,因此重点讨论可能的动态错误(即运行时的错误)。从静态的观点看,程序=数据结构+算法;与之对应的,从运行的角度看,软件=数据+过程。另外,软件的运行必须基于特定的环境,运行环境对软件的正确运行也具有重要影响。按这种观点,串口通讯任务软件失效的主要原因可分为三大类:数据错(主要有输入错、缓存区错和变量错等)、处理错(主要有流程错、时序错等)和运行环境错(主要有资源错和环境干扰错等)。图2是机电管理计算机软件串口通讯任务的故障树分析结果。
从图2的软件故障树图中,可以很清楚的查找出引起软件串口通讯时出现故障的原因,并且易于分析顶事件发生的充分和必要条件,找出对顶事件影响最大、最灵敏的基本事件。在机电管理计算机软件串口通讯任务分析中可以看出,在软件实际运行中,由于运行环境错误引起串口通讯任务故障的几率很小,故不考虑其影响,因此数据错和处理错成为引起串口通讯任务失效的关键环节。考虑对数据传输和处理程序进行可靠性设计,在编程中采用数据包解析、信息冗余等技术可有效地排除错误,提高可靠性。
5结论
随着现代化科学技术的不断发展,计算机技术的更新速度也随之提升,同时其也被广泛应用于人们的日常生活中,因而在此基础上为保障计算机技术应用的可靠性,要求软件设计人员应结合软件运行的特殊环境将可靠性设计技术应用于其中,继而以此来保障软件的高效运行,达到最佳的网络运行状态。随着机电管理系统的发展,对机电管理系统软件也提出了更高的要求:除了应完成相应功能外,还应具有更高的可靠性、更易于修改和调试并具有较好的避错、排错和容错能力。本文在此背景下,以软件可靠性理论与技术为指导,以保证软件的高可靠性为研究目的,阐述了机电管理系统软件的可靠性设计与可靠性定性的分析工作。在今后的工作中,应对如何建立机电管理系统软件的可靠性模型,如何对机电管理系统软件可靠性进行定量的分析做进一步深入研究,为设计出具有更高可靠性的机电管理系统软件打下良好基础。
参考文献:
[1]陈志元,任欣,闵蓓尔.自动测试软件可靠性量化评估技术研究[J].电子测试.2008(06)
[2]郑明辉.基于风险等效的软件可靠性评估准则研究[J].西北民族大学学报(自然科学版).2004(01)
[3]段星辉,华建文,代作晓,金小强.一种提高星载软件可靠性的开发方法[J].计算机工程.2009(12)