基于交互的回归测试集优化方法

2019-05-23 版权声明 举报文章

摘要:为了降低回归测试成本,研究人员已经提出许多优化测试用例的技术,旨在降低一些标准测试用例的大小。但随着软件开发浮现的新趋势,如软件开发的复杂性和增加使用商业成品组件等,现有的测试用例优化技术面临新的挑战。本文提出一个新的优化测试用例算法,并通过实验说明了新的优化测试用例的方法不受这些挑战的影响。结果表明,该方法在减少软件集成测试的测试用例中具有良好的潜力。

关键词:交互 测试用例 优化 故障检测率

中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2012)05-0201-03

1、引言

在软件开发和维护过程中,随着软件模块化水平的提高,软件的回归测试显得越加重要。然而,大规模、高频率的修改软件也使得回归测试的成本不断增加。因此,解决这一矛盾的重要方案就在于优化测试用例[1]。优化测试用例是指在保持一个较高的、稳定的故障检测率的基础上减少一组测试用例中案例的数量。回归测试中传统优化用例的方法将源码分成两个部分,一部分用于实际测试,而另外一部分则用于软件模块之间的交互。但传统的优化测试用例的方法正面临着新的挑战。例如,现有商业组件COTS的源码通常很难获取得到。另外,对大型软件的源码覆盖率进行分析不仅难度大,而且成本太高。这些问题都限制了现有优化用例方法的使用。因此有必要提出一个无需访问源码的测试用例优化方法。

本文提出了一种基于回归测试的测试用例优化方法。该方法包含一组接口函数,在软件执行过程中,通过使用该方法,可以分析出模块之间的交互过程。该方法不需要对函数源代码访问,也不需要监控模块交互过程,更加不需要对其他模块进行源代码分析,从而显著地增加了该方法的适用范围。

2、优化算法的描述

为了解决现有测试优化方法的不足之处,本文提出了一个新的测试用例优化算法。该算法是一种基于两个软件模块间交互过程的回归测试方法。该方法是对一个测试用例间模块交互“行为”的模拟,不需要访问或监控源代码。

2.1 两个模块之间的互动模式

为了模拟模块间的交互行为,新的优化算法定义了一组模块的接口函数,使其在软件测试阶段被调用执行,且新算法在使用接口函数的时候将考虑函数的传递和参数的传递。

假设有两个模块,模块A和模块B,两个模块之间的交互,通过模块B的接口完成。因此,定义:

(1)接口函数:构成一部分模块接口的函数。

(2)测试用例t的交互记录:模块B的一组接口函数,在测试案例t的执行过程中由模块A调用。假设,这些函数的名字和在调用过程中传递给它们的参数值,或者依照调用次序发生的值,体现了函数的功能。

(3)长度为k的接口函数序列:一个长度为k的连续序列表示一条交互记录。

(4)接口函数的序列集合,相当于案例t 中模块A和模块B之间的交互集合——一组包含所有可能性的长度为K的序列集合,代表了案例t中A和B之间所有的交互记录。本文使用“滑动窗口”技术[5](窗口的大小等于K)构建这组长度为K的序列的集合。

在这些定义的基础上,本文定义了案例t中A模块和B模块之间的交互模型,该模型表示上文所说的序列集合。

2.2 交互模型的等价关系

对于上面定义的模块之间的交互模型,本文可以定义一个等价关系。文献[6]给出了定义两个交互行为模型之间的关系为等价关系的公式:

这里M1,M2表示被比较的模型;S1,S2表示长度为K的序列;FK1,FK2表示带有参数m的函数,其中前n个参数是文本,其它参数是数值;name(FK)表示函数FK的名称;δ(name(Fi),name(Fj))表示函数fi和fj之间的等价关系;xi,yi,i=1…n表示函数Fk1和Fk2的文本参数的值;δ(x,y)表示文本参数x和y的等价关系;xi,yi,i=N +1……m表示函数Fk1和Fk2数值参数的值;interval(x)表示数值参数x所属区间的序号;δ(interval(x),interval(y))表示数值参数x和y之间的等价关系。

文献[6]中给出了这个等价关系的详细解释。在这里,可以总结为:两个给定模型的序列集相等时,即认为它们是相等的,否则不等。当两个函数接口序列调用的元素相匹配时,两个序列被认为是相等的。因此,以下3个条件都成立时,即认为函数f1和f2是相等的:(1)函数具有相同的名称,(2)文本参数的值是相同,和(3)数值参数的值属于相同的区间。

2.3 算法描述

