软件故障模型驱动软件测试

点赞:13248 浏览:57814 近期更新时间:2024-01-26 作者:网友分享原创网站原创

摘 要:为了解决软件测试中的盲目性和不确定性,本文从软件故障模型分析出发,阐述利用目前成熟的动态内存故障模型如何驱动软件测试,提出由软件故障模型驱动软件测试的思路.并对现在软件故障模型的分析提出进一步开展的一些想法.

关 键 词:软件故障模型驱动软件测试软件可靠性

中图分类号:TP311.52文献标识码:A文章编号:1007-9416(2013)10-0147-03

软件测试一直是提高软件产品(文档、数据、程序)质量的重要方法,在大量的工程实践过程中,不管是面向程序结构的白盒测试,还是面向程序功能的黑盒测试,测试人员都是通过测试活动尽可能多地发现软件缺陷,通过长期的测试增强对产品发布的信心,降低发布风险.但是,由于这种测试方法缺乏有效的理论指导,使得软件测试工作比较盲目,测试工作的针对性不强.即使现在的测试方法和工具在不断地完善,但是测试人员仍然无法确定产品缺陷是否都被发现,发布的产品是否不在存在缺陷,测试仍然是尽可能多地发现问题,但软件产品中还存在多少问题,仍然无法定量说清楚,软件测试仍然没有从本质上改变软件产品质量和可靠性.软件故障模型脱胎于以硬件为主的设备故障模型,随着硬件的逐步成熟和软件规模、复杂度的逐步增加,软件故障模型逐渐被重视,虽然不够完善,但为软件测试走向更科学,更自信提供了一个新的发展方向.本文拟从软件故障模型中寻找驱动软件测试的动力,寻求一种能说明软件存在哪些类型的故障,以及依据故障模型改进软件测试的方法.

1软件故障与软件测试

蔡开元先生对软件失效机理进行了如下描述:软件错误是一种人为错误,一个软件错误必定会产生一个或多个软件缺陷;当一个软件缺陷被激活时,便产生一个软件故障.同一个软件缺陷在不同条件下被激活,可能产生不同的软件故障;软件故障如果没有及时的容错处理,便不可避免的导致软件失效,同一个软件故障在不同条件下可能产生不同的软件失效.这样的复杂关系如图1所示.

图1可以很好地说明软件故障产生与测试的复杂性,软件功能层面的失效往往是由各种特定的条件和环境决定的,存在必然的复杂性和多样性.而测试虽然能从软件的不同层次开展测试,但如果不能从问题的根源处着手,要测试出全部问题是不可能的,这也导致了测试再充分也不能保证测试后的软件没有问题.同样地,我们也能看出,如果从问题产生的根源出发开展软件的测试,是可以将后续环境中无穷发散的问题解决的.这无疑是改善测试不确定性和盲目性的一个有效办法.

2用软件故障模型驱动软件测试

软件故障模型(MEA)从发生的软件错误入手探究和分析导致软件故障模型,是寻找软件问题产生的根源的一种有效方法,是软件测试的基础.这里以成熟的动态内存故障模型为例阐述利用故障模型来驱动软件测试的方法.

2.1动态内存故障分析

(1)动态内存是一个自由存储区域,编程人员根据需要,利用编程语言提供的动态内存管理命令,进行动态内存的分配、访问、回收等操作.各类操作后的结果与该内存区域当前所处状态紧密相关,由此产生了动态内存使用过程中的各类问题,在分析导致其错误的原因的基础上,可以建立动态内存故障模型.如图2所示.


Start表示开始状态;MemoryAllocate表示对内存进行动态内存分配,若没有足够的动态内存,则内存指针为NULL;CheckMemory检查动态内存分配的结果,以保证后续动态内存操作的正确性;AccessMemory表示对动态内存中的内容进行写、读、修改等操作;FreeMemory表示动态内存操作结束,进行动态内存的释放;End表示结束状态;

(2)动态内存的四个核心操作缺一不可,且在不同状态下操作也有约束,由此导致了诸多与动态内存使用相关的问题,如图3所示.

图3中的连线表示了引起动态管理错误出现的几种操作,箭尾表示当前的动态内存管理状态,箭头表示在当前状态下的操作请求,将引起动态内存错误产生的操作请求进行分类,可分为如下几类:1)Memoryallocate操作请求引起的错误,在图中,6,5,7表示了与动态内存分配操作请求有关的错误.2)Checkmemory操作请求引起的错误,图中连线10表示了动态内存检测操作有关的错误.导致错误发生的原因是在动态内存释放之后,又对动态内存进行检测(试图重新使用已回收的动态内存).3)Accesemory操作请求有关的错误.在图中,3、9表示了由内存访问引起的错误.导致该错误出现的原因有两个,3表示在动态内存访问之前未进行指针P的检测,本文将这种错误定义为空指针引用,操作9表示在动态内存释放之后,重新进行动态内存的访问,从而造成动态内存的未分配使用错误.4)Freememory操作请求引起的错误,1,11表示了由动态内存回收操作引起的错误,1表示没有进行动态内存的分配而进行动态内存的释放,11表示在对指针变量P进行了动态内存的释放之后,重新进行释放工作,这两种情况是等价的,即在没有可以用的动态内存的情况下,尝试使用动态内存空间,产生了动态内存未分配使用错误.5)与end有关的错误.在图中,2,6,8表示在程序结束阶段出现的错误,导致错误产生的原因是在进行了动态内存的分配、检测或访问之后,没有进行动态内存的释放,因此,造成了内存泄露的问题.

