《一种基于谓词自适应随机测试的测试用例集扩增方法.pdf》由会员分享,可在线阅读,更多相关《一种基于谓词自适应随机测试的测试用例集扩增方法.pdf(9页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102508770 A (43)申请公布日 2012.06.20 C N 1 0 2 5 0 8 7 7 0 A *CN102508770A* (21)申请号 201110306943.3 (22)申请日 2011.10.10 G06F 11/36(2006.01) (71)申请人南京大学 地址 210093 江苏省南京市鼓楼区汉口路 22号 (72)发明人陈振宇 房春荣 杨忠军 赵志宏 张杰 (74)专利代理机构南京天翼专利代理有限责任 公司 32112 代理人黄明哲 (54) 发明名称 一种基于谓词自适应随机测试的测试用例集 扩增方法 (57) 摘要 一种基于谓词。
2、自适应随机测试的测试用例集 扩增方法,程序中的分支条件表达式称为分支,由 分支条件回溯至输入域的表达式称为谓词,用于 回归测试,结合软件修改分析的白盒测试技术与 自适应随机测试ART的黑盒测试技术,首先进行 谓词提取,然后通过谓词距离引导ART进行测试 用例集扩增。本发明方法结合软件修改分析的白 盒测试技术与ART的黑盒测试技术,从而达到较 低成本的测试用例集的有效扩增。 (51)Int.Cl. 权利要求书1页 说明书5页 附图2页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 1 页 说明书 5 页 附图 2 页 1/1页 2 1.一种基于谓词自适应随机测试的测试用。
3、例集扩增方法,程序中的分支条件表达式称 为分支,由分支条件回溯至输入域的表达式称为谓词,其特征是用于回归测试,结合软件修 改分析的白盒测试技术与自适应随机测试ART的黑盒测试技术,首先进行谓词提取,然后 通过谓词距离引导ART进行测试用例集扩增,包括以下步骤: 1)使用Dejavu测试用例选择方法,从原测试用例集中选择经过修改部分的测试用例, 构成已选择测试用例集; 2)静态分析回归测试的新版本程序,提取程序中所有能被提取的谓词; 3)采用谓词序列值的Jaccard距离计算测试用例之间的距离:将提取出的谓词组成一 个谓词集合,谓词数量记为N all ,谓词结果集中相同值的数量记为N same 。
4、;然后使用测试用例t 静态执行谓词得到一个谓词结果集合R;通过谓词结果集合R计算测试用例间的谓词距离, 测试用例间的谓词距离D(t 1 ,t 2 )采用Jaccard距离计算,如下所示: D(t 1 ,t 2 )1-N same /N all 将所得谓词距离定义为测试用例间的距离; 4)进行基于谓词的自适应测试用例生成过程,生成新的测试用例集,具体过程为:在 输入域上随机生成n个测试用例,分别计算生成的测试用例与已选择测试用例集的各个测 试用例之间的谓词距离,并将所得最小距离作为该生成的测试用例与已选择测试用例集之 间的距离,然后将这n个测试用例中与已选择测试用例集距离最大的那个作为新增的测试。
5、 用例,重复此过程m次,整个过程终止,m为需要扩增的测试用例数量;或者在设定的时间内 未扩增新的测试用例时,整个过程终止。 2.根据权利要求1所述的一种基于谓词自适应随机测试的测试用例集扩增方法,其特 征是步骤4)中,在输入域上随机生成n个测试用例,n10。 3.根据权利要求1或2所述的一种基于谓词自适应随机测试的测试用例集扩增方法, 其特征是步骤2)中的谓词提取为:从程序分支中静态回溯所提取的表达式,并表示为输入 域变量和程序常量的表达式,其具体形式如下: ExpressionConstant 表示比较符号,Expression表示一个包含变量的表达式,Constant表示常量,对于 谓词的。
6、其它形式,通过变换表示成此形式;对于Expression中含有非输入参数的变量,通 过规约表示为输入参数的形式,规约后的谓词形式如下: Expression only with argumentsConstant 谓词提取时: 1)忽略含有全局变量的分支;2)忽略含有对库函数和第三方函数调用的谓词。 权 利 要 求 书CN 102508770 A 1/5页 3 一种基于谓词自适应随机测试的测试用例集扩增方法 技术领域 0001 本发明属于软件测试技术领域,尤其是软件测试中回归测试技术领域,用于进行 测试用例集的扩增,实现对新版本软件更全面地测试,为一种基于谓词自适应随机测试的 测试用例集扩增方。
7、法。 背景技术 0002 由于功能修改、性能调优、软件重构和错误修复等因素,软件需要修改演化。回归 测试是对软件修改进行检测以确保其未引入新错误。现有回归测试研究通常分为三大类: 测试用例选择(Test Case Selection),测试用例修复(Test Case Repairing),以及测试 用例集扩增(Test Suite Augmentation)。测试用例选择的主要任务就是从原有测试用例 中进行挑选,按目标不同可分为三类:回归测试选择、测试用例集约简和测试用例优先级。 软件的修改可能使得原有测试用例不可用;测试用例修复的目标是将其修复成可用测试用 例。测试用例集扩增则通过新增测试。
8、用例进行更加全面的回归测试。 0003 过去二十年回归测试研究主要集中在测试用例选择。然而在面向软件演化测试的 一些应用中,重用部分甚至全部测试用例也不能完全满足软件演化带来的测试需求。例如, 原有测试用例往往不能测试到新增模块。因而需要新的测试用例来满足测试需求。测试用 例集扩增通过软件修改分析提取新的测试需求,并通过特定测试用例生成方法得到新测试 用例。测试用例集扩增的主要挑战是如何将软件修改分析与测试用例生成有机结合,以降 低测试成本并提高回归测试的精度。当前的测试用例集扩增主要基于符号执行、启发式搜 索等测试用例生成技术。白盒测试技术适合与软件修改分析相结合,但用其进行测试用例 生成往。
9、往受限于过高的代价。 发明内容 0004 本发明要解决的问题是:现有的测试用例扩增方法不能满足回归测试中测试用例 集扩增对测试成本和测试精度的要求,需要新的测试用例扩增方法来满足这些需求。 0005 本发明的技术方案为:一种基于谓词自适应随机测试的测试用例集扩增方法,程 序中的分支条件表达式称为分支,由分支条件回溯至输入域的表达式称为谓词,用于回归 测试,结合软件修改分析的白盒测试技术与自适应随机测试ART的黑盒测试技术,首先进 行谓词提取,然后通过谓词距离引导ART进行测试用例集扩增,包括以下步骤: 1)使用Dejavu测试用例选择方法,从原测试用例集中选择经过修改部分的测试用例, 构成“选。
10、择的测试用例集”; 2)静态分析回归测试的新版本程序,提取程序中所有可能被提取的谓词; 3)采用谓词序列值的Jaccard距离计算测试用例之间的距离:将提取出的谓词组成一 个谓词集合,谓词数量记为N all ,谓词结果集中相同值的数量记为N same ;然后使用测试用例t 静态执行谓词得到一个谓词结果集合R;通过谓词结果集合R计算测试用例间的谓词距离, 测试用例间的谓词距离D(t 1 ,t 2 )采用Jaccard距离计算,如下所示: 说 明 书CN 102508770 A 2/5页 4 将所得谓词距离定义为测试用例间的距离; 4)进行基于谓词的自适应测试用例生成过程,生成新的测试用例集,具体。
11、过程为:在输 入域上随机生成n个测试用例,分别计算生成的测试用例与已选择测试用例集的各个测试 用例之间的谓词距离,并将所得最小距离作为该生成的测试用例与已选择测试用例集之间 的距离,然后将这n个测试用例中与已选择测试用例集距离最大的那个作为新增的测试用 例,重复此过程m次,整个过程终止,m为需要扩增的测试用例数量;或者在设定的时间内未 扩增新的测试用例时,整个过程终止。 0006 作为优选,步骤4)中,在输入域上随机生成n个测试用例,n=10。 0007 步骤2)中的谓词提取为:从程序分支中静态回溯所提取的表达式,并表示为输入 域变量和程序常量的表达式,其具体形式如下: ExpressionC。
12、onstant 表示比较符号,Expression表示一个包含变量的表达式,Constant表示常量,对于 谓词的其它形式,通过变换表示成此形式;对于Expression中含有非输入参数的变量,通 过规约表示为输入参数的形式,规约后的谓词形式如下: Expression only with argumentsConstant 谓词提取时: 1)忽略含有全局变量的分支; 2)忽略含有对库函数和第三方函数调用的谓词。 0008 本发明的特点在于:1、提出谓词提取技术;2、提出谓词距离的定义;3、采用谓词 距离进行自适应随机测试;4、结合测试用例选择技术和基于谓词的自适应测试技术进行测 试用例集扩增。
13、。通过实验表明,本发明能够通过较低代价达到更高的分支覆盖。 0009 本发明方法结合软件修改分析的白盒测试技术与ART的黑盒测试技术,通过引入 新的距离度量方式-谓词距离,引导ART进行测试用例集扩增,从而达到较低成本的测试 用例集的有效扩增。测试用例集扩增的经验表明尽可能多利用原来版本的程序信息及测试 用例集信息,可以有助于扩增的测试用例达到更好的测试效果。针对软件修改,我们首先采 用白盒技术,在分析已有分支覆盖和软件修改信息的基础上,定位需要覆盖的分支条件集 合,并将分支条件静态回溯至输入域得到新的谓词表达式。然后通过引入新的距离度量方 式-谓词距离,引导ART黑盒测试技术进行有效的测试用。
14、例集扩增。程序静态分析技术和 黑盒测试用例生成技术的结合,能够有效降低新测试用例生成代价,提高新增测试用例的 测试精度。 附图说明 0010 图1为本发明的流程图。 0011 图2为本发明谓词提取的示例图。 0012 图3为利用本发明方法对0.5%的测试用例集扩增15个新测试用例。 0013 图4为利用本发明方法对1%的测试用例集扩增10个新测试用例。 说 明 书CN 102508770 A 3/5页 5 具体实施方式 0014 如图1,本发明结合软件修改分析的白盒测试技术与自适应随机测试的黑盒测试 技术对于回归测试中的测试用例集进行扩增,使其通过较低代价达到更高的分支覆盖率, 步骤如下: 1。
15、)使用Dejavu测试用例选择方法,从原测试用例集中选择经过修改部分的测试用例, 构成“已选择测试用例集”,原有测试用例集T中其它测试用例则被去除; 2)静态分析回归测试的新版本程序,提取程序中所有可能被提取的谓词;程序中的分 支条件表达式称为“分支”,由分支条件回溯至输入域的表达式称为“谓词”。谓词提取为: 从程序分支中静态回溯所提取的表达式,并表示为输入域变量和程序常量的表达式,其具 体形式如下: ExpressionConstant 表示比较符号,Expression表示一个包含变量的表达式,Constant表示常量,对于 谓词的其它形式,通过变换表示成此形式;对于Expression中。
16、含有非输入参数的变量,通 过规约表示为输入参数的形式,规约后的谓词形式如下: Expression only with argumentsConstant 谓词提取时: (1)若谓词中含有全局变量,由于全局变量值在程序运行时才能确定,全局变量值难以 静态确定,因此忽略含有全局变量的分支; (2)若谓词中含有对库函数和第三方函数的调用,由于此类函数难以静态分析,因此忽 略此类谓词。特别注意的是,虽然更多的谓词能够表达更精确的“谓词距离”,但本发明的技 术并不要求所有分支均静态回溯成谓词。 0015 谓词提取过程示例如图2,在这个例子中,示例程序共有3个不同谓词(P1,P2, P3),下面介绍提取。
17、过程:P1符合提取谓词的目标形式,所以直接输出;P2有一条路径通往 程序入口,消除中间变量后输出;P3有两条路径通往程序入口,所以谓词规约为P3A和P3B, 提取后消除中间变量后输出。示例程序的谓词序列如表1所示。 0016 表1:示例程序的谓词提取序列 3)采用谓词序列值的Jaccard距离计算测试用例之间的距离:将提取出的谓词组成 一个谓词集合,谓词数量记为N all ,谓词结果集中相同值的数量记为N same ;然后使用测试用 例t静态执行谓词得到一个谓词结果集合R;通过谓词结果集合R计算测试用例间的谓词 距离,测试用例间的谓词距离D(t 1 ,t 2 )采用Jaccard距离计算,如下。
18、所示: 所得谓词距离即为测试用例间的距离; 4)进行基于谓词的自适应测试用例生成过程,生成新的测试用例集。具体过程为:在 说 明 书CN 102508770 A 4/5页 6 输入域上随机生成n个测试用例,经验表明:n=10效果最好,通过计算生成的测试用例与已 选择测试用例集各个测试用例之间的谓词距离,并将所得最小距离作为该测试用例与已选 择测试用例集之间的距离,然后将这n个测试用例中与已选择测试用例集距离最大的那个 作为新增的测试用例。重复此过程m次,m为需要扩增的测试用例数量,或者在设定的时间 内未扩增新的测试用例,整个过程终止。 0017 下面将通过具体的实施例来说明本发明的实施。 00。
19、18 通过实验来验证本测试用例集扩增技术的有效性。为了证明本发明的有效性, 我们将对比随机测试RT的结果。因此,在实验部分对原来测试用例集的扩增分别使用了本 发明和RT的测试用例集扩增技术,比较二者的分支覆盖增长率。 0019 1、实验对象 在选取实验对象时,我们的目标是选择一个经典的实验程序,该程序输入为数值型。因 此,选择的实验对象是Siemens实验套件的Tcas程序,它的优点是包含完善的测试用例集 和相关的测试脚本,并且被很多研究者使用,属于经典的实验程序。 0020 2、评估准则 本发明,以下称为基于P-ART测试用例扩增方法,目标是尽可能多的覆盖被测程序的 分支,因此选择测试用例集。
20、的分支覆盖率作为检测标准。测试用例集T对于的分支覆盖率 PT计算方法为: ,其中N T 为T执行过的谓词,N为所有谓词 具体检测基于P-ART测试用例扩增方法的有效性的方法是,在选择的测试用例集上进 行P-ART的扩增和随机测试生成测试用例(Random Testing)的扩增,比较扩增后的测试用 例集相对于扩增前测试用例集的增长率。设定经过基于P-ART扩增后生成的测试用例集为 T P-ART ,经过Random Testing扩增方式生成的测试用例集为T RT 。则T P-ART 和T RT 的分别增长 率计算如下: 实验在计算测试用例集的分支覆盖的时候,使用了Codecover进行插桩,。
21、完成分支覆 盖率的计算。 0021 3、实验实施 基于Java平台实现整个算法过程,将Tcas程序由C语言版本改为Java语言版本。测 试用例选择使用了Sofya,它提供了代码插桩和控制流图(CFG)的构建,并且提供了用于测 试用例选择的RTS模块(Dejavu)。在谓词提取方面,在转换Tcas程序语言版本的时候,我 们采用目标谓词的形式将C语言版本转换为Java版本,因此可以直接输出程序中的谓词序 列。 0022 4、结果分析 由于Tcas程序自带的测试用例集数量比较大,但是程序本身比较小,控制流结构相对 单一,这就导致很少的一部分测试用例就可以达到很高甚至完全的分支覆盖。为了避免这 样的问。
22、题,同时保证实验数据的精确性,我们分别从原测试用例集中随机选择0.5%和1%, 说 明 书CN 102508770 A 5/5页 7 并对每一种选择重复做15次实验。30组的实验结果如图3和4所示,图中P-ART指 ,RT指 )。 0023 综合实验数据看,同等条件下,本发明优于随机测试(RT)用例生成方法;其次,在 原测试用例集的覆盖率不高情况下,本发明基于P-ART测试用例扩增方法可以达到很好的 效果。 说 明 书CN 102508770 A 1/2页 8 图1 图2 说 明 书 附 图CN 102508770 A 2/2页 9 图3 图4 说 明 书 附 图CN 102508770 A 。