该优化测试用例的算法由以下几点组成。首先,该测试启动相同的接口函数序列,在测试模块交互时也使用这组序列;其次,该测试不启动任何模块间的交互;再次,该方法是基于假设和过滤掉的个体测试,它既不产生新的接口函数序列,也不调用接口函数。因此,按照假设,可以使用传统思路去测试交互性。

通过在上一节建立的模块交互模型,提出了以下算法:

MS’=;S’=;

while (S not empty)

{s=get_next_test_from(S);

Ms=build_interaction_model(s);

if (Ms is empty)then continue;

if (Ms MS’)then

{MS’=MS’∪{Ms};

S’=S’∪{s};

}

}

S-原始测试用例;

S’-优化后的测试用例,S''S;

S-原测试用例中的下一个测试案例;

Ms-测试用例s的交互状况模型;

MS’-优化后测试用例S’的交互状况模型集合。

(1)首先,从原测试用例中读取下一个测试案例并执行;

(2)在程序执行的过程中,建立了测试用例s的模块交互模型Ms,如果Ms为空,程序返回到第一步;

(3)然后,判断Ms是否属于交互模型集合MS’;

(4)如果Ms不属于MS’,那么Ms加入到MS’,案例s加入到优化用例S’;

(5)当测试用例S耗尽时,程序停止,S''表示该算法工作的结果,即优化后的测试用例。

判断模型Ms是否属于交互模型集合MS’,我们将使用等价关系。这点非常重要,尽管本文讨论的是带参函数的情况,但是这个等价关系当适用于所有能定义等价关系的函数(带参或者不带参)。

2.4 收集交互记录

为了实现该方法,需要一种技术来收集软件组件之间的交互作用记录。许多平台和编程环境提供这样一个机制,可用于收集函数调用记录,而无需访问源代码。这些机制只需要有关的函数特征的信息。例如:在Linux操作系统下,一个由连接器ld提供的拦截函数调用的机制[6];在Windows操作系统下的Detour tool[7];.NET和Java平台自身都内置了这样一种机制,可以允许拦截函数调用,而无需对二进制程序或对象代码实行监控。

在本文的实验中,实验测试了用C语言编写的主应用程序并且在Linux操作系统下运行,测试是通过连接器ld提供的一种机制完成的。这种机制仅需要接口函数的特征信息、一个主程序目标代码入口、主调函数、模块(上例中的模块B)以及那些不需要消耗资源的模块或者模块源码的说明。

3、实验以及结论

本文中的优化测试用例方法主要有两个特点:

(1)测试用例优化的百分比。这一特点体现了一个优化法优化测试用例的能力。

(2)故障检测率。这一特点显示了一个测试用例的故障检测能力。优化后测试用例的故障检测率和原测试用例保持一致或者几乎一致是非常重要的。

以前的实验的实验结果表明:本文的方法可以在不降低故障检测率的基础上提高测试用例的优化率。但这些结果仍然不能说明在集成回归测试中使用优化后的测试集比使用原测试集更能节省资源。在这个实验中,除了提高测试用例优化率和故障检测率,还测量了运行回归测试所需的时间资源。为了做到这一点,本文提出了一个附加的特征,表示了回归测试中优化后测试用例和原测试用例的增益。

3.1 实验环境设置

在这个实验中,本文选用了一系列的测试用例,这些用例是在Linux Standard Base(LSB)规范下,由linux候选作业系统LSB Application Battery v.3.1[8]产生的。本次实验的实验环境采用的是SuSE Linux v10.2。调用接口函数的次数为6次,Xlib库[9]V.11版本和标准C库用作模块整合。

LSB Application Battery v.3.1测试用例本质其实是符合LSB规范的应用程序的集合,这些应用程序由LSB工程提供并用于测试候选作业系统是否满足LSB规范要求。LSB Application Battery的具体任务之一就是测试LSB所有的库函数。基于这个原因,LSB Application Battery所选择的所有的函数库都受到LSB标准的严格约束。Xlib库是c语言函数库的一个子函数库,实现了一个与X Window系统协议相连的接低级别的C语言接口。Xlib库是LSB规范v.3.1必备的函数库之一,并作为网络传输系统x windows系统的一部分。

本文采用一个标准库函数的子集来实现Xlib的库和标准C库之间的相互作用进行测试。该子集定义在stdio.h头文件中,主要负责输入/输出功能。本文还采用X Window X11R6.9.0版的Xlib库、标准c语言库的glibc库作为具体实现。

3.2 实验指标与实验步骤