以上就是动态内存故障模型分析的核心部分,这样的故障模型能从问题产生的根源出发阐述软件缺陷发生的机制,为软件测试提供了一个寻求有效测试方法的窗口.

2.2故障模型驱动软件测试

(1)在有了软件故障模型之后,在软件测试时即可针对这类故障的根源开展测试,做到有的放矢,达到通过测试将该类软件问题从程序中剔除的目的.动态内存故障模型从动态内存故障产生机理开展分析,切入软件代码编写的最初级过程,我们这里以C语言为例阐述利用动态内存故障模型驱动软件测试的过程.C语言中与动态内存管理相关的操作有几类,可以分别与动态内存管理的四个阶段对应:1)动态内存分配类操作:如malloc;calloc;realloc等动态内存分配类函数.2)动态内存检测类操作:内存指针检测if(p!等于NULL),动态内存初始化memset等操作.3)动态内存读写访问类操作:各种动态内存空间赋值、引用、函数间的调用等,都可能形成动态内存的读写操作.4)动态内存释放类操作:如free等内存释放函数.(2)与故障模型进行对应之后(见图4),即可开展软件测试工作,最简单的方式就是采用人工走查代码的方式进行,这类方法对程序结构简单、规模不大的程序还是很有效的,可通过同行评审等方式开展,能很快排除与动态内存故障模型相关的软件错误,进而达到根除该类软件错误的目标.

软件故障模型驱动软件测试参考属性评定
有关论文范文主题研究: 软件测试相关论文范文 大学生适用: 学校学生论文、函授毕业论文
相关参考文献下载数量: 27 写作解决问题: 写作参考
毕业论文开题报告: 论文提纲、论文总结 职称论文适用: 期刊发表、职称评中级
所属大学生专业类别: 写作参考 论文题目推荐度: 最新题目

(3)软件系统高速发展的今天,小规模、结构简单的程序越来越少,动态内存管理越来越复杂,通过简单的人工代码走查方式明显跟不上时代的发展,随之各类软件测试工具供应商推出了多种软件测试工具来解决这种大规模复杂情况下的软件代码故障检测问题.比如klockwork、C++Test等等,成为了帮助软件开发、测试人员发现并解决软件问题的有力工具,其核心也是依据不同软件故障模型对程序代码进行检测,提供明确的软件故障指示.针对动态内存管理故障模型,检测软件一般通过数据流分析、制定检测规则、软件故障检测三个过程来检测问题.1)数据流分析:程序中的数据流分析可以描述出程序的结构流程,变量间的定值与引用关系,为故障检测提供有力支撑,主要方法有到达-定值数据流分析法和活跃变量数据流分析法.2)制定检测规则:在数据流分析的基础上,通过抽象命名,把规则涉及实体进行命名,再依据软件故障模型制定工具检测遵循的规则,并将规则转化为方便工具自动处理的“语言”.3)软件故障检测:在数据流分析和检测规则的基础上,完成对软件特定故障的检测,并提供个性化的展示、统计和分析能力.

综上所述,在软件故障模型成熟之后,据此开展更有效的软件测试活动是可行的,也为软件自动化测试工具设计提供了依据.使用软件故障模型驱动软件测试可以按如图5所示流程开展.

首先在故障模型研究的基础上,对需测试的对象按照故障模型进行实例化,完成由模型向具体问题的转化;然后对模型实例进行分析,研究发掘更优更有效的测试方法,并用测试方法对对象进行测试确认,不断循环分析和方法优化的过程,直至找最适合的方法;用寻找到的方法对一类问题进行普适性确认,因为故障模型本身就是从众多实例中抽象提炼出来的模型,因此普适性验证重点关注方法的效率和重用度;对于重用度高,通过工具可以大幅提高效率的方法还可设计自动化测试工具对方法进行固化.

3结语

现代信息技术的不断发展,软件应用已经无处不在,通过软件故障模型来指导软件测试是提高软件可靠性的一个有效办法,其核心是不断地总结提炼科学有效的软件故障模型,在应用场景和方式也日趋复杂的今天形成准确的软件故障模型是件不容易的事情,特别是从覆盖度上要能让软件故障模型覆盖所有的软件故障更是困难,即便如此,发掘和提炼软件故障模型仍然是值得的,可以让测试更有针对性,更自信,更有效.提炼软件故障模型需要大量的工程实践作为基础,通过检测设故障存在、反向推理、实践验证的方式进行.当前软件故障模型偏重于由软件代码层次,对软件应用环境、模式、行业特点等方面指导系统级测试的软件故障模型还很欠缺.完善软件故障模型并应用到测试行为当中还是一个很长期的过程.