软硬件综合FMEA在弹载嵌入式软件中的应用
2020-04-13高魏华吕广强曹鲁光丁小芩
高魏华,吕广强,曹鲁光,丁小芩,李 烽
(1.南京理工大学 自动化学院,江苏 南京 210094;2.上海机电工程研究所,上海 201109)
0 引 言
随着信息产业的蓬勃发展,嵌入式产品已频繁应用于人们生活的各个方面。嵌入式硬件的使用离不开嵌入式软件的开发应用,嵌入式系统已成为现代信息系统乃至知识经济的核心部分。弹载计算机作为导弹系统的核心部件,嵌入式计算机、可编辑器件等大量数字设备的应用,使得武器系统的复杂程度与技术含量逐步提高[1-2]。目前,在型号软件的研制过程中,嵌入式软件的可靠运行离不开高速、可靠的嵌入式硬件系统,弹载嵌入式系统的可靠性和安全性决定了型号任务的成败。因此,弹载嵌入式软件系统是武器装备可靠性的重要环节,也是当前武器装备可靠性研究的一个重要课题。
近年来,嵌入式系统故障时有发生。以埃航美国737 MAX飞机操控系统故障为例,嵌入式系统传感器和控制软件失效是破坏性的。面对沉痛的教训,人们对嵌入式软件高可靠性的需求空前。嵌入式系统是一种以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统[3-4],单一地对其硬件或软件做可靠性分析,总是不可避免地忽略两者的关联性故障。为此,本文依据国内外软件可靠性研究现状,结合弹载嵌入式系统可靠性需求,提出一种适用于弹载嵌入式系统的软硬件综合失效模式影响分析方法。依托可靠性保障体系在整个软件研制周期对软件应用软硬件综合FMEA方法,归纳总结了常见的失效模式。通过实例验证,软硬件综合FMEA的应用有效地提高了软件设计效率,节约了研发成本,提高了软件安全可靠性。
1 软硬件综合FMEA可靠性分析方法概述
软 硬 件综 合 FMEA(software and hardware integrated FMEA,简记为S&HFMEA)分析方法以系统软件中每一个功能单元以及相关硬件可能出现的失效模式为基础,以失效对系统的影响及失效后果危害度为中心,通过检测分析失效模式,归纳推理出故障原因,提出改进措施,从而提高系统可靠性。弹载嵌入式软件作为软硬件协同运作的系统,其设计周期短、实时性要求高、软硬件耦合度高、输入复杂。针对弹载嵌入式软件特点,为了全面高效地进行可靠性分析,本文依托弹载嵌入式软件可靠性保障五维体系在软件全生命周期进行软硬件综合FMEA,发现系统软硬件潜在隐患,给出解决措施以提高软件可靠性。下面具体介绍软硬件综合FMEA方法的几个实施要点。
1.1 弹载嵌入式软件可靠性保障体系
弹载嵌入式软件开发主要包括:需求获取与策划、软件开发、软件配置项测试、软件维护。为了更好地将软硬件综合FMEA技术应用到软件研制各个阶段的工程实践中,参照杨孟飞等[5]提出的基于可信要素的可信性保障五维体系结构模型构建弹载嵌入式软件可靠性保障五维体系结构模型,如图1所示。围绕此模型进行可靠性分析:首先确定可靠性分析的对象或子对象;然后针对每个对象或子对象,利用相关工具和方法,依据相关度量标准对失效模式进行分析[5-8],发现系统缺陷并给出改进措施;最后将分析结果物化成理论、方法或技术,形成案例集。
图1 弹载嵌入式软件可靠性保障五维体系结构模型Fig.1 Five-dimensional architecture of missileborne embedded software reliability guarantee
1.2 弹载嵌入式软件失效模式分类
弹载嵌入式系统软硬件协同完成一系列功能,软件的失效模式与运行剖面有着密切的联系。通过对近年来产品软件测试的分析研究可知,软件研制的各个阶段所涉及的工作内容不同,可能发生的失效模式也不尽相同。现归纳总结出10类影响弹载嵌入式软件可靠性的失效模式,并给出研制阶段与失效模式的关系矩阵,如表1所示。
表1 研制阶段与失效模式关系矩阵Tab.1 Development phase and failure mode relationship matrix
1.3 弹载嵌入式软件危害性分级
软件本身不具有危险性,但是软件输出或处理安全关键指令、控制硬件动作,由此造成的硬件误动作或失控都会引发危险事件。依据软件在系统危险的产生、监测、控制中的作用,以及相关危险事件所引起的后果的严重程度来确定软件的危害性等级和软件安全关键等级,如表2所示[9-10]。
表2 弹载嵌入式软件的危害性和安全关键等级Tab.2 Hazard and safety level of missileborne embedded software
1.4 弹载嵌入式软件可靠性度量
软件可靠性度量主要用于衡量软件各种形态的可靠性,大致可分为两类:技术度量和管理度量。技术度量从技术角度给出软件可靠性度量指标,如可靠度、平均无故障工作时间、失效率、缺陷密度及失效数等。管理度量主要面向管理人员,评断是否进行可靠性活动的指标[7-8][11]。根据失效率,给出失效模式发生可能性定义表,见表3。
表3 失效模式发生可能性定义Tab.3 Definition of failure mode occurrence possibility
根据故障模式发生的可能性和软件危害等级确定关键故障模式范围以及FMEA分析优先级,形成关键故障模式与FMEA分析优先级矩阵,如图2。
图2 关键故障与FMEA分析优先级矩阵Fig.2 Key fault and FMEA analysis priority matrix
1.5 分析过程
1)确定分析对象。依托弹载嵌入式软件可靠性保障五维体系结构模型,在分析中首先假设只产生单一故障,不考虑两个或两个以上的故障同时发生;然后根据弹载嵌入式软件的功能需求并综合考虑系统约束条件、环境条件和软硬件配置来确定分析任务剖面和分析对象。
2)确定分析的约定层级。结合嵌入式系统软硬件功能需求对软件进行结构分解,确定分析的约定层级,给出每个层级的输入、输出功能及环境要求[7-8],进而确定最小分析单元(一般选择完成某一特定功能的模块或相关元器件)。
3)分析失效模式及原因。在运行过程中软件缺陷被外界诱因触发导致软件失效,软件失效的原因除了软件本身存在有关缺陷之外,还与硬件失效引起软件功能相关故障有关。进行软硬件综合分析,找出所有可能的故障模式并分析其产生原因。
4)分析失效模式影响。分析每个假设故障对软件运行、功能或输出所导致的后果,确定后果对各层级的影响。该软件单元或元器件故障对嵌入式系统的影响层次分2层:
a)局部影响:对弹上计算机软件所要完成功能的影响;
b)最终影响:对控制系统最终所要完成功能的影响;
5)分析失效模式危害性。根据失效模式对系统功能和安全性的影响对失效模式进行危害性等级区分。结合图2,由危害性等级以及失效模式概率确定失效模式分析优先级和需要分析的关键件,从而对危险事件、分析优先级以及产生原因之间的联系进行分析。
6)分析各种失效模式可能造成的影响,给出改进措施建议,形成完整的S&HFMEA表。
2 软硬件综合FMEA在弹载嵌入式软件中的实例应用
本文选取的研究实例是弹上计算机实时系统软件,采用自顶向下的结构设计方法,根据功能划分相关模块。该软件与硬件平台一起完成相关需求功能,完成与各分系统设备的通信、发射前工作时序控制、飞行控制等。该系统软件有较高的实时性要求。现选取其中一个功能F1为研究对象,给出FMEA的实施过程。F1相关的功能框图如图3所示。
图3 F1的功能框图Fig.3 Functional block diagram of F1
通过对各模块分析确定软件的约定层次为:
1)初始约定层次:弹载嵌入式系统;
2)分析约定层次:模块2;
3)最低约定层次:模块2所调用的计算机软件组件(computer software component,简记为CSC)(f1,f2,f3,f4……)以及相关元器件。
通过应用上文给出的失效模式及影响分析方法,对该模块进行分析并填写S&HFMEA工作表(如表4所示)。
在测试人员的共同努力下,最终完成对该软件的软硬件综合FMEA。对该软件进行结构分解,将4大功能模块细分为24个功能子模块,实施软硬件综合FMEA,形成24个分析表格,总结148个软件失效模式。对分析结果进行归纳总结,形成案例集,随软件版本更迭同步更新故障库。
3 软硬件综合FMEA应用结果分析
通过弹载嵌入式系统中软硬件综合FMEA的应用,编码人员对可靠性的意识得到了加强。随着软件版本的更迭,软件可靠性进一步增强。然而,由于弹载嵌入式软件实体实验次数、硬件资源有限,弹载嵌入式软件失效模型的参考数据不足,这些都给可靠性分析工作带来很大的困难。
为了今后更好地进行软件可靠性保障工作,综合考虑软件失效模式危害等级、失效率、加强软件可靠性措施成本等因素,对该弹载嵌入式软件出现的可靠性薄弱环节进行分析与总结,提出相应的软件改进建议,形成案例集和故障库。通过实例应用,可以发现该弹载嵌入式软件存在关键变量、内存使用、时序性问题等可靠性薄弱环节。下面对这些薄弱环节进行总结并提出相应改进措施。
3.1 关键变量分析
弹载嵌入式软件中应用的数据种类繁多,尽管各项标准对数据定义有着严格要求,但仍存在由于关键变量考虑不全面、中间变量设置不当、关键变量定义不明确、关键变量在耦合模块间的应用、变量计数步调不一致等问题所导致的故障。
因此,在关键变量的使用过程中,设计人员要深刻理解任务书中变量的定义,明确定义关键变量。使用关键变量时要全面考虑各种情况,将关键指令变量在不同物理地址、不连续内存地址中分别进行定义,并且进行状态保护、野值剔除、限幅处理;表示二值的变量需考虑所有中间状态,确保其处于安全状态;在设计中注意变量的作用域和各种赋值,熟悉变量在流程中的变化和清零时机;对影响任务成败的外部输入关键指令,要进行多次累计判断,以避免异常数据导致误操作的情况。建议今后在软件设计时建立参数变量与控制程序分离存储机制,减少软件版本更迭次数,降低软件耦合度。
3.2 内存使用分析
弹载嵌入式软件大多是基于物理模型的,其数据结构复杂,多种数据结构的使用导致内存使用中存在很多与指针相关的运行时错误,如空指针引用、指针变量未初始化、非法地址访问、内存泄露、堆栈溢出和重复释放等故障。在可靠性分析过程中,经常遇到由于软件中断重入和多任务中断造成的共享资源冲突、缓存队列未及时释放、数组数据未更新、堆栈值替换导致数据重包、指针设置冲突等问题。
因此,编写程序时应全面考虑各个条件,严格遵照规则标准进行代码编写,保证代码的整洁性。赋值时注意区分赋值类型,对关键变量进行写保护,局部变量声明地址空间;简化数组,数组数据排序之前应比较数据是否更新,避免使用全局指针变量、全局数组;在高速通信处理信息时,尽量设置成非单信息,使用循环缓冲和命令字堆栈,避免两条信息间隔很短时前面的信息被覆盖。
3.3 时序性问题分析
弹载嵌入式系统作为嵌入式实时系统,其内部各个控制模块通过串口、并口或总线采用中断或查询的方式进行信息交互,要求在确定的时间内对外部产生的事件响应处理,有严格的实时性约束。因此对硬件的时序测试需要贯穿整个设计需求层面、详细设计层面、电路板设计层面以及最后的布局布线后网表层面。
软件方面,尽管相关文档对实时性要求的描述几近详实,但是由于编码人员的理解出入和具体实施的复杂及多变性,时序性失效模式时有发生。
因此,建议进行全面的软硬件接口可靠性设计分析,采用智能BIT故障检测技术排除硬件接口潜在的故障模式,使软件具备识别处理硬件故障的能力,增强软件健壮性设计;综合考虑各功能时序分配,减少嵌套的使用,增加时序冗余措施代码等确保软件时序性正确。
4 结束语
本文基于可靠性保障五维体系提出了一种软硬件综合FMEA方法,对软硬件综合FMEA的实施要点和过程进行了描述,并通过在弹上计算机软件中的应用实例,给出了适合该软件的失效模式分类、失效原因及影响分析以及适用于弹载嵌入式软件的软件危害等级。结合相关软件开发经验和该软件分析结果总结出该软件存在的可靠性薄弱环节,并给出了相应的预防、纠正、解决措施,有利于提高该软件可靠性。结果表明,本文提出的可靠性分析方法对提高软件可靠性有一定的工程价值。