软件故障注入方法探究

时间:2022-09-06 09:24:13

软件故障注入方法探究

摘要:本文研究了目前已有的软件故障注入工具,对各工具所采用的故障注入方法及缺点进行了总结,并在此基础上介绍了常用的方法。对他人对软件故障注入技术的研究,具有一定的指导作用。

关键词:故障注入;缺点;常用方法

中图分类号:TN958文献标识码:A文章编号:1007-9599 (2011) 16-0000-01

Software Fault Injection Method Research

Feng Xuan

(School of Computer Science&Software Engineering,Tianjin Polytechnic University,Tianjin300387,China)

Abstract:This paper studied the existing software fault injection tool,summarized the various methods and shortcomings of fault injection and introduced the commonly used methods on this basis.It has a guiding role on the software fault injection technology research for other people.

Keywords:Fault injection;Shortcomings;Common method

一、软件故障注入方法

软件故障注入方法是通过特定的程序对系统软件、硬件错误状态进行仿真。这种方法容易扩展新的故障类型。故障注入原理是通过修改程序执行语句,增加、修改、删除数据或直接修改寄存器或存储器的内容来模拟硬件或软件故障的发生。下面介绍了常用的故障注入方法,并举了具有代表性的工具。

(一)基于调试器原理的故障注入。基于调试器的故障注入(如FERRARI)使用和调试器相同的接口进行故障注入。这些故障注入器在目标程序中设置断点,单步调试或跟踪系统调用。当目标程序运行到断点处时,目标程序被挂起,控制权转交给故障注入器,从而可以进行故障注入。在Unix平台下,故障注入器使用ptrace接口。ptrace接口的功能在大多数Unix系统上都很相似,只是参数类型和常数的名称有少许差别。

(二)基于驱动器原理的故障注入。在很多情况下,用户级的故障注入器不能注入故障,可能是因为权限不足而不能访问某些数据,或者因为在需要注入的时刻,操作系统不分配给故障注入器时间片。比如,当系统运行在临界区时,一个软件故障注入器便无法进行注入。一个可以克服大部分权限障碍的解决方法就是,使用设备驱动器来注入故障,因为设备驱动器比用户级代码有更高的权限。一个基于驱动器的故障注入器可以将故障注入到系统内存空间的任何位置。这样的设备驱动器提供两类函数,一类是在特定地址注入故障的函数,另一类是获取目标应用程序内存信息的函数。设备驱动器使用ioct1调用来允许用户进程调用这些函数。这样的驱动器在Linux、LynxOS,Windows 2000下都存在。

(三)基于驱动器的性能故障注入。这种方式通过性能故障,而不是破坏内存映像来影响系统性能。使CPU瘫痪或使系统资源申请失败(如内存或打开文件句柄)都属于性能故障。性能故障能够模拟现实中经常发生的事件的影响,如文件错误、多bug的用户进程、系统资源泄漏等。企业版计算机系统中,通常配有EDAC(错误检测与纠正)保护机制的内存和冗余CPUs,对于这些计算机系统注入性能故障,会比传统的内存位翻转故障更加有效,而且会导致更高的系统是效率。

(四)基于网络通信的故障注入。前面两种故障注入方法,针对的都是独立运行的计算机。对于实际的分布式系统来说,故障不仅在单个节点上出现,在各节点间进行通信过程中,一些硬件因素(如通信链路),软件因素(如通信协议,应用程序本身),或者网络因素(网络拥挤、拥塞等)都会引起数据的丢失或破坏。因此,基于网络通信的故障注入也具有很重要的意义。这种方法可以采用包装与设备I/O操作相关的几个系统调用来实现,如Linux系统下的函数open、read、write和close。

二、软件故障注入的缺点

(一)无法将故障注入到软件无法到达的地方。

(二)软件设备化会干扰目标系统上运行的工作负载,甚至会改变原始的软件结构。仔细的设计注入环境能将对工作量的影响最小化。

(三)糟糕的时间分辨率会带来准确性问题。对于潜伏期较长的故障,例如存储器故障,较低的时间分辨率不是问题。但对于潜伏期较短的故障,例如总线和CPU故障,就有可能捕捉不到某些错误行为,比如说传播类错误。混合近似法,将软件注入的灵活性和硬件监视的准确性结合起来。这种方法很适合于检测非常短的潜伏期的故障。然而,使用硬件监视器会增加成本,而且由于对观察点数量和数据存贮区大小的限制,降低了灵活性。

三、软件故障注入工具常用的方法介绍

ORCHSTR用于测试分布式协议的正确性,采用称为脚本驱动(script-driven)的故障注入方法,在协议层之间加入故障注入层,用来测试故障注入层之上的协议层实现的正确性。FERRARY注入故障和错误的方法是采用软件陷阱(trap),在适当的时刻或者程序位置捕获被注入的程序,然后注入选择的故障或错误。这种方法利用了UNIX系统中ptrace()函数的跟踪子进程功能。

DEFINE依靠修改系统的陷阱处理程序和硬时钟中断程序来实现故障注入。故障注入程序使用硬时钟中断来控制注入的时刻,并且激活软件陷阱来注入故障。该工具还提供软件监视器来跟踪指令执行流程和内核中的关键变量。

DOCTOR则结合了多种方法来触发故障注入,包括用定时中断和陷阱来触发故障,以及通过修改代码来注入故障,因而具有广泛的适应性,能够注入低级的CPU和内存故障以及更高级别的网络通信错误。

Xception也针对目前先进的微处理器进行故障注入。这些微处理器包含调试和性能监视功能,可直接对目标处理器的调试硬件编程。复杂的调试异常处理机制允许定义多种故障触发方式,利用处理器内部的性能监视硬件可以记录故障注入之后目标处理器行为的详细信息。上述两种方法都对系统的负载干扰较少,克服了多数软件故障注入工具干扰负载运行的缺陷。

作者简介:

冯轩(1987-),男,内蒙古呼和浩特人,天津工业大学计算机科学与软件学院软件工程专业学生。

上一篇:多媒体技术在创新能力培养中的应用 下一篇:USB Key在电子商务中应用与技术改进