基于语句交互覆盖的回归测试用例选择方法

文档序号:6522136阅读:587来源:国知局
基于语句交互覆盖的回归测试用例选择方法
【专利摘要】本发明公开了一种基于语句交互覆盖的回归测试用例选择方法,包括如下步骤:(1)对待测程序进行插桩,在插桩后的程序上执行用于测试被测程序的已有测试用例集中的每个测试用例,记录每个测试用例的语句覆盖信息并构造出测试用例-语句覆盖矩阵,确定需覆盖的语句集R;(2)基于测试用例-语句覆盖矩阵生成可覆盖的语句间交互集I;(3)根据可覆盖的语句间交互集I、需覆盖的语句集R和已有测试用例集,按照选择策略执行测试用例集压缩方法,并最终生成压缩后的测试用例集。该方法具有选择出的测试用例数量较小,同时又不会显著降低原有测试用例集的缺陷检测能力等优点。从而可显著降低回归测试成本,并进一步提高回归测试的效率。
【专利说明】基于语句交互覆盖的回归测试用例选择方法
【技术领域】
[0001]本发明属于计算机软件测试【技术领域】,具体涉及一种基于语句交互覆盖的回归测试用例选择方法,用于提高回归测试的效率,减少回测测试中的复杂度并使选择出的测试用例仍具备较高的错误检测能力。
【背景技术】
[0002]软件产品在开发和维护过程中,因移除内在缺陷、完善已有功能、重构已有代码或提高运行性能等,需要执行代码修改并触发软件演化。随着以统一过程和敏捷方法为代表的增量迭代式开发过程的流行,软件演化频率也随之迅速提高并亟需经济有效的测试方法来确保演化后软件产品的质量。回归测试是其中一种有效方法,可有效保证代码修改的正确性并避免代码修改对被测程序其他模块产生的副作用。执行回归测试时的一个核心问题是测试用例集的维护策略设定。在软件持续演化过程中,因新测试用例的不断添加,导致测试用例集规模持续增长并增加了测试用例集的执行和维护开销。例如有研究人员在某一合作企业内,当测试一个包含约2万行代码的软件产品时,发现运行所有测试用例后,所需时间高达7周。而测试用例集压缩方法在满足指定测试需求(例如语句、分支和定义使用对等)的覆盖前提下,通过识别并移除冗余测试用例来压缩测试用例集规模,从而提高回归测试效率并降低回归测试成本。
[0003]然而传统的测试用例集压缩方法仅考虑对单一测试需求的覆盖,随后设计出新颖的算法来完成测试用例集的压缩并尽可能的使得压缩后的测试用例集规模更小。在一些实证研究中,研究人员发现测试用例集压缩方法虽可以大幅度缩减压缩后的测试用例集规模,但同时也会显著降低原有测试用例集的缺陷检测能力。
[0004]综上所述,为提高压缩后的测试用例集缺陷检测能力,有必要设计出一种系统方法来提高压缩后的测试用例集的缺陷检测能力。本发明由此而来。

【发明内容】

