浅谈软件健康管理技术

2017-10-21 13:43张蕾唐甜徐杰
科技风 2017年8期

张蕾 唐甜 徐杰

摘 要:软件健康管理概念最早源于NASA“Integrated Vehicle Health Management Technical Plan”报告,旨在实现自动检测、诊断、预计和减缓有软件异常引起的不良事件。本文首先阐述了飞机健康管理的定义和特点,其次基于失效模式,对开发过程中出现的故障进行整理和分类,其次结合FMEA的思想,对故障的风险顺序数进行计算,最后列出高风险故障,制定缓解措施,为国内软件领域开展健康管理提供借鉴。

关键词:软件健康管理;风险顺序数;FMEA分析

2008年10月7日,澳航空中客机A330-303攀升至37000英尺高空中,3分钟之内发生两次急速向下“俯冲”,其中110名乘客和四分之三机组成员受伤。调查结果指出,本次事故是由于飞机上的一个组件——飞行数据/惰性参考单元(ADIRU),在事故前突然失效,并向其他系统发送错误数据,根据这些错误参数,对客机实行俯冲指示,导致本次事故发生[ 1 ]。此事件说明,对于这种高安全性、高可靠性要求的嵌入式系统,需要有一种有效的方式,来阻止这种软件运行时错误,并在系统发生错误时,能够自动从故障中恢复,避免导致灾难性后果。

在软件开发过程中,有确认和验证(V&V)环节,这个环节的主要任务就是要确保在软件被使用之前,发现软件实现中与需求不一致的内容,以及隐含的软件错误和缺陷。然而经验显示,这种发现错误的黄金标准,在实际使用中并不能达到期望的目标。甚至软件本身的问题已经很少,但和一些硬件(比如傳感器、作动器)联系在一起使用,当意外的操作条件产生或环境的改变,也会导致有些软件错误或缺陷的发生,因此软件健康管理显得至关重要。

1 软件健康管理的概念

软件健康管理(SWHM)被可理解为一种技术,应用健康管理的原则和技术到软件系统中,它是健康管理(PHM)的一个新分支,是用来检测、诊断、预测和减轻由于软件故障引起的不良事件[ 2 ]。出现这些故障的原因很多,包括:编码错误、非预期故障、有硬件引起的故障或与外部环境的交互问题。总而言之,软件健康管理就是当软件故障发生在意想不到的条件下发生时,维护系统的功能和性能的一种方法。

通过对软件健康管理概念的理解可以看出,软件健康管理具有以下几个特点:

1)软件健康管理是健康管理技术在软件领域中的拓展,是健康管理的一个新分支;

2)强调自主性,自动检测、诊断和处理;

3)软件健康管理关注的对象是由异常情况引起的不良事件,而非故障,该不良情况有可能是软件内部引起的,也可能由外部环境引起;

4)软件健康管理的目的是通过对不良事件危险性的评估,采取相应的减缓措施阻止该不良事件演变成故障,对系统的正常运行造成影响;

5)健康管理过程与硬件健康过程相似但不完全相同,与硬件最大的不同在于对未来状态的预测,对于引起不良事件的软件构件/模块并不能对自己进行状态预测,只能预测该构件/模块的不良事件在软件内部传播时对与之相关构件/模块的影响。

软件故障随着时间增长不会发展,也不会自己消除,会存在于整个软件的生命周期中,需求错误、设计缺陷和编码错误等都是例子。如果软件故障再测试中不能被发现和移除,将一直以休眠形式,存在于软件系统中,在操作过程或条件达到时被触发。

软件中的故障,在与有问题的硬件交互操作时发生。硬件系统(包括他们的传感器)可能会出现与其期望的行为不同,因此会导致软件故障。这个不同的行为可能有很多原因:比如开发过程中的意外事件、硬件故障导致的结果(传感器电缆坏掉)、失效的传感器或逐渐退化的硬件系统(信号噪声超过指定的级别)。物理系统会因为各种原因产生异常,在这种物理环境下,软件能正常运行极其困难。

因此要进行软件健康管理,需要有两个步骤:

1)首先要根据历史的关键软件,在开发过程中可能发生的故障进行整理并分类;

2)利用故障模式和影响分析(FMEA)的方法对这些故障进行分析,指定缓解计划。

2 基于失效模式的故障分类

通过对历史的关键软件进行整理,将故障分为16类,包括算法错误、总线接口錯误、配置管理错误、编译错误、数据定义错误、数据处理错误、文档错误、硬件错误、输入/输出系统错误、实现错误、交叉传输错误、性能错误、自测试错误、系统集成错误、工具错误、用户执行错误。

