朱羿全,沈国华,康达周,廖莉莉
(南京航空航天大学计算机科学与技术学院,江苏 南京 210016)
目前,嵌入式软件已经普遍运用于航空航天、交通运输、核电能源等安全关键领域。为了提供更为灵活和可靠的服务,嵌入式软件的规模和复杂性不断增加,使得软件对整个系统的影响逐渐占据了统治地位,用于安全关键领域的嵌入式软件一旦失效将有可能造成人员伤亡、财产损失等灾难性后果,因此,将这类嵌入式软件称为安全关键软件[1](Safety-Critical Software)。提高安全关键软件的可靠性和安全性已经成为当前工业界和计算机领域共同关注的重要问题。
软件失效模式与影响分析[2](Software Failure Modes and Effect Analysis,SFMEA)方法提出于1979年,是工业界常用的软件安全性分析方法之一。SFMEA 的基本思想是:有经验的安全工程师通过识别软件中的潜在失效模式,分析这些失效模式产生的原因并评估其对系统的影响,最终形成失效模式分析表,为系统的安全分析提供帮助。
然而,SFMEA 方法仍然存在一些问题和缺陷:
1)采用自然语言描述失效信息,缺乏精确语义定义,容易产生二义性,制约了失效知识的存储和共享;
2)由于主要依靠人工分析,分析效率低、工作量大,结果易受分析人员主观经验影响,无法保证准确性。
针对上述问题,国内外学者们展开了一系列研究工作。文献[3]建立了基于知识的FMEA 模型WIFA,旨在提高FMEA 方法的可持续性和可重用性,然而WIFA 模型分类复杂,结构繁琐,不利于推广;文献[4]建立了软件失效模式数据库,有利于实现失效知识的积累和检索;文献[5]提出了结合贝叶斯网与SFMEA 方法的软件故障诊断框架,有效实现了安全关键软件的故障诊断,然而该框架尚未工具化;文献[6]将模型检验理论和SFMEA 方法相结合,实现了对软件失效模式的精确分析,但模型转换规则仍有待完善;文献[7]分析了SFMEA 方法过程中的指标,提出了一个结合指标的SFMEA 本体框架体系,为本文中SFMEA 本体的构建提供了参考与指导。
为了形式化表达软件失效信息,支持知识的存储和共享,最终实现安全关键软件的自动化失效模式与影响分析。本文提出了一种结合本体和规则推理的SFMEA 方法:
1)提取并分析了SFMEA 领域的核心概念,构建了语义精确、表示失效知识的SFMEA 本体;
2)在此基础上,提出以SWRL 规则语言来制定失效规则,通过失效原因分析,实现了对软件失效影响的推理;
3)将本研究成果应用于发动机熄火判断模块安全分析中,并利用开源工具实现推理过程的自动化。
SFMEA 分析一般包括软件模块划分、失效模式分析、失效原因分析、失效影响分析以及制定改进措施5 个步骤[8]。
1)软件模块划分,软件模块划分的主要目的是确定SFMEA 的分析级别和分析对象,以确定分析的重点。
2)失效模式分析,针对每个失效场景,确定其潜在的失效模式。根据GJB/Z 1391-2006[9]、NASASTD-8710.13B[1]等标准中对软件失效模式的分类,总结了通用软件失效模式分类表,如表1 所示。
表1 通用软件失效模式分类表
3)失效原因分析,分析每个失效模式的所有可能原因。软件失效的原因是软件中暴露出的缺陷,一个软件失效的产生可能是由一个软件缺陷引起的,也可能是由多个软件缺陷共同作用引起的。
4)失效影响分析,分析每个失效模式对局部、高一层次,直至整个系统的影响,以及失效影响的严重性。根据GJB/Z 1391-2006[9]、MIL-STD-882E[10],本文以严酷度等级来衡量软件失效影响的严重性,如表2 所示为严酷度等级分类。
表2 安全关键领域严酷度等级划分
5)制定改进措施,根据上述分析得到失效产生的原因及影响的严重性,确定需要采取的改进措施。改进措施主要有2 种途径,①修改软件需求、设计中的缺陷,增加软件防护措施;②增加硬件防护措施。
SFMEA 分析过程利用表格来记录分析结果,由于使用自然语言描述,失效知识无法形式化表述。因此,通过构建SFMEA 本体,将SFMEA 方法分析得到的失效信息映射到本体中,实现知识的形式化表达、存储和共享。
本体是对共享概念模型明确形式化规范的说明[11],其主要用于获取相关领域的知识,提供对领域知识的共同理解,确定领域内共同认可的概念,并给出这些概念之间相互关系的形式化定义,实现领域知识的存储和共享。
定义1 领域本体可以用五元组表示:
其中,C 表示领域概念;R 表示关系的集合;HC表示概念的层次,例如HC(C1,C2)说明C1 是C2 的子概念;rel 表示概念间的关系,例如rel(R)=(C1,C2)说明C1 和C2 具有关系R;AO表示一组本体的公理。
本文采用OWL(Web Ontology Language)作为本体描述语言,OWL 是W3C 推荐的Web 本体描述语言,以描述逻辑为逻辑基础,具有强大的语义描述能力,采用形式化和结构化的方式对本体进行语义描述,便于机器识别并且无歧义地对其解释和处理。
根据1.1 节对SFMEA 步骤的分析,提取出与失效知识相关的核心概念,构建表示软件失效知识的SFMEA 本体。如图1 所示为SFMEA 本体的概念-关系图。SFMEA 本体中的基本概念包括:软件模块Software_module、失效模式Failure_mode、失效原因Failure_cause、失效影响Failure_effect、严酷度Severity、改进措施Containment。
图1 SFMEA 本体概念-关系图
1)软件模块,指软件系统中一个相对独立的程序单元,完成和实现一个相对独立的软件功能。软件模块具有的数据属性包括:模块编号has_ID()、模块功能has_function()、模块类型has_type()、模块说明has_description()。
2)失效模式,指一个软件系统或其软件模块在运行时不能完成其需求规定的特定功能。失效模式包括子类:输入失效Input_failure_mode、输出失效Output_failure_mode、程序失效Program_failure_mode、功能逻辑失效Function_logic_failure_mode 和性能失效Performance_failure_mode。
3)失效原因,指整个系统环境中导致产生特定失效模式的基本原因。失效原因包括子类:逻辑错误Logic_error、接口失效Interface_invalid、算法错误Algorithm_error、数据丢失Data_loss、数据错误Data_error 和操作失误Mis_operation。
4)失效影响,指某个失效模式对一个系统中操作、功能或状态所造成的一系列结果。失效影响包括子类:局部影响Local_effect、对上一层的影响Next_level_effect 和对整个系统的影响System_effect。
5)严酷度,指每种失效模式对软件模块功能造成影响的严重性级别。严酷度包括子类:灾难级Catastrophic、严重级Critical、轻度级Marginal 和轻微级Negligible。
6)改进措施,根据失效模式及其产生原因,及时采取纠正和改进措施,将潜在的可能导致严重后果的失效模式尽早排除。改进措施包括子类:软件防护措施Software_containment 和硬件防护措施Hardware_containment。
完成了SFMEA 本体中基本概念的定义后,通过定义概念的对象属性,如表3 所示,明确了概念间的关联关系。这样,一个表示软件失效知识的领域本体就初步构建完成了。
本文采用斯坦福大学开发的本体图形化编辑工具Protégé[12]来构建本体,Protégé 提供了图形化编辑OWL 的基本功能,如图2 所示。
图2 在Protege 中编辑SFMEA 本体
表3 SFMEA 本体对象属性详细信息
OWL 提供了丰富的本体描述能力,但由于其表达能力局限于描述逻辑,因而无法描述If...then...这样的关系,缺乏属性合成、属性值转移的能力,仅凭OWL 无法实现对失效影响的有效推理[13]。相对而言,规则能够提供较强的逻辑表达能力,例如,定义概念间的属性hasUncle():hasParent(?x,?y)∧has-Brother(?y,?z)→hasUncle(?x,?z),OWL 无法描述这样的属性,因此,W3C 提出了语义网规则语言SWRL(Semantic Web Rule Language)。
SWRL 是结合了OWL 的子语言OWL DL 与OWL Lite,以及RuleML 的子语言Datalog 的规则标记语言。它允许用户以OWL 本体概念为元素撰写规则,实现对规则的标记,促成规则与OWL 知识库的结合。
采用SWRL 编写规则时,规则主要由前提antecedent 和结果consequent 构成,每个前提和结论都由多个子句atom 组成,子句可以为空。
定义2 一条SWRL 规则的定义如下:
其 中 ClassName、DataRange、individualvalued-PropertyID、datavaluedPropertyID 分别表示本体集合中的概念集、数据集、对象属性集和数据属性集,i-object(d-object)则是本体中的实例(数据)常量或实例(数据)变量,sameAs(differentFrom)表示实例等同(不同),builtIn 是用于定义SWRL 中的各种逻辑比较关系的库函数。
SWRL 定义的规则具有antecedent→consequent的结构,其中antecedent 和consequent 是SWRL 规则子句的合取,即:atom1∧atom2∧...∧atomn,所以规则又可以表示为antecedent1∧...∧antecedentn→consequent1∧...∧consequentn的形式。一条SWRL规则可以被理解为如果前提满足,那么结论也必定为真,或者是当结论成立时,前提条件必须具备。
例如,hasUncle()的规则可用SWRL 抽象描述如下:
软件安全性分析方法主要分为2 类:1)归纳方法,即从原因导出结果;2)演绎方法,即从结果追溯原因[14]。SFMEA 属于归纳法,安全分析人员需要根据软件模块的失效模式和原因分析失效所造成的影响,如“写入数据位置错误→输出错误的状态字”。可以将这种失效影响分析过程描述成一条SWRL 规则A→B,A 和B 都是SFMEA 本体中的失效知识实例。由于有A→B 这条失效规则,只要满足失效原因A,即可推出相对应的失效影响B。
因此,适合采用SWRL 规则语言描述失效模式的这种因果关系,并利用推理引擎取代人工分析实现对失效影响的自动化推理分析。
结合本体和规则推理的失效影响自动化分析过程如图3 所示。
图3 软件失效影响自动化推理分析框架
1)输入层:领域专家和知识工程师通过失效规则输入界面来编辑软件失效规则;安全分析人员通过失效原因输入界面录入当前存在的失效事实;
2)接口层:负责解析编辑的失效规则和失效事实;
3)数据层:SFMEA 本体是整个系统的概念基础,提供了本体的层次结构,是生成SWRL 规则集的前提;软件失效模式知识库是根据SFMEA 本体构建的存储失效信息的知识库,是生成失效事实集的前提;
4)推理层:分别生成SWRL 规则集和当前的失效事实集,映射到推理引擎中,实现对软件失效影响的自动化推理分析。
最终的推理结果反映了当前失效场景下可能造成的失效影响以及相应的改进措施等有效信息。
为了说明本文提出的结合本体和规则推理的SFMEA 方法的实用性,更清晰地演示方法的整个运用过程,给出发动机熄火判断模块的安全分析案例。
1)场景描述:状态判断是控制输出的基础,其中涉及的状态众多,判断条件复杂,因此需要通过软件来实现。发动机控制软件中的熄火判断模块对采集而来的转速、温度等信号进行条件判断,如果满足条件则将熄火标识位设置为0,否则设置为1。
若信号采集传感器发生故障,信号输入无法继续更新,而熄火判断模块又未对该异常情况进行限制,则会错误地设置熄火标识,引发危险。因此需要制定失效规则集检测该失效模式。
2)实验分析:信号采集传感器发生故障,会使信号输入无法持续更新,从而导致熄火判断模块无法对发动机温度和转速下降速率做周期性确认,熄火状态位失效。因此,给出失效规则集如下所示。
失效规则集:
Rule 1.1:Failure_mode(?x)∧has_failure_cause(?x,信号采集传感器故障)→has_local_effect(?x,信号输入无法继续更新)
Rule 1.2:Failure_mode(?x)∧has_local_effect(?x,信号输入无法继续更新)→has_next_level_effect(?x,无法对温度下降速率周期性确认)
Rule 1.3:Failure_mode(?x)∧has_local_effect(?x,信号输入无法继续更新)→has_next_level_effect(?x,无法对转速下降速率周期性确认)
Rule 1.4:Failure_mode(?x)∧has_next_level_effect(?x,无法对温度下降速率周期性确认)∧has_next_level_effect(?x,无法对转速下降速率周期性确认)→has_system_effect(?x,熄火状态错误置0)
Rule 1.5:Failure_mode(?x)∧has_system_effect(?x,熄火状态错误置0)∧→has_severity(?x,严重的)∧has_containment(?x,信号无法采集时,熄火判断模块报警)
安全分析人员对某型号飞机发动机熄火判断模块进行分析,发现信号采集传感器存在缺陷,希望通过失效规则自动地对该型号飞机进行失效影响分析。传感器故障的OWL 描述如下:
图4 某型号飞机失效影响Jess 推理结果
3)实验结果:本文选用Jess 推理引擎作为规则推理引擎,相比与其他推理引擎Jess 使用了高效的Rete 匹配算法,降低了匹配操作的次数,提高了推理效率[15]。将SFMEA 本体与失效规则导入推理引擎,启动Jess 推理,推理结果如图4 所示,包括了传感器故障对该型号飞机可能造成的局部影响、上一层影响、系统影响、严酷度以及相应改进措施。
4)讨论:传统的SFMEA 方法完全由人工完成,而本文所提出的SFMEA 方法可以由推理引擎根据失效规则自动地完成。失效规则是长期工程实践中领域专家和知识工程师们形成的知识的积累,因此避免了安全分析人员主观分析所造成的结果偏差,提高了失效影响分析的准确性。另外,本文所构建的SFMEA 本体库也为失效知识的存储和共享提供了支持。
SFMEA 是工业界常用的软件安全性分析方法。本文在研究传统SFMEA 方法的基础上,针对传统方法的不足,结合本体论和规则推理,提出了一种自动化的SFMEA 方法。主要工作包括以下3 点:
1)构建了表示软件失效知识的SFMEA 本体,实现了软件失效知识的形式化表示、存储和共享;
2)提出使用SWRL 规则来实现从失效原因到失效影响的规则推理;
3)结合本体和规则推理,通过已有开源工具,实现了对软件失效模式的自动化安全性分析。
本文所提出的分析方法在准确性和自动化程度两方面比人工分析的SFMEA 方法都有所提高。进一步工作主要包括:
1)完善通用的失效规则集;
2)开发出支持本文方法的原型系统。
[1]USA:National Aviation and Space Association,NASA-STD-8710.13B,Software Safety Standard[S].
[2]Reifer D J.Software failure modes and effects analysis[J].IEEE Transaction on Reliability,1979,28(3):247-249.
[3]Wirth R,Berthold B,Kramer A,et al.Knowledge-based support of system analysis for failure mode and effects analysis[J].Engineering Applications of Artificial Intelligence,1996,9(3):219-229.
[4]Huang Baiqiao,Zhang Hong,Lu Minyan.Software FMEA approach based on failure modes database[C]// Proceedings of the 8th International Conference on Reliability,Maintainability and Safety(ICRMS 2009).2009:749-753.
[5]王雪成,李海峰,陆民燕,等.结合贝叶斯网与SFMEA技术的软件故障诊断框架[J].计算机科学,2010,37(9):131-134.
[6]顾益.结合模型检验的软件失效模式与影响分析方法研究[D].南京:南京航空航天大学,2012.
[7]Bicchierai I,Bucci G.Integrating metrics in an ontological framework supporting SW-FMEA[C]// Proceedings of the 3rd International Workshop on Emerging Trends in Software Metrics (WETSoM 2012).2012:35-41.
[8]陆民燕.软件可靠性工程[M].北京:国防工业出版社,2010:130-152.
[9]总装电子信息基础部.GJB/Z 1391-2006,故障模式影响及危害性分析指南[S].
[10]Department of Defense,USA,MIL-STD-882E,Standard Practice System Safety[S].
[11]Gruber T R.A translation approach to portable ontology specifications[J].Knowledge Acquisition,1993,5(2):199-220.
[12]Knublauch H,Fergerson R W,Noy N F,et al.The protege OWL plugin:An open development environment for semantic Web applications[C]// Proceedings of the 3rd International Semantic Web Conference (ISWC 2004).2004,3298:229-243.
[13]Horrecks I,Patel S P F,Boley H,et al.SWRL:A Semantic Web Rule Language Combining OWL and RuleML[EB/OL].http://www.w3.org/Submission/2004/SUBMSWRL-20040521/,2014-07-09.
[14]黄志球,徐丙凤,阚双龙,等.嵌入式机载软件安全性分析标准、方法及工具研究综述[J].软件学报,2014,25(2):200-218.
[15]Friedman H E.Jess in Action:Rule-Based Systems in Java[M].Greenwich:Manning Publications Co,2003:120-135.