[0005]本发明目的在于提供一种基于语句交互覆盖的回归测试用例选择方法,解决了现有技术中测试用例集压缩方法虽然大幅度缩减压缩后的测试用例集规模,但显著降低原有测试用例集的缺陷检测能力等难题,本发明的方法有效降低测试用例数量并保持足够高的错误检测能力。
[0006]为了解决现有技术中这些问题,本发明提供的技术方案如下:
[0007]一种基于语句交互覆盖的回归测试用例选择方法,包括如下步骤:
[0008](I)对待测程序进行插桩,在插桩后的程序上执行用于测试被测程序的已有测试用例集中的每个测试用例,记录每个测试用例的语句覆盖信息并构造出测试用例-语句覆盖矩阵,确定需覆盖的语句集R ;
[0009](2)基于测试用例-语句覆盖矩阵生成可覆盖的语句间交互集I ;
[0010](3)根据可覆盖的语句间交互集1、需覆盖的语句集R和已有测试用例集,按照选择策略执行测试用例集压缩方法,并最终生成压缩后的测试用例集。
[0011]优选的技术方案中,所述方法步骤(3)中执行测试用例集压缩方法按照以下步骤进行:
[0012]I)构造压缩后的测试用例集,并设置压缩后测试用例集为空集; [0013]2)按照第一选择策略SI从已有测试用例集中选择覆盖语句集R中相应的语句的测试用例,添加到压缩后的测试用例集中,并确定语句间交互集I中已经覆盖的语句交互;
[0014]3)按照第二选择策略S2从已有测试用例集中选择覆盖语句间交互集I中尚未覆盖的语句交互的测试用例,添加到压缩后的测试用例集中。
[0015]优选的技术方案中,所述方法步骤2)按照第一选择策略SI从已有测试用例集中选择覆盖需覆盖的语句集R中相应的语句的测试用例按照如下步骤进行:
[0016]Al)计算出需覆盖的语句集R中每个语句的基数,获取需覆盖的语句集R中语句的最小基数;所述基数为测试用例集中覆盖该语句的测试用例数量;
[0017]A2)从已有测试用例集中选择测试用例子集Tl,使其中的测试用例覆盖拥有最小基数的语句个数最多;
[0018]A3)如果测试用例子集Tl仅包含一个测试用例,则将该测试用例为被选定的测试用例;如果测试用例子集Tl包含两个或两个以上的测试用例时,从测试用例子集Tl中选择测试用例子集T2,使其中的测试用例覆盖语句间交互集I中语句交互最多;
[0019]A4)如果测试用例子集T2仅包含一个测试用例,则该测试用例为被选定的测试用例;如果测试用例子集T2包含两个或两个以上的测试用例时,从测试用例子集T2中随机选择一个测试用例作为被选定的测试用例。
[0020]优选的技术方案中,所述方法步骤3)按照第二选择策略S2从已有测试用例集中选择未同时覆盖需覆盖的语句集R中相应的语句和语句间交互集I的语句交互的测试用例按照如下步骤进行:
[0021]Al)计算出语句间交互集I中每个语句交互的基数,获取需覆盖的语句间交互集I中语句交互的最小基数;所述基数为测试用例集中覆盖该语句交互的测试用例数量;
[0022]A2)从已有测试用例集中选择测试用例子集Tl’,使其中的测试用例覆盖拥有最小基数的语句交互个数最多;
[0023]A3)如果测试用例子集Tl’仅包含一个测试用例,则将该测试用例为被选定的测试用例;如果测试用例子集Tl’包含两个或两个以上的测试用例时,从测试用例子集Tl’中随机选择一个测试用例作为被选定的测试用例。
[0024]优选的技术方案中,所述方法步骤3)中已有测试用例集为原始已有测试用例集中排除已添加到压缩后的测试用例集中测试用例的测试用例集合。
[0025]优选的技术方案中,所述方法步骤⑴中假设已有测试用例集为T,其中包含m个测试用例,待测程序中包含需要覆盖的n个语句,则测试用例-语句覆盖矩阵是一个mXn的矩阵,表示为:
c丨丨 C12 L Cln
[0026]2' 22 2
LLLL
_Cm\ Cm2 L Cm? _[0027]其中若第i个测试用例覆盖第j个语句,则Cu取值为1,否则Cu取值为0 ;如果语句k与语句u构成的语句交互是可覆盖的,当且仅当存在测试用例q,使得Cqk和Cqu同时取值为 I ;其中 1、j、n、k、u、q、m 均是整数,且 0〈=i〈=m ;0〈=j〈=n ;0〈=k〈=n ;0〈=u〈=n ;0〈=q〈=m。
[0028]本发明涉及回归测试中的测试用例集优化方法。本发明所要解决的问题是传统测试用例集压缩方法虽可以大幅度缩减压缩后的测试用例集规模,但同时也会显著降低原有测试用例集的缺陷检测能力。本发明人经长期研究发现,软件在实际测试时,部分软件缺陷的触发与语句间的交互有关,本发明通过添加少量测试用例来额外满足对语句交互的覆盖并提出一种新颖测试用例集压缩方法,实践结果表明该方法可以有效提高压缩后的测试用例集缺陷检测能力,并且不需要大幅度增加压缩后的测试用例集规模。
[0029]本发明采用如下方法进行测试用例的选择:⑴将被测程序P进行代码插桩;(2)在插桩后的程序上执行原有测试用例集T中的每个测试用例,并记录每个测试用例的语句覆盖信息;(3)生成可覆盖的语句间交互集;(4)执行测试用例集压缩方法以确保对语句间交互的充分覆盖并最终生成压缩后的测试用例集。
[0030]当原有测试用例集规模较大时,为降低回归测试成本,传统方法仅考虑对单个语句的覆盖,但在分析软件的实际测试过程时发现:部分软件内在缺陷的触发与语句间的交互有关,本发明在满足对单个语句覆盖的前提下,通过添加少量测试用例来额外满足对语句交互的覆盖并提出一种测试用例集压缩方法,在C语言编程实现的代码上,运行该方法后发现:本发明可以有效提高压缩后的测试用例集缺陷检测能力,并且不需要大幅度增加压缩后的测试用例集规模。
[0031]相对于现有技术,本发明的优点在于:
[0032]本发明的技术方案用于从待测程序的测试用例集里选取测试用例子集,以进一步提高回归测试的效率,并使选取的测试用例具备足够高的错误检测能力。通过在现有技术的基础上记录每个测试用例的语句覆盖信息,生成可覆盖的语句间交互集,通过选择策略获取测试用例,了解语句交互之间的联系,在回归测试阶段有效降低测试用例数量并保持足够高的错误检测能力。
[0033]本发明通过语句分析对回归测试中的测试用例的数量和错误检测能力这两者进行了充分权衡,以一种全新的、更加动态的方式处理测试用例,通过测试用例所展现出的程序行为的内在联系来理解程序,使得测试用例的选择变得更加容易和自动化,从而可以更有效的使用这些测试用例进行回归测试,在现有技术的基础上进一步提高了测试用例选择的精确度,使发现错误的测试用例在选择出来的测试用例集中所占比例增大,与现有的回归测试技术相比,本发明从原始测试用例集选择出覆盖语句集和语句交互集合的测试用例构成压缩后测试用例集,选择出的测试用例数量减小,同时保持测试用例集本身对待测程序较高的错误检测能力,从而提高了回归测试的效率。
【专利附图】

