浅谈提升军用 软件可靠性的方法手段

(整期优先)网络出版时间:2020-08-04
/ 2

浅谈提升军用 软件可靠性的方法手段

师维 高强

海军装备部 陕西省西安市 710054

摘要:软件是高技术装备的大脑,软件可靠性是制约整个系统可靠性的瓶颈。影响软件可靠性的因素是多方面的,在软件研制过程中采取必要的技术手段,对提高软件可靠性具有非常重要的意义,主要有:软件的模块化设计、容错设计、控制软件多余物等。

关键词:软件;可靠性;技术

软件是高技术装备的大脑,其可靠性已经成为整个系统可靠性的瓶颈,如何提高软件可靠性是摆在装备工作者面前的紧迫而严肃的课题。软件可靠性工作涉及的范围很广,如软件需求分析、配置管理、可靠性试验、可靠性增长等。与硬件不同,软件没有再生产过程,其可靠性完全取决于设计[1],因此,在软件设计过程中采取必要的技术措施是提高软件可靠性的有效手段。

一、选用成熟、高效的编程语言

选择成熟、高效的编程语言是软件设计的第一步。当前流行的计算机编程语言很多,在选择编程语言时,要从标准化、软件主要功能和用途、计算机硬件资源及其占用情况、软件的编制和运行环境及效率等方面综合考虑,除了个别小型软件和有特殊要求的软件可根据硬件需求采用相应的汇编语言外,一般应采用统一版本的高级语言编程,通常推荐采用语法严谨、逻辑性强、效率高的Ada[2]语言(该语言是北约国家广泛采用的编程语言),也可以采用C或C++语言。为提高软件的可移植性和程序的正确性,编程时应尽量使用语言的标准部分,尽量避免使用引入的非标准语句。

二、软件结构模块化

软件设计要坚持标准化、通用化、模块化的基本准则,对软件的功能结构进行合理划分,软件功能实现尽量采用顺序控制结构、条件控制结构、循环控制结构、分情况控制结构和并行控制结构五种基本结构,尽量避免复杂结构、复杂逻辑和复杂函数的使用,以最简单、最通俗易懂的方式实现软件功能需求。提高内聚度、降低耦合度保证各功能模块独立性。应控制每个程序模块的规模,每个模块的可执行语句一般控制在60行左右,最多不超过200行。

三、留有设计余量

软件设计必须考虑功能扩展、功能备份、控制时序和处理时间问题,留有充足的余量。主要包括三个方面的内容:

1、资源分配余量:对每个软件模块都要确定存储量、输入输出通道(I/O通道)及处理时间,整个计算机系统的存储量、输入输出通道以及处理时间至少预留20%的余量。

2、采样周期:采样周期是根据被控对象的变化速率决定的,根据采样定理,采样周期应比信号的变化周期小一半以上,也就是说采样频率要比信号变化频率高一倍以上,如果有干扰信号时,还要考虑干扰信号的频率。

3、软件的工作时序:工作时序的交叉会引起潜在通路,要避免在一条指令执行完之前发出新的指令,以免造成计算机逻辑混乱。

四、控制数据范围和精度

必须对软件所处理的各类静态数据、动态输入/输出数据及内部数据进行明确的规定和控制,以提高系统运行的稳定性。数据控制的主要内容有三个方面:

1、值域控制:软件在运行时必须对参数、数组下标、循环变量等进行值域检查,如果超出规定,就必须进行错误处理。

2、数值运算范围控制:计算机所进行的数值运算都有一定的范围(特别是定点运算的计算机)及误差,在把数学公式转变成软件程序时,要保证输入输出及运算结果不超出计算机数值运算的范围,以免发生溢出或不可预见错误。

3、精度控制:要考虑软件的计算误差和舍入误差,选定合适的数据有效位。

五、防错设计

防错设计是提高软件可靠性的重要手段之一,主要有:

1、参数化:在软件设计中,应把参数、常量、标志等用指定符号表示,避免因个别参数的变化而引起软件的更改。

