专利名称:一种基于层次切片的回归测试用例选择方法
技术领域:
本发明提出了一种基于层次切片的回归测试用例选择方法,主要是利用层次的思想解决面向对象程序中回归测试用例的重用选择问题,属于软件测试中回归测试用例选择 的技术领域。
背景技术:
回归测试是软件维护中最耗费成本的阶段,如何有效重用回归测试用例是一项重 要的研究任务。目前主要的回归测试用例重用技术是测试用例选择和测试用例优先级。测 试用例选择是回归测试用例重用的主要技术,它根据原程序和已有的回归测试用例,分析 需要重新运行的测试用例,然后从中选择部分测试用例来运行修改后的程序。回归测试用 例选择问题主要归结为修改分析和测试覆盖分析。修改分析就是根据程序修改点分析程序 中受修改影响的部分。测试覆盖分析如何利用测试用例对程序修改点及其受影响部分进行 覆盖。回归测试用例选择的主要方法包括线性方程、符号执行、路径分析、控制流、数据流、 程序依赖图、系统依赖图、防火墙、簇识别、程序切片技术等。切片是一项有效的程序分解技术,也是一种重要的回归测试用例选择方法。利用 切片技术对修改点计算切片,可以有效识别出受修改影响的程序部分。早期使用切片技术 进行回归测试用例选择的主要手段是,计算测试用例输入针对程序输出的切片,比如动态 切片、执行切片、相关切片等,如果计算出的切片中包含修改语句,则选择相应的测试用例。 另外一种使用数据流的切片方法是利用数据流分析受修改影响的“定义_使用”关系对,然 后选择该“定义-使用关系”对应的测试用例。由于面向对象程序中存在着多态、动态绑定等很多复杂属性,使得程序修改产生 的影响更加复杂和隐蔽,从而很难有效的进行回归测试用例的选择。切片技术可以有效分 析程序修改产生的影响,但传统切片不能满足面向对象程序的部分需求。而一些面向对象 切片比较复杂,也不精确。因此,需要一种新型的切片手段来支持面向对象程序下的回归测 试用例选择。
发明内容
技术问题本发明的目的是使用层次切片技术支持面向对象程序的回归测试用例 选择。该方法能够根据面向对象程序本身的逻辑层次,从粗粒度到细粒度,逐步求精的选择 出回归测试用例,同时也能够在不同粒度上选择出测试用例,为实际回归测试选择的粒度 问题提供了灵活的选择框架。技术问题本发明为实现上述目的,采用如下技术方案本发明一种基于层次切片的回归测试用例选择方法,包括如下步骤步骤1).版本控制获取需要进行回归测试程序的修改点m ;步骤2).利用层次切片工具JHSA计算修改点m的层次切片集,识别出受程序修改 影响的部分,其切片结果为包级切片集、类级切片集、方法级切片集及语句级切片集;
步骤3).从包级到语句级进行层次回归测试用例选择;a)在包层次上,从待重用测试用例集T中选择出其包覆盖集能够覆盖包级切片集 的测试用例集Tp ;b)在类层次上,从测试用例集Tp中选择出其类覆盖集能够覆盖类级切片集的测试 用例集T。;C)在方法层次上,从测试用例集T。中选择出其方法覆盖集能够覆盖方法级切片集 的测试用例集Tm;d)在语句层次上,从测试用例集Tm中选择出其语句覆盖集能够覆盖语句级切片集 的测试用例集Ts。 有益效果本发明方法提出了一种逐步求精的层次回归测试用例选择方法,通过 利用切片技术在回归测试选择中识别修改影响的作用和层次切片方法在面向对象程序中 的优势,主要用于解决回归测试用例选择的精确性和层次性问题。主要有以下一些优点(1)利用切片技术进行程序修改分析,能够较准确识别出受修改影响的程序部分。 利用切片技术可以有效识别出和修改点相关的程序其他部分。这些部分都有可能使得程序 产生变化或者导致错误。传统的使用程序切片方法只使用了部分数据流技术,并且没有对 修改点进行有效的程序切片。我们的切片技术基于系统依赖图,所以综合考虑了数据流和 控制流。这样可以更大程度的保证选择出的回归测试用例能够覆盖所影响的程序部分。(2)利用层次切片在面向对象程序切片中的优势,提高了回归测试选择的精确性。 层次切片是针对面向对象程序的一种切片技术,和传统切片相比,它能够根据程序逻辑分 层结构,逐步求精的计算出切片。尤其是在具有多态性和动态绑定等复杂的程序中,利用层 次切片可以在高层次准确的识别与切片准则有关的部分并且删除了与切片准则无关的程 序部分。这样就保证了回归测试选择的精确性,减少了多余测试用例的选择,从而降低了回 归测试成本。(3)利用层次切片的层次性提供了可选的回归测试选择粒度。修改分析和测试覆 盖需要在同一粒度上进行。测试用例的性质、程序修改点位置以及程序本身特点都在很大 程度上影响了回归测试选择。在实际测试中,根据成本分析等现实情况,我们可能需要在相 对较粗的粒度上进行回归测试选择。我们的方法可以从包层次到语句层次进行回归测试选 择,为实际测试提供了灵活的选择框架。
图1是本发明所使用的针对Java程序的层次切片模型的抽象图。图2是本法明所实现的层次切片工具总体架构图。图3是本发明所采用的一般回归测试用例选择的过程示意图。这种选择过程分为 测试覆盖分析部分和修改分析两部分,使得选择出的测试用例能够反映程序修改及其影响。图4是本发明的体系结构。表示本发明方法包括的主要的组件示例。图5是本发明的流程图。表示本发明方法的流程示意。
具体实施例方式下面结合附图对发明的技术方案进行详细说明
层次切片是一种针对面向对象程序的切片方法,它根据面向对象程序特点,按照 逻辑层次逐步求精地计算出各个层次的切片。比如在Java程序中,利用层次切片可以从包 级到语句级得到各个层次的切片,最后也逐步求精的计算出了细粒度语句级切片。本发明利用切片技术在程序分解中的作用以及层次切片技术在面向对象程序中 的优势,并且结合回归测试用例选择的特点,将层次切片技术应用其中,强调回归测试用例 选择的精确性和层次性。图3给出了我们所采用的回归测试选择的一般过程示意图。这里的回归测试选择主要有两部分组成修改分析和测试覆盖分析。修改分析是根据修改点分析程序中受修改 影响的部分。在程序修改信息不知的情况下,通常将原程序和修改后的程序比较,利用语 法、语义或控制流等进行差异分析。在本发明中,程序修改信息作为已知条件,在实际软件 维护中,修改信息也是可以通过版本控制等手段获知的。测试覆盖分析考虑如何对修程序 改点及其受影响部分进行覆盖。如果我们识别出的程序修改信息是语句,那么就要对相应 的语句进行覆盖分析,才能得到需要重新运行的测试用例。除了语句,修改分析也可以得到 受影响的方法体或者类等更高层次实体,那么就需要对测试用例在同一层次上进行覆盖分 析。这样就产生了回归测试选择层次问题。一、体系结构图4给出了层次回归测试选择设计体系结构。下面给出几个主要部分的具体说 明。1层次切片器我们开发的层次切片及应用工具是JHSA。该工具主要是根据层次切片模型开发。 层次切片模型是从程序逻辑分层的角度抽象出面向对象程序(比如Java)的层次结构,并 进一步获得层次切片模型,然后在层次切片模型的基础上采用基于依赖图的图可达性算法 来计算面向对象程序的切片。图1是我们采用的一种针对Java程序的层次切片模型的抽象图。该层次切片模型主要是由三部分组成层次切片准则、层次依赖图和可达性算法。 层次切片准则从包级到语句级分别是包级切片准则,类级切片准则,方法级切片准则以及 语句级切片准则。层次依赖图包括包层次依赖图PLDG(package level dependencegraph), 类层次依赖图 CLDG (class level dependence graph),方法层次依赖图 MLDG (method level dependence graph)及 i吾句层次{衣赖图 SLDG (statement level dependencegraph)。 包级依赖图主要包含引用关系和成员关系;类级依赖图主要包含继承关系,实现关系, 成员关系以及交互关系;方法级依赖图主要包含调用关系,参数传递(parameter-in和 parameter-out)关系以及summary关系;语句级依赖图包含数据依赖关系和控制依赖关 系。图可达性算法是基于依赖图的传统算法。我们将包级切片、类级切片、方法级切片以 及语句级切片表示为 PLS(package level slice),CLS(class level slice),MLS(method levelslice)禾口 SLS(statement level slice)。图2是我们开发的Java层次切片工具及应用JHSA的总体框架图。下面是各个部 分的简单介绍(1)代码部分工具的输入对象,是一个Java工程文件,或者Java程序代码。(2)代码转换部分负责代码的转换,将源代码程序转换成一种常用的中间表 示——抽象语法树(AST)。
(3)层次依赖图构造部分负责各种依赖图的建立,从包层次到语句层次的依赖 图建立主要是在AST基础之上构造的,这部分也是工具的核心部分,一旦各种层次依赖图 建立起来,后面的程序切片部分,或者应用部分都可以有效地在依赖图上进行以完成相应 的任务。(4)层次切片部分层次切片,给定切片标准,就可以在依赖图中计算对应于某个 切片标准的切片结果。
(5)图部分这部分是各种层次依赖图的输出,这样用户对程序中的各个实体之 间的依赖关系一目了然,减轻了理解源代码的负担。(6)回归测试应用部分我们将层次切片应用到回归测试中。2测试用例覆盖器很多测试工具都具备计算测试用例覆盖的功能。在本发明中,我们采用的是测试 用例的层次覆盖。所谓层次覆盖,就是将测试用例和其相关的程序实体层次的覆盖对应起 来,在这里就是指从包层到语句层的测试用例覆盖,即包层次覆盖、类层次覆盖、方法层次 覆盖以及语句层次覆盖。测试用例覆盖器产生各个层次的集合,得到包的集合、类的集合、 方法的集合以及语句的集合。3回归测试用例选择器选择器主要执行简单的查找功能,将测试用例的层次覆盖和需要覆盖的对象对应 起来,从而选择出不同层次的回归测试用例集。二、方法流程本方法计算程序修改点m的层次切片集,然后再在不同的层次上计算测试用例的 层次覆盖集和修改点层次切片集的交集,如果该交集不为空,则选择该测试用例。具体的基 于层次切片的回归测试用例选择步骤如下(1)获取软件维护中当前版本程序的修改信息,该信息一般是可知的。(2)利用层次切片工具从包层到语句层逐步求精的选择出回归测试用例。1)在包层次上,我们确定了与包含η和ν有关的包,删除了与包含η和ν的包无关 系的包,得到包层次切片集PLS(m),然后获取待重用测试用例集T的包层次覆盖集PLC(T), 若PLS(m)和PLC (T)的交集Set (ρ)不为空,则在测试用例池中选择和这些包相关的测试用 例Τρ,并且满足Tp2)在类层次上,首先计算修改语句的类层次切片集CLS(m)和获取测试用例集Tp 的类层次覆盖集CLC(Tp),接着计算CLC (Tp)和CLS(m)的交集Set (c),如果该交集不为空, 我们就选择与该类相对应的测试用例T。,从而得到类层次的回归测试用例选择集T。,并且 满足Tp] Tc3)在方法层次上,首先计算修改语句的方法层次切片集MLS(m)和获取测试用例 集T。的方法层次覆盖集MLC(Te),接着计算MLC(Te)和MLS(m)的交集,如果交集Set (m)不 为空,我们就选择与该方法层相对应的测试用例Tm,从而得到方法层的回归测试用例选择 集Tm,并且满足Tgrp=Te3 Tm4)在语句层次上,首先计算修改语句的语句层次切片集SLS(m)和获取测试用例 集Tm的语句层次覆盖集SLC(Tm),接着计算SLC(Tm)和SLS (m)的交集,如果交集Set (s)不 为空,我们就选择与该语句相对应的测试用例Ts,从而得到语句层的回归测试用例选择集Ts,并且满足T7= Tp^ Tc^ Tm] Ts这样,我们通过计算修改点的层次切片,测试用例的层次覆盖,利用层次覆盖集和层次切片集的交集,选择相关的测试用例,从而从包层次到语句层次,逐步求精地选择出了 回归测试用例。实施例为了方便描述,我们假定有如下简化的应用实例假定程序P 中有包 P1、P2,类 C1、C2、C3、C4、C5、C6,方法 M1、M2、M3、M4、M5、M6、M7、 M8,语句为S1-S100,测试用例集T包含tl-t8共八个测试用例,我们的修改点是语句s5。根据我们前面提到的基于层次切片的回归测试用例选择方法,假设第一步获取 tl-t8的包层次覆盖PLC (T),结果如下 假设计算关于修改语句S5的包层次切片PLS (m),结果为{P1}然后计算PLC (T)和 PLS (m)的交集 Set (ρ),Set (ρ) = PLC (T) Π PLS (m),结果为 于是在包层次,我们选择的测试用例集Tp = {tlt2t3t4t5t6}。第二步,获取Tp的类层次覆盖CLC(Tp),假设结果如下 假设计算修改语句S5的类层次切片CLS (m),结果为{Cl,C2,C3}然后计算CLC (Tp)和 CLS (m)的交集 Set (c),Set (c) = CLC (Tp) Π CLS (m),结果为 于是在类层次,我们选择的测试用例集T。= {tlt2t3t4t5}。第三步,获取T。的方法层次覆盖MLC(Te),假设结果如下
假设计算修改语句S5的方法层次切片MLS (m),结果为{M1,M2,M3}然后计算 MLC (tc)和 MLS (m)的交集 Set (m),Set (m) = MLC (Tc) Π MLS (m),结果为 于是在方法层次上,我们选择的测试用例集Tm = {tlt2t3t4}第四步,获取Tm的语句层次覆盖SLC(Tm),假设结果如下 假设计算修改语句S5的语句层次切片SLS (m),结果为{S8-S16}。然后计算SLC (Tm)和 SLS (m)的交集 Set (s),Set (s) = SLC (Tm) Π SLS (m),结果为 于是在语句层次上,选择的测试用例集Ts = {tlt3t4}这样通过层次切片从包层到语句层逐步求精的计算出了需要选择的测试用例Ts。
权利要求
一种基于层次切片的回归测试用例选择方法,其特征在于包括如下步骤步骤1).版本控制获取需要进行回归测试程序的修改点m;步骤2).利用层次切片工具JHSA计算修改点m的层次切片集,识别出受程序修改影响的部分,其切片结果为包级切片集、类级切片集、方法级切片集及语句级切片集;步骤3).从包级到语句级进行层次回归测试用例选择;a)在包层次上,从待重用测试用例集T中选择出其包覆盖集能够覆盖包级切片集的测试用例集Tp;b)在类层次上,从测试用例集Tp中选择出其类覆盖集能够覆盖类级切片集的测试用例集Tc;c)在方法层次上,从测试用例集Tc中选择出其方法覆盖集能够覆盖方法级切片集的测试用例集Tm;d)在语句层次上,从测试用例集Tm中选择出其语句覆盖集能够覆盖语句级切片集的测试用例集Ts。
全文摘要
本发明公布了一种基于层次切片的回归测试用例选择方法,利用切片技术在程序分解中的作用以及层次切片技术在面向对象程序中的优势,并且结合回归测试用例选择的特点,将层次切片技术应用其中。从版本修改信息中抽取层次切片准则。在包层次上,获取原测试用例的包层次覆盖,选择出能够覆盖包层次切片集的测试用例;在类层次上,获取包级测试用例的类层次覆盖,在包级测试用例中选择出能够覆盖类层次切片集的测试用例;在方法层次上,获取类级测试用例的方法层次覆盖,在类级测试用例中选择出能够覆盖方法层次切片集的测试用例;在语句层次上,获取方法级测试用例的语句层次覆盖,在方法级测试用例中选择出能够覆盖语句层次切片集的测试用例。
文档编号G06F11/36GK101859276SQ20101017378
公开日2010年10月13日 申请日期2010年5月14日 优先权日2010年5月14日
发明者周颖, 孙小兵, 文万志, 李必信, 陶传奇 申请人:东南大学