基于SFMEA/SFTA方法的智能移动终端系统可靠性分析
2015-11-02谢安明胡春卉张梦洋贺鑫
谢安明, 胡春卉, 张梦洋, 贺鑫
(上海信息安全工程技术研究中心,上海201204)
0 引言
随着计算机和信息技术的快速发展,智能化移动终端设备成为日常生活的主流元素,为人们的生活带来极大的乐趣和便利。智能移动终端设备的功能日益增多,应用软件的数量急剧增加,软件可靠性问题非常突出,终端设备的安全问题也被更加关注。
软件失效模式及影响分析(SoftWare Failure Model and Effects Analysis,SFMEA)基于硬件失效模式及影响分析(Failure Model and Effects Analysis,FMEA)而提出,是一种最常用的软件可靠性分析方法。FMEA最初被美国军方用于船舶、微电子等领域,在软件测试中获得了良好的效果。Reifer在1979年的文章中描述了FMEA模型,并将其应用于软件系统[1]。软件开发生命周期中应用SFMEA方法,对于定位软件潜在故障有极大的帮助,可有效提高软件的可靠性。
本文提出了一种将SFMEA和软件故障树分析(SoftWare Failure Tree Analysis,SFTA)相结合的技术,并在实际的软件项目中进行了实践,指导软件开发和测试人员找出故障,对分析的结果进行总结,提出了改进措施,保证软件质量。
1 SFMEA和SFTA方法介绍
SFMEA是一种自底向上的可靠性分析方法,以失效模式为依据,得到失效模式对系统的影响和后果,通过具体分析软件系统中功能模块,综合分析可预见的故障及对系统将产生的影响,从而确定其过账原因[2]。利用SFMEA可以针对模块进行故障模式分析,得到所需要的所有故障模式,然后对每种故障模式进行原因分析,给出对应的可能原因。
SFTA通常以图形方式表现软件系统的故障特性,它可以分析单一故障点引发系统故障的原因,也可以组合多个故障关键点查找系统故障发生原因。它是一张表明软件中有哪些模块的故障、外部事件或者他们的组合导致软件发生故障的逻辑图,针对要诊断的关键疑难问题,建立故障树,分析出与其对应的故障路径[4]。
对软件系统进行可靠性分析,仅采用SFMEA或SFTA都不能达到对系统故障定位的最佳效果,SFMEA的缺点是工作量庞大,故障模式和故障影响常有遗漏现象。SFTA的不足在于,容易遗漏造成最终故障的底层原因。因此,文中结合SFMEA和SFTA分析方法,提出了一种基于SFMEA/SFTA软件故障分析模型。
2 移动终端可靠性分析模型建立
移动终端硬件系统的CPU通常具有体积小、低功耗、集成度高等特点,其软件应用于特定的环境,也有其自身的特点。在进行软件可靠性分析时,也要特别注意移动终端系统的这些特点。
将SFMEA与SFTA有机的结合起来,运用CFE(原因-模式-影响)综合诊断后实现故障定位,通过剖面分析、数据流控制等方法实现具体的故障定位。诊断模型如图1所示。
图1 嵌入式软件故障诊断模型
本文采用逆向的综合分析方法,先采用SFTA方然,随后针对故障树中的关键故障点,运用SFMEA方法,分析关键故障点对软件系统可能造成其他影响,最后对比SFTA中的失效线索是否存在。其分析过程如图2所示。具体的过程描述如下:
(1)运用SFTA方法,以系统关键疑难故障点作为顶事件绘制故障树;
(2)针对关键故障点展开SFMEA分析,定义事件类型严重性等级定义表,明确故障原因、故障模式、严酷度和故障影响;
(3)将SFMEA分析结果进行CFE的诊断;
(4)对定位的模块进行剖面分析定位到具体的函数或代码,找到故障位置,提出改进措施。
图2 逆向综合分析方法原理图
3 实例应用
3.1 应用对象介绍
本部分以实际项目智能移动终端安全软件(IMS)的软件设计为分析对象,运用以上方法进行可靠性分析。应用对象为IMS的控制软件,主要实现的功能是语音和文件的加密传输,良好的界面显示。软件采用linux C语言开发。
3.2 应用过程
首先,开发人员选择测试过程中的“黑屏死机现象”作为关键故障点建立故障树分析故障原因,如图3所示。
图3 IMS故障树
第二步的工作是开发人员针对IMS软件的需求进行SFMEA,确定故障严重性等级表。如表1所示。
表1 IMS软件严重性类别定义
然后,根据故障树中的各个底事件,分析故障产生原因、故障导致的影响、严重性及系统改进措施,得出SFMEA分析结果,如表2所示。
根据分析结果,测试人员将关键故障点对应到相应的功能模块,为具体故障点原因的定位节约了时间和成本。最后,利用剖面分析、数据流控制等技术将故障定义到具体的程序源码,开发人员可根据定位位置进行相应的改进,提高软件的质量。
对于分析中的“加密建链不成功”,“数据传输错误”,“窗口互操作太多”等这些事件作为新的顶事件,建立新的故障树,深入分析故障的原因,定位故障位置,并采取了相应的改进措施,提高系统的可靠性。
表2 IMS软件SFMEA分析结果
3.3 应用结果小结
在对IMS软件进行可靠性的过程中,深刻的体会软件的后期测试和维护是一项庞大而必要的工作。如果在软件开发中能够进行全面的可靠性分析,对于提高系统的可靠性和之后的软件维护有重要的意义。
综合IMS软件的可靠性分析和测试资料,我们将一些引起软件失效频率较高的环节做以总结,并提出了相应的加强措施。作为以后开发应用的重要参考。
(1)共享资源冲突
基于移动终端系统对实时性的要求,系统运行通常是多任务并发的,并允许中断嵌套。这在很大程度上就会引起共享资源的冲突。例如,全局变量的使用是一个很大的隐患。不同优先级的任务公用这个全局变量时,低优先级的任务常被高优先级的任务中断,中断返回后,全局变量很可能被高优先级的任务所改变,程序的运行可能发生不被期望的结果。
因此,在程序设计中,要尽可能少用全局变量。或者在全局变量可能被不同优先级的函数调用的时,可以采用加锁、互斥的信号量等保护措施,避免资源的竞争。或者采用动态优先级调配的措施,将低优先级中断的优先级提高,完成中断后再恢复原来的优先级次序。
(2)动态内存分配
鉴于嵌入式系统资源有限的特点,我们通常会用到动态内存分配的方法。那么也就相应的存在一些潜在的不安全因素。在嵌入式系统程序设计中,通常会设置为一个永久存活的大循环以满足系统运行的需求,如果只是一味的进行了动态内存分配而未释放相应的空间,那对于有限的资源无疑是一个挑战,一旦资源被用尽,程序也面临崩溃。还有一个常犯的错误是在一个函数内部定义,在其他函数内释放空间,很容易造成空间多次释放,导致指针变为野指针。这个问题在界面程序的窗口操作中尤其需要注意。
因此,要谨慎的处理动态内存分配的逻辑设计。尽量少用动态分配,而采用局部变量、局部指针代替。界面设计中要尽量简化窗口的嵌套互操作。
(3)数组越界、数据溢出
数组越界、数据溢出虽然是很简单的问题,但同样也是很容易忽视的问题。这两种错误隐蔽性强,但危害性极大,通常都会导致程序崩溃。
在程序设计中,要慎重考虑所定义的数据长度的合理性,如果引用数组的下标,要对其范围进行判断后再使用。要尽量避免浮点运算,浮点运算本身计算庞大,影响系统运行速度,而且处理不当很容易发生溢出。
(4)异常处理
异常处理是程序设计中非常必要的。例如,当硬件设备打开失败或者文件读写错误时,如果未在程序中进行相应的异常处理,通常会导致产品功能缺失,开发周期加长。
异常的处理不仅在程序中,在编译调试阶段,我们也要打开编译器的警告选项来即使捕捉所有的程序设计不合理的地方。良好的编程习惯会做完全的异常处理,同时将出错信息写入到日志文件中,方便测试人员查找故障原因,定位故障位置。
(5)协作与沟通
一项软件工程的完成通常是几个人协作完成的。在一个设计团队中,仅有分工是不能够很好的完成任务的,需要大家的相互协作与沟通。
一个好的团队需要一个好的领导来指导软件开发的方向和进度,更多的是需要开发者们交流思想,取长补短,尤其在软件产品设计时,团队的力量才是不可估量的。我们很少听说,一个人独自完成的成果是多么出众的,当一件产品完成时,融入多人的智慧的成果才是最完美的。
4 结语
本文针对智能移动终端系统的特点,提出了一种基于SFMEA/SFTA方法的软件可靠性分析方法,实现故障定位,指导软件开发人员找出故障。通过IMS软件实例应用,给出了该实例分析结果,同时总结了软件设计过程中几个重要环节,提出了相应措施,加快故障定位,提高系统的可靠性,保证软件质量。
[1] P.L.Goddard.Software FMEA techniques[C]//Proceedings Annual Reliability and Maintainability Symposium.American:IEEE Reliability Society.2000:118-123.
[2] X.A.Hecht.Computer Aided Software FMEA for Unified Modeling Language Based SoftWare[J].IEEE Transactions on Software Engineering.2004,30(5):243 -248.
[3] J.McDermid.Software hazard and safety analysis[C]//Formal Techniques in Real- Time and Fault- Tolerantant Systems,_Lecture Notes in Computer Science.Germany:Springer Berlin Heidelberg.2002:23 -34.
[4] 韩峰岩,王昕.计算机实时控制系统软硬件综合FMEA.计算机工程[J].2003,20(29):50-52.
[5] 张宝燕,田竭,任雁.基于面向对象软件的详细级SFMEA方法研究[J].科技信息.2009,17:37-38.
[6] 李涛.基于Linux终端的安全加固与接入技术的研究[D].北京:华北电力大学.2014.
[7] 石柱,马宽,郑重.软件 FMEA实例研究[J].航天控制.2010,28(2):75 -79.
[8] 周启惠.智能移动终端敏感资源保护技术研究[D].青岛:中国海洋大学.2014.
[9] 黄锡滋.软件可靠性、安全性、与质量保证[M].第1版.北京:电子工业出版社,2002:3-54.