算法错误,定义了软件设计中的基本错误,其中包括错误的混合逻辑、错误的数据发送/更新算法、死代码、错误的分支逻辑、错误的算法逻辑、错误的工程单元、错误的方程或计算、错误的故障检测算法、错误的故障隔离算法、错误的故障管理逻辑、错误的报告逻辑、计算时使用的错误的信号、初始化逻辑错误、初始化值错误、反转逻辑错误、缺少初始化功能、缺少计算过程中限制值、缺少原型模型、不正确或不合适的计算或条件范围、操作符错误、错误的复位逻辑、错误的复位时间、设置值或变量错误、语法错误、测试模型错误、错误的临界值、错误的延迟、笔误、缺失或不正确或不合适的有效性检查。

总线接口错误,定义了数据资源和总线传输错误,其中包括错误的位位置、总线初始化错误、发送的数据错误及总线接口信号缺失。

配置管理错误,定义配置管理过程中存在的错误,其中包括未被发布的正确的软件版本、执行延迟、不正确的软件版本、需求未及时更新以及软件版本与需求不匹配。

编译错误,定义软件生成过程中,由工具软件创建的一类错误,包括不正确的汇编代码生成。

数据定义错误,定义了内存中的错误数据结构描述,其中包括错误的数据结构、错误的数据类型、错误的枚举类型、错误的查找表、错误的偏移量、错误的位大小。

数据处理错误,定义了包含非法的、未定义的或错误的数据元素或变量的使用,其中包括强制类型转换错误、断点错误、低位高位反序、表或数组的索引错误、错误的数据处理逻辑、使用错误的内存地址、错误的比例因子、错误的转换逻辑、错误的变量或变量类型。

文档错误,定义文档中出现的错误,比如设计文档、流程图、状态图、结构图等,能导致后续的软件开发出现异常。

硬件错误,定义在软件直接或间接影响的物理系统的不足或缺陷。

輸入/输出系统错误,定义了和输入输出相关的错误,其中包括错误的数据列表、I/O同步错误、数据结构顺序错误、缺少或错误的信号输入。

实现错误,定义了软件需求被错误的实现的错误,包括软件需求或软件变更需求,在代码中被错误的实现。

交叉传输错误,定义了處理器或并联模块之间,不能正确握手的错误,其中包括错误的定义逻辑、工程单元不匹配、故障管理、输入输出不同步、错误的初始化逻辑、错误的交叉传输逻辑、错误的复位时间、错误的采集时间、错误的延迟。

性能错误,定义了违反实时需求或处理器极限阈值的错误,包括超出处理器极限阈值;

自测试错误,飞行前的充分的测试,用来验证系统的状态是否正常。其中包括不合适的测试条件、错误的测试设计、不恰当的需求、错误的测试时间、时间管理、测试用例中输入错误的值、丢失复位功能。

系统集成错误,定义了当主要系统组件聚集在一起作用时产生的错误。其中包括通道未同步、需求冲突、错误变更需求、错误的数据资源、发动机单元不匹配、ICD或软件不匹配、不一致的接口顺序、错误的需求、错误的接口、错误的手册、内存使用错误、缺失数据、缺失访问驱动、缺失头文件、ICD文件中缺失信号、缺失软件更新、缺失测试点、无需求、错误的参数、参数顺序错误、同步率下降、需求不清楚、不必要的需求。

工具错误,其中包括运算法则错误(工具产生错误的信号和值)、输入数据错误。

用户执行错误,定义了用户在操作时,导致的错误。

3 基于FMEA的故障分析

和其他风险管理方法类似,我们重点考虑发生的频率、严重程度及检测的可能性,检测的可能性是用来测量故障发生的阶段和根据原因分析确定的故障注入阶段之间误差。

这种方法和风险管理的区别在于,这种方法是基于数据和已经存在的或已经发生的事件,而不是根据概率和验证程度估计的事件。

3.1 风险顺序数计算

风险顺序数是一类故障类型相关的基本风险估计。这个参数的范围从0到1000,可清楚的表明分类中的故障相对的风险优先级。计算公式为:

3.2 RPN计算

当估计出的PRN值超过120,则可认为为高风险故障。对于高风险的故障,可采用风险避免、风险转移、接受风险或风险减缓的措施来缓解。

如表2所示故障的RPN均超过120,在开发过程中,制定缓解措施,控制风险的发生。

4 总结与展望

本文根据失效模式,对历史关键软件,在开发过程中可能发生的故障进行整理并分类,利用FMEA的方法,对所有可能发生的故障的RPN进行计算,对于RPN超过120的故障,即是高风险故障,需要高度关注,并制定缓解措施,希望国内软件领域开展健康管理提供借鉴。

本文仅通过分析,列出高风险故障,在后续的研究中,需重点关注,可采用何种方式,在开发过程中减少此类故障发生。

参考文献:

[1] Ashok N Srivasiava,Robert W Mah,Claudia Meyer,Integrated Vehicle Healeh Management Technical Plan[R].Version 2.03.NASA,2009:44.

[2] 宫华伟,李保中,温永强.软件健康管理在ADIRU中的应用及验证.电光与控制第22卷第7期,2015年7月.

[3] 解维奇,蔡远文,邢晓辰,辛朝军.软件健康管理系统故障诊断推理机算法,测控技术2014年第33卷第5期.