在实验前,本文收寻了17个分布在Xlib库源代码的不同地方的人为集成错误,由于Xlib库源码主要负责通过输入/输出程序与标准C语言库进行交互,人为错误与文献中提到的变异集成分析相似,创建了错误的样例,这些样例又将错误引入函数的输入/输出参数,并得到错误的函数返回值。并且这些参数被错误的加入到参数列表中,继而影响模块之间的交互。本文使用以下指标:(1)优化后测试用例的大小;(2)优化测试用例的百分比;(3)检测到的故障数量;(4)故障检测率(%);(5)回归测试的时间;(6)回归测试优化后时间减少的百分比。

实验的第一步:收集模块交互的记录和建立模块交互的模型。要做到这一点,需要重新编译Xlib库函数对glibc库的接口函数调用的拦截;第二步:实验执行对LSB Application Battery v.3.1测试用例的测试,并建立交互模型;第三步:实验使用本文的测试用例优化算法,建立优化后的测试用例,并且开始分析和对比两种测试用例的指标。包括:优化后测试用例与原测试用例的大小、优化后测试用例与原测试用例测试的百分比、优化后测试用例与原测试用例测试的故障检测率以及优化后测试用例与原测试用例发现的错误数量。

3.3 实验结果

实验结果列于表1:

表1 两种测试用例指标对比

结果表明,新的算法减少了原测试用例的88.9%(即9分之一),从而导致测试时间减少了88%,而测试用例的故障检测能力保持在原测试用例相同的水平,优化后的测试用例检测到的错误数量与原测试用例相同。

4、结语

在本文中,给出了一个新的基于回归集成测试的测试用例优化的算法。除了测试用例优化这个主要特性之外(例如测试用例优化百分比和故障检测率),新的算法在计算机资源的消耗上也获得了改进。结果表明,基于回归集成测试的优化测试用例方法具有良好的可行性。

参考文献

[1]林木,戴月明.回归测试中测试用例集优化方法的研究.计算机工程与应用,2011,47(11):54-56,163.

[2]高静,兰雨晴,金茂忠.一种基于运行时交互约束的COTS构件集成测试用例生成方法.计算机科学,2009,36(3):261-265.

[3]杨建军,陈卫东,叶澄清等.面向组件的接口变异测试方法.浙江大学学报(工学版),2003,37(2):129-133.

[4]Rountev A,Kagan S,Sawin J. Coverage Criteria for Testing of Object Interactions in Sequence Diagrams. Lecture Notes in Computer Science,2005,3442:289-304.

[5]Steven A Hofmeyr,Stephanie Forrest,Anil Somayaji. Intrusion Detection using Sequences of System Calls. Journal of Computer Security,1998,6:151-180.

[6]Dmitry Kichigin. Test Suite Reduction for Regression Testing of Simple Interactions between Two Software Modules. Proceedings of Spring Young Researchers Colloquium on Software Engineering,2007,vol.2:31-37.

[7]Hunt G,Brubacher D. Detours: binary interception of Win32 functions. Proceedings of the 3rd USENIX Windows NT Symposium,1999,7:135-143.

[8]Linux Standard Base Application Battery pages.

http://www.省略/appbat/.

[9]徐浩刚,何星,张文渊.多线程环境下X-Window程序设计.计算机工程,2000,26(1):56-60.

作者简介

欧阳陈华(1978-),男,湖南衡阳人,研究生,主要研究方向:软件测试和平行计算。

*基金项目

湖南省教育厅项目(09C1182);衡阳师范学院教研项目(JY201106);衡阳市科技局项目(衡科发[2011]14号KG23).

注:本文为网友上传,不代表本站观点,与本站立场无关。举报文章

0

好文章需要你的鼓励

上一篇:社会主义宗教和谐观的实现途径探析 下一篇:浅析高校计算机实验室局域网管理模式

写作没思路?你需要文秘服务

2~15天完成、写作疑难迎刃而解

了解详情
期刊投稿服务,轻松见刊

个性化定制期刊投稿方案,1~3月见刊

了解详情

被举报文档标题:基于交互的回归测试集优化方法

被举报文档地址:

https://wenmi.com/article/prxq0601ic3m.html
我确定以上信息无误

举报类型:

非法(文档涉及政治、宗教、色情或其他违反国家法律法规的内容)

侵权

其他

验证码:

点击换图

举报理由:
   (必填)

发表评论  快捷匿名评论,或 登录 后评论
评论
学术顾问

免费咨询 论文发表 期刊投稿 文秘服务 客服电话 免费咨询电话400-888-9411