2、避免间接寻址:间接寻址在加密软件及黑客软件中应用较多,主要是为了增加破解难度,军用软件应尽量避免间接寻址方式,以免留下软件与硬件冲突的隐患。

3、关键信息的处理:对关键信息应进行检测,发现错误后能返回预定状态;不得用I/O寄存器或端口存储关键信息。

4、控制特殊指令的使用:在实时控制类软件中,要严格控制使用暂停(Halt)、停止(Stop)、等待(Wait)、转移(GOTO)、随机数(Random)等指令的使用,避免软件意外终止或因错误跳转而产生不可遇见的后果。

六、对不正确输入的正确反应

因电源故障、电磁感应、静电干扰、系统外部故障及误操作等,都可能造成异常信息输入,在软件设计时对输入信息进行正确性检验,以便计算机做出正确的反应。

七、软件冗余技术

冗余技术是提高软件可靠性的重要手段,软件冗余主要有2种基本结构:

1、多版本编程(NVP)结构

多版本结构由多个具有相同功能的不同程序和一个管理程序组成。软件执行时,由控制管理程序指令每个版本的程序执行相同功能,可采用一致通过准则或多数通过的准则对结果进行判别。

2、恢复块(PB)结构

恢复块结构由若干独立程序块构成,每个程序块根据同一个软件需求规格说明来设计,并且可用来相互替换。软件运行时先执行一个基本块,如果其结果不能通过判别测试,则执行第一个替换块,如此类推。

八、信息检错与纠错

信息检错与纠错的目的是为了保证信息传递和处理的正确性,检错与纠错的基础是信息的编码,常用编码方法有奇偶校验码和Hamming码。

在实时控制类软件中,禁止使用全“1”全“0”的数据格式来传输开关量或进行状态控制。

九、软件多余物

软件设计中要尽量避免多余物的出现。软件多余物主要有:

1、文档中未记载的特征:软件只应包含系统所要求的特征和能力而不应包含文档未记载的特征。

2、程序多余物:软件不得包含不使用的可执行代码和不引用的变量以防止程序误用导致意外。

3、未使用的内存:不被软件运行所使用的存储器必须初始化到规定的模式,程序执行该模式时系统恢复到安全状态。

十、软件自检测

软件自检测和硬件自检测(BIT)相似,是对软件的运行情况进行监控,发现故障时向操作人员发出告警信号或采取其它处理措施。自检测通常采用看门狗或内部自检测程序,自检测一般应具备以下的基本功能:

1、对只读存储器(ROM)中的代码进行校验,发现ROM的失效或代码错误。

2、检测内存的正确性,以确保数据的正确操作。

3、对重要的函数功能及逻辑功能进行校核。

4、对I/O端口进行检测,以保证数据输入输出的正确性。

当自检测发现不正确或不可识别的故障状态时,软件根据预先设定执行以下的操作:

1、故障恢复:软件的执行过程中设置若干检测点,把正确的检测结果保存或设定为一个恢复点,当自检测发现故障时使软件从恢复点继续执行。

2、故障隔离:故障隔离的主要思想是权限最小化原则,要求事先对过程和数据进行严格定义和限制,使过程不能提供超过规定限度的功能也无权接收超出限度的数据。

3、继续服务:就是使系统从故障状态恢复到故障前的某一状态或预先设定的其它状态。

软件可靠性是一门新兴的学科,软件可靠性的分配、预计和验证还缺乏成熟、有效的手段,在软件的开发设计过程中采取相应的技术手段,是提高软件可靠性的重要途经。除了上面介绍的方法之外,与硬件类似,在软件设计过程中,应通过软件的故障模式影响分析(FMEA)和故障模式、影响及危害度分析(FMECA)等方法,确定软件的关键件和重要件,提出可能采取的预防和纠正措施,并将其落实到软件的设计之中,从根本上使软件的可靠性得到提高。

参考文献:

  1. 何国伟. 软件可靠性[M]. 国防工业出版社, 1998.

  2. 魏杰. ADA语言在大型软件工程中的应用[C]// 全国抗恶劣环境计算机学会议. 2007.