【附图说明】
[0034]下面结合附图及实施例对本发明作进一步描述:
[0035]图1是基于语句交互覆盖的测试用例集压缩方法的框架图;
[0036]图2是基于语句交互覆盖的测试用例集压缩方法总体流程图;
[0037]图3是基于语句和语句交互覆盖的第一选择策略SI的流程图;[0038]图4是基于语句交互覆盖的第二选择策略S2的流程图。
【具体实施方式】
[0039]为了更详尽的表述上述发明的技术方案,以下本发明人列举出具体的实施例来说明技术效果;需要强调的是,这些实施例是用于说明本发明而不限于限制本发明的范围。
[0040]实施例
[0041]本实施例的基于语句交互覆盖的回归测试用例选择方法的总体流程图如图1所示,包含如下步骤:
[0042](I)将被测程序P进行代码插桩。
[0043](2)在插桩后的程序上执行原有测试用例集T中的每个测试用例,记录每个测试用例的语句覆盖信息并构造出测试用例-语句覆盖矩阵。假设T中包含m个测试用例,P中包含需要覆盖的n个语句,则该矩阵是一个mXn的矩阵且可表示如下:
【权利要求】
1.一种基于语句交互覆盖的回归测试用例选择方法,其特征在于,所述方法包括如下步骤: (1)对待测程序进行插桩,在插桩后的程序上执行用于测试被测程序的已有测试用例集中的每个测试用例,记录每个测试用例的语句覆盖信息并构造出测试用例-语句覆盖矩阵,确定需覆盖的语句集R ; (2)基于测试用例-语句覆盖矩阵生成可覆盖的语句间交互集I; (3)根据可覆盖的语句间交互集1、需覆盖的语句集R和已有测试用例集,按照选择策略执行测试用例集压缩方法,并最终生成压缩后的测试用例集。
2.根据权利要求1所述的方法,其特征在于,所述方法步骤(3)中执行测试用例集压缩方法按照以下步骤进行: 1)构造压缩后的测试用例集,并设置压缩后测试用例集为空集; 2)按照第一选择策略SI从已有测试用例集中选择覆盖语句集R中相应的语句的测试用例,添加到压缩后的测试用例集中,并确定语句间交互集I中已经覆盖的语句交互; 3)按照第二选择策略S2从已有测试用例集中选择覆盖语句间交互集I中尚未覆盖的语句交互的测试用例,添加到压缩后的测试用例集中。
3.根据权利要求2所述的方法,其特征在于,所述方法步骤2)按照第一选择策略SI从已有测试用例集中选择覆盖需覆盖的语句集R中相应的语句的测试用例按照如下步骤进行: Al)计算出需覆盖的语句集R中每个语句的基数,获取需覆盖的语句集R中语句的最小基数;所述基数为测试用例集中覆盖该语句的测试用例数量; A2)从已有测试用例集中选择测试用例子集Tl,使其中的测试用例覆盖拥有最小基数的语句个数最多; A3)如果测试用例子集Tl仅包含一个测试用例,则将该测试用例为被选定的测试用例;如果测试用例子集Tl包含两个或两个以上的测试用例时,从测试用例子集Tl中选择测试用例子集T2,使其中的测试用例覆盖语句间交互集I中语句交互最多; A4)如果测试用例子集T2仅包含一个测试用例, 则该测试用例为被选定的测试用例;如果测试用例子集T2包含两个或两个以上的测试用例时,从测试用例子集T2中随机选择一个测试用例作为被选定的测试用例。
4.根据权利要求2所述的方法,其特征在于,所述方法步骤3)按照第二选择策略S2从已有测试用例集中选择未同时覆盖需覆盖的语句集R中相应的语句和语句间交互集I的语句交互的测试用例按照如下步骤进行: Al)计算出语句间交互集I中每个语句交互的基数,获取需覆盖的语句间交互集I中语句交互的最小基数;所述基数为测试用例集中覆盖该语句交互的测试用例数量; A2)从已有测试用例集中选择测试用例子集Tl’,使其中的测试用例覆盖拥有最小基数的语句交互个数最多; A3)如果测试用例子集Tl’仅包含一个测试用例,则将该测试用例为被选定的测试用例;如果测试用例子集Tl’包含两个或两个以上的测试用例时,从测试用例子集Tl’中随机选择一个测试用例作为被选定的测试用例。
5.根据权利要求2或4所述的方法,其特征在于,所述方法步骤3)中已有测试用例集为原始已有测试用例集中排除已添加到压缩后的测试用例集中测试用例的测试用例集合。
6.根据权利要求1所述的方法,其特征在于,所述方法步骤(1)中假设已有测试用例集为T,其中包含m个测试用例,待测程序中包含需要覆盖的n个语句,则测试用例-语句覆盖矩阵是一个mXn的矩阵,表示为:

【文档编号】G06F11/36GK103617119SQ201310643493
【公开日】2014年3月5日 申请日期:2013年12月3日 优先权日:2013年12月3日
【发明者】陈翔, 田丹, 徐慧, 文万志, 陈继红, 蒋峥峥 申请人:南通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1