CN102915271A - 基于控制流图的单元回归测试用例集合优化方法 - Google Patents

基于控制流图的单元回归测试用例集合优化方法 Download PDF

Info

Publication number
CN102915271A
CN102915271A CN2012104266289A CN201210426628A CN102915271A CN 102915271 A CN102915271 A CN 102915271A CN 2012104266289 A CN2012104266289 A CN 2012104266289A CN 201210426628 A CN201210426628 A CN 201210426628A CN 102915271 A CN102915271 A CN 102915271A
Authority
CN
China
Prior art keywords
node
test case
control flow
flow graph
test
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2012104266289A
Other languages
English (en)
Inventor
宫云战
王雅文
黄俊飞
金大海
蔡敏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing University of Posts and Telecommunications
Original Assignee
Beijing University of Posts and Telecommunications
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing University of Posts and Telecommunications filed Critical Beijing University of Posts and Telecommunications
Priority to CN2012104266289A priority Critical patent/CN102915271A/zh
Publication of CN102915271A publication Critical patent/CN102915271A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于控制流图的单元回归测试用例集合优化方法,包括:A、在被测单元修改前后的控制流图中找出被修改部分对应的修改点;B、筛选出执行路径经过修改点的测试用例,作为回归测试用例集合的一部分即选择测试用例集T selected ,运行集合中的所有测试用例;C、计算修改点的所有可达后继节点,选出步骤B运行过程中未被覆盖的节点子集N;D、若N为空,执行步骤F,否则执行步骤E;E、从N中取出一个节点作为覆盖目标生成测试用例,将其加入新增测试用例集合T new 并运行完毕,更新N,删除在此次运行中已被覆盖的节点,返回步骤D;F、回归测试用例集合TR构造完毕。应用本发明,能够提高回归测试的效率,并保证回归测试的有效性与充分性。

Description

基于控制流图的单元回归测试用例集合优化方法
技术领域
本发明涉及软件测试技术,尤其涉及一种基于控制流图的单元回归测试用例集合优化方法,属于控制流图对比技术在回归测试中的应用。
背景技术
当开发人员在单元测试过程中发现软件故障时,会对代码进行相应的修改。被测单元在改动之后,需要重新测试以保证所做的修改达到了预期的目的,并且没有引入新的缺陷,这个过程叫做回归测试。回归测试作为单元测试周期中的一个组成部分,在整个测试过程中占有很大比重,其成本甚至达到了整个测试成本的一半以上。因此,通过选择正确的回归测试策略来改进回归测试的有效性和效率是非常有意义的。
提高回归测试效率的重心是构造精简而有效的测试用例集合。如果简单地重测所有用例将会带来大量不必要的开销;而部分测试用例又会因为软件不断更新而失效。因此,回归测试只需要根据修改情况进行有选择性的测试,并根据测试目标考虑补充新的测试用例。
现有的回归测试策略主要分为三类:对基线测试用例库的约简,测试用例优先级技术以及测试用例的选择性复用。其中,测试用例库约简技术是通过删除所有冗余测试用例得到测试用例集合的最小约简子集。而测试用例优先级技术是根据测试用例对测试目标的贡献程度进行比较和排序,优先执行相对重要的测试用例。虽然测试用例库约简技术和测试用例优先级技术的测试效率较高,但是由于缺乏选择的针对性,其发现程序错误的能力相比于原有测试用例集可能会有很大的损失,即这种通过减少测试用例来节省测试精力的策略,在降低成本的同时也增加了测试风险。所述的测试用例的选择性复用是围绕某种准则从基线测试用例库中选择测试用例,目前最常见的选择准则是程序修改点与测试用例的相关性。这种方法能够保证选择出的测试用例精度高、针对性强,在测试过程中使用这样的测试用例集合可以同时保证回归测试的高效性与有效性。
发明内容
有鉴于此,本发明的主要目的在于提供一种基于控制流图的单元回归测试用例集合优化方法,根据代码中被修改部分筛选和新增测试用例,从而构造出回归测试用例集合,以提高回归测试的效率,并保证回归测试的有效性与充分性。
为达到上述目的,本发明的技术方案是这样实现的:
基于控制流图的单元回归测试用例集合优化方法,该方法包括:
A、对比被测单元修改前后的控制流图,找出代码中被修改的部分所对应的节点,所述节点简称修改点;
B、从单元测试用例集合中筛选出执行路径经过修改点的测试用例,作为回归测试用例集合的一部分,记作选择测试用例集T selected ,并运行集合中的所有测试用例 ;
C、计算修改点的所有可达后继节点,从中选出在步骤B的运行过程中未被覆盖的节点子集N
D、若节点子集N为空,则执行步骤F,否则执行步骤E;
E、从节点子集N中取出一个节点作为覆盖目标生成测试用例,将其加入到新增测试用例集合T new 并运行;待运行完毕后,更新节点子集N,从中删除在此次运行中已被覆盖的节点,然后执行步骤D;
F、回归测试用例集合TR构造完毕,T R  = T selected  ∪ T new
其中,所述步骤A中根据对比控制流图的方法找出修改点的具体过程为:
A1、在代码被修改前,将其对应的控制流图备份,记为CFG1;代码被修改后,对被测单元重新进行静态分析,生成控制流图,记为CFG2;控制流图的节点包含对应的抽象语法树信息;
A2、使用深度优先搜索算法同时遍历控制流图CFG1和CFG2;在遍历过程中成对地对比当前遍历到的控制流图节点;若其包含的抽象语法树信息不同,则把它当作修改点,加入到修改点集合当中。
其中,步骤A2中使用深度优先搜索算法同时遍历控制流图CFG1和CFG2,对比当前节点对的抽象语法树信息;同时还考虑节点的增加和删减情况,并作了相应处理;其具体过程如下:
A21、根据控制流图产生时的节点序号顺序,分别取CFG1和CFG2的未访问过的后继节点作为当前节点对,并取当前节点对中CFG2的节点作为当前节点;
A22、若当前节点对为空,当父节点是函数入口节点时,遍历结束,否则回退到当前节点对的父节点,执行步骤A21;
A23、若当前节点对中的两个节点都不为空,则比较当前节点对中每个节点包含的抽象语法树信息,即对应的表达式中的常量、变量、运算符信息,若这些信息都相同则执行步骤A21;若不同,则执行步骤A24;
A24、将当前节点作为修改点,加入到修改点集合当中;如果当前节点对中CFG1的节点为空,CFG2的节点不为空,则说明CFG2的节点是修改后新增的,此时将CFG2非空节点的父节点作为修改点,加入到修改点集合当中;如果CFG1的节点不为空而CFG2的节点为空,则说明CFG1中对应的代码已被删除,把CFG1中被删除的节点作为修改点,加入到修改点集合中。
步骤B中在单元测试过程中使用的测试用例,均以控制流图节点标号的形式将执行路径记录于数据库中;遍历测试用例数据库中的每个测试用例,若其执行路径的标号序列中包含了修改点集合中任一修改点的标号,则被选择为回归测试用例,加入到选择测试用例集T selected 并执行。
步骤C中,从覆盖率角度考虑为回归测试添加新的测试用例;具体为:首先,计算出修改点在控制流图中的所有可达后继节点;然后,从此节点集合中选出在步骤B的运行过程中没有被覆盖到的节点,作为需要在回归测试中被覆盖的目标节点集合N
步骤E中,以节点集合N中的节点为覆盖目标,进行区间运算,生成满足覆盖条件的测试用例,并运行。同时,更新节点集合N,从中删除在本次运行过程中已覆盖到的节点。
步骤F中,该回归测试用例集合T R 由两部分构成:选择测试用例集T selected 和新增测试用例集合T new
即:T R  = T selected  ∪ T new
本发明所提供的基于控制流图的单元回归测试用例集合优化方法,具有以下优点:
应用该单元回归测试用例集合优化方法进行回归测试,其关键在于提高测试用例选择精度和测试可信度,本发明方法在基于控制流图遍历的回归测试用例选择算法和基于覆盖要求的测试方法的基础上,加以改进和综合,能够达到以下的目标:以更少的测试用例提高回归测试的效率;以筛选相关测试用例和补充新测试用例的方式提高回归测试的有效性。
附图说明
图1为本发明的回归测试用例集合组成图;
图2为本发明的单元回归测试用例集优化策略的应用流程示意图;
图3为本发明源程序Test1.java中函数f的初始控制流图;
图4为本发明中控制流图对比过程中CFG1的后继节点为空而CFG2的后继节点不为空的控制流图对比图;
图5为本发明中控制流图对比过程中CFG1的后继节点不为空而CFG2的后继节点为空的控制流图对比图。
具体实施方式
下面结合附图及本发明的实施例对本发明的方法作进一步详细的说明。
本发明的基本思想是:利用回归测试的第三种策略,即根据程序修改情况对基线测试用例库中的测试用例进行选择性复用,考虑到运行原有测试用例可能无法满足新代码的测试需求,导致回归测试不够充分,因此有必要向回归测试用例集合中补充新的测试用例。这样,通过程序控制流图对比技术识别出程序中的修改点,根据执行路径经过修改点的测试用例在再次运行时结果可能发生改变的原理对这类测试用例选择性复用,并且按照覆盖需求补充新的测试用例;即回归测试用例集合包括两部分:复用测试用例和新增测试用例。
在开发人员对原程序改动较少的情况下,没有必要将所有单元测试的测试用例进行回归测试。此时,应进行选择性回归测试(selective regression test),即从原测试用例集合中找出部分测试用例来测试。当这些测试用例对于修改后的代码来说,测试并不够充分的情况下,再生成新的测试用例进行测试。因此,回归测试的重点在于测试用例的选择与生成。
本发明方法中,优化回归测试用例集合的策略,尽力保证集合中的每个元素都与修改相关。因此,本发明的研究内容主要为以下两点:
分析回归测试需要哪些测试用例;
如何筛选或生成这些测试用例。
第一点,即讨论回归测试中测试用例集合的组成。由于回归测试的测试目标主要包含两方面,即:所做的修改达到了预期的目的;软件的修改没有引入新的缺陷。
为了保证第一个条件成立,需要将与该修改处相关且在单元测试中执行失败的测试用例重新运行,以验证修改后这些测试用例可以通过;同时,为了保证对修改处的测试足够充分,可能需要新增一部分与之相关的测试用例。而为了保证第二个条件成立,则需要将与该修改处相关且在单元测试中执行成功的测试用例再重新运行一次,以验证这些本来已经通过的测试用例在回归测试中依然通过。因此,回归测试用例集合TR可以表示为:
T R  = T fail  ∪ T new  ∪ T pass  = Tselected ∪ Tnew
其中:T fail 表示与该修改处相关且在单元测试环节中执行失败的测试用例集合,T new 表示需要为修改处新增的测试用例集合,Tpass表示与该修改处相关且在单元测试环节中执行成功的测试用例集合。Tfail和Tpass组合成为选择测试用例集合Tselected。图1为本发明的回归测试用例集合组成图。
在研究分析出回归测试用例集合的组成后,需要讨论如何筛选或者生成符合条件的测试用例。由于回归测试中测试用例集合主要由两部分组成:选择测试用例集合Tselected和为修改处新增的测试用例集合Tnew。所述“选择测试用例集合”Tselected即在代码被修改之后,执行结果可能会受到影响的测试用例。显而易见,若一个测试用例在执行过程中,其执行路径经过被修改的语句或判定条件,那么它的执行结果受之影响的可能性非常大。所以,将执行路径经过修改点的测试用例等价为“与修改处相关的测试用例”。另外,这些测试用例不仅是执行结果可能会受影响,其执行路径也有可能会发生改变,如某个判定条件的修改。为了保证对修改后的功能进行了充分的测试,有必要新增一些测试用例,将与被修改点相关的所有语句按覆盖率要求(包括语句、分支、MCDC)至少执行一次。这里,将被修改点的相关节点定义为被修改点的后继语句(或表达式),并且修改点到这些相关节点都是可达的。
以下结合附图,对本发明提出的测试用例集合优化策略在软件回归测试实施例中的应用进行解释和说明。
图2为本发明单元回归测试用例集优化策略的应用流程示意图。如图2所示,该方法主要包括:
步骤A、对比被测单元修改前后的控制流图,找出代码中被修改部分所对应的节点,该节点简称为修改点。
若要找到被修改语句,就要比较被修改前后的代码。本发明采用基于控制流图的比较方法。这里所使用的控制流图不仅包含程序控制结构的信息,同时也将每个节点对应的语句(或表达式)信息一一记录下来。
在对两个控制流图进行比较时,使用深度优先搜索算法进行遍历并采用节点“成对比较”的方式,即分别从两个控制流图的入口节点开始遍历,并成对比较其对应的抽象语法树信息是否相同(变量、常量、运算符)。当抽象语法树信息不同的节点时,将其加入到修改点集合中。该方法具体包括如下步骤:
A1、备份代码修改前的控制流图CFG1,并生成代码修改后的控制流图CFG2。
被测单元在单元测试过程中,通过静态分析获得了对应的抽象语法树。由抽象语法树,进一步获得对应的控制流图。因此,控制流图的节点包含了代码对应的表达式信息。为避免在代码修改后由于重新进行静态分析,而导致原控制流图丢失,需要将代码修改前的控制流图进行备份,记为CFG1。
当确认代码修改完成时,系统对新代码重新进行静态分析,得到新的控制流图,记为CFG2。此时,被测单元一共有两个控制流图,一个是单元测试时的控制流图CFG1,另一个是开发人员对代码进行修改后的控制流图CFG2。这两个控制流图完整的保存了代码修改前后的程序结构与代码信息。
A2、使用深度优先搜索算法同时遍历控制流图CFG1和CFG2。在遍历的过程中成对地对比当前遍历到的控制流图节点;若其包含的抽象语法树信息不同,则把它当作修改点,加入到修改点集合当中。同时考虑了节点的增加和删减情况,并作了相应处理。其具体步骤如下:
A21、根据控制流图产生时的节点序号顺序,分别取CFG1和CFG2的未访问过的后继节点作为当前节点对,并取当前节点对中CFG2的节点作为当前节点 。
A22、若当前节点对为空,当父节点是函数入口节点时,遍历结束,否则回退到当前节点对的父节点,执行步骤A21;
A23、若当前节点对中的两个节点都不为空,则比较当前节点对中每个节点包含的抽象语法树信息,即对应的表达式中的常量、变量、运算符信息,若这些信息都相同则执行步骤A21;若不同,则当前节点为修改点,加入到修改点集合当中。如果当前节点对中CFG1的节点为空,CFG2的节点不为空,则说明CFG2的节点是修改后新增的,将CFG2非空节点的父节点作为修改点,加入到修改点集合当中。如果CFG1的节点不为空而CFG2的节点为空,则说明CFG1中对应的代码已被删除,把CFG1中被删除的节点作为修改点,加入到修改点集合当中。
下面本发明结合具体实例对本发明做进一步说明。
对于下面的源程序test.c中的函数f,在被修改前建立的初始控制流图如附图3,图中的节点与源程序中行号的对应关系如表1所示,其中节点名字的最后一个数字标识了产生的顺序号,边上标识的最后一个数字标识了该边产生的顺序号,以“T”开头表示为条件表达式的真分支,以“F”开头则表示为假分支。函数f的单元测试用例库如表2所示,其中包含了每个测试用例的执行路径信息(注:路径节点不包含终结符节点,如if_out、func_out)。
/**
* 一元二次方程test.c
 */
1:  #include <stdio.h>
2 :   int f(int a, int b, int c) {
3:                 int mid = b*b-4*a*c;
4:                 if(mid>0)
5:                   printf("two real roots\n");
6:               elseif(mid==-3)
7:                    printf("one real root\n");
8:              else
9:                    printf("two complex roots\n");
10 :        return mid ;
11:   }
Figure 2012104266289100002DEST_PATH_IMAGE001
假设下面的程序test2.c是对test.c的函数f修改后的一个版本。可以看出test2.c中修改了第六行的判定条件。
/**
* 一元二次方程test2.c
 */
1:  #include <stdio.h>
2 :   int f(int a, int b, int c) {
3:                 int mid = b*b-4*a*c;
4:                 if(mid>0)
5:                   printf("two real roots\n");
6:               elseif(mid ==0)
7:                    printf("one real root\n");
8:              else
9:                    printf("two complex roots\n");
10 :        return mid ;
11:   }
根据回归测试用例集优化策略中的应用流程,首先需要备份修改前的控制流图CFG1并生成新的控制流图CFG2。由于程序结构没有发生改变,test2.c程序中函数f的控制流图和源程序的对应关系不变,仍然如表1所示。从CFG1和CFG2的入口节点func_head_f_0进入,开始进行控制流图的对比。当前节点对为decl_stmt_1节点对,分别对比CFG1和CFG2的decl_stmt_1中包含的常量、变量和运算符信息,对比结果完全一致。则取decl_stmt_1的后继结点if_head_2进行成对比较,结果仍然相同。继续比较后继结点对,直到func_out_f_8时,仍然没有发现修改点。func_out_f_8没有后继节点,于是回退,直到找到if_head_2有未被访问的后继结点if_head_4。对比CFG1和CFG2的if_head_4,变量与运算符信息都没有发现改变,但是常量由原来的“-3”变为了现在的“0”,发现修改点,遍历结束。整个遍历过程其实是一次图形的深度优先遍历,修改点是if_head_4。
将test.c修改为test2.c是最简单的修改方式,即对语句中的常量、变量和操作符的修改,这种修改的特点是程序结构没有发生改变,原控制流图和新代码的控制流图中的节点是一一对应的。除此之外,对代码的修改还有新增和删除的操作。当在遍历过程中,两份控制流图中的节点不再一一对应时,可知发生了新增或删除的操作。主要分为两种情况来分析:
1)当遍历至节点x时,CFG1中x的后继节点为空,而CFG2中x的后继结点非空。这说明新增了节点。例如,当原程序增加了一个分支。其控制流图对比图如图4所示。当遍历完x的真分支时,发现CFG1中x没有假分支的后继节点,而CFG2中却有后继结点。则把此后继节点的父节点,即分支节点x作为修改点。
2)当遍历至节点x时,CFG1中x的后继节点不为空,而CFG2中x的后继结点为空。这说明删除了节点。例如,从原程序中删除一个分支,其控制流图对比图如图5所示。当遍历至x时,发现CFG1中x有后继节点,而CFG2中却没有后继结点。则把CFG1中x的后继节点作为修改点。 
这里举得例子是对分支节点的增删,但本发明并不局限于此。
步骤B、从单元测试用例集合中筛选出执行路径经过修改点的测试用例,作为回归测试用例集合的一部分,记作选择测试用例集T selected ,并运行集合中的所有测试用例 ;
对于每个程序的控制流图及其测试用例t,都有一个唯一的执行轨迹与之对应,这种对应关系可以通过将执行轨迹中的语句用控制流图中的节点或节点标号来获得。一旦程序分析出哪个节点被修改,就可以遍历测试用例库中每个测试用例的执行路径,找出哪些路径经过此节点的测试用例,即前文描述的“与修改处相关的测试用例集合”,也就是选择测试用例子集T selected
以test2.c中的函数f为例,经过控制流图对比的方法检测出修改点是第六行对应的节点if_head_4,它的节点标号是4。遍历函数f的单元测试用例库,测试用例库中一共有3个测试用例,第一个测试用例的执行路径是【0,1,2,3】,第二个测试用例的执行路径是【0,1,2,4,5】,第三个测试用例的执行路径是【0,1,2,4,6】。经过标号为4的节点有第二个测试用例和第三个测试用例。因此,将这两个测试用例加入函数f的T selected
重新为T selected 中的测试用例生成驱动文件并执行,三号测试用例的执行路径不变,仍然为【0,1,2,4,6】;而二号测试用例的执行路径发生改变,为【0,1,2,4,6】,如表3所示。
步骤C、计算修改点的所有可达后继节点,从中选出在步骤B的运行过程中未被覆盖的节点子集,记作N;
计算出修改后的控制流图中修改点的所有后继结点,并计算从修改点到这些后继节点的可达性,剔除不可达的节点。其中,可达性是根据区间运算计算出的。
以test2.c中的函数f为例。它的修改点是if_head_4,可达后继节点是stmt_5和stmt_6。
步骤D、若节点集合N为空,则执行步骤F,否则执行步骤E  ;
步骤E、从N中取出一个节点作为覆盖目标生成测试用例,将其加入到新增测试用例集合T new 并运行。运行完毕后,更新节点集合N,从中删除在此次运行中已被覆盖的节点,之后执行步骤D。
以test2.c中的函数f为例。它的修改点是if_head_4,可达后继节点是stmt_5和stmt_6。以语句覆盖为覆盖准则,在重新执行T selected 中的两个测试用例时,stmt_6被覆盖,而stmt_5没有被覆盖。则以stmt_5为覆盖目标,进行约束求解,生成测试用例【a = 1, b = 2, c = 1】,加入TNew。执行这个测试用例,stmt_5被覆盖。至此,回归测试用例集构造过程结束。
步骤F、回归测试用例集合T R 构造完毕,T R  = T selected  ∪ T new
仍然以test2.c中的函数f为例。它的与修改相关的测试用例集合包括了单元测试用例集合中的二号和三号测试用例,还有为stmt_5生成的测试用例【a = 1, b = 2, c = 1】,编号为4。因此,test2.c程序中函数f的回归测试用例集合及预期结果见表4。
Figure 2012104266289100002DEST_PATH_IMAGE003
附:【实验数据】
为了检验本发明方法的应用效果,使用十个数值型的C语言函数进行回归测试,其中有7个是逻辑结构较为简单的小型函数,其余3个代码量稍大,逻辑较为复杂。为了减少统计结果的偶然性,基本上所有修改点都选在程序中间位置;修改包括了对表达式中的常量、变量、运算符以及goto语句中的标号进行修改,修改情况比较全面;统计内容除了代码信息和修改情况,还包括以下参数: 
【统计表的参数说明】
N o : 原测试用例个数;
N S : 筛选测试用例个数;
N N : 新增测试用例个数;
N R : 回归测试用例总数;
R S : 筛选比例。
其统计结果如表5所示。
Figure 755561DEST_PATH_IMAGE004
对表5中的数据进行分析,可以得出如下结果:
由于受代码量的大小、程序逻辑结构的复杂度以及故障修改点的位置的影响,衡量指标RS(筛选比例)的结果差异较大。平均来说,筛选出的测试用例个数占单元测试用例总数的25%。由此可见,本发明提出的回归测试策略可以过滤掉约3/4的不必要的测试用例,从很大程度上减少回归测试的工作量。
另外,从新增测试用例角度分析,对于代码量小、程序逻辑简单的被测单元,修改点影响的范围有限,从基线测试用例库中筛选出的测试用例已经可以进行较为充分的回归测试,几乎不需要补充新的测试用例。而对于较为大型的被测单元,修改点的影响范围较大,测试用例的数据流可能都会因修改点而发生较大改变,需要补充新的测试用例,甚至新测试用例在回归测试中占了较大的比重。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

Claims (7)

1.基于控制流图的单元回归测试用例集合优化方法,其特征在于,该方法包括:
A、对比被测单元修改前后的控制流图,找出代码中被修改的部分对应的节点,即修改点;
B、从单元测试用例集合中筛选出执行路径经过修改点的测试用例,作为回归测试用例集合的一部分,记作选择测试用例集T selected ,并运行集合中的所有测试用例 ;
C、计算修改点的所有可达后继节点,从中选出在步骤B的运行过程中未被覆盖的节点子集N
D、若节点子集N为空,则执行步骤F,否则执行步骤E;
E、从节点子集N中取出一个节点作为覆盖目标生成测试用例,将其加入到新增测试用例集合T new 并运行;待运行完毕后,更新节点子集N,从中删除在此次运行中已被覆盖的节点,返回步骤D;
F、回归测试用例集合TR构造完毕,T R  = T selected  ∪ T new
2.根据权利要求1所述的基于控制流图的单元回归测试用例集合优化方法,其特征在于,所述步骤A中根据对比控制流图的方法找出修改点的具体过程为:
A1、在代码被修改前,将其对应的控制流图备份,记为CFG1;代码被修改后,对被测单元重新进行静态分析,生成控制流图,记为CFG2;控制流图的节点包含对应的抽象语法树信息;
A2、使用深度优先搜索算法同时遍历控制流图CFG1和CFG2;在遍历过程中成对地对比当前遍历到的控制流图节点;若其包含的抽象语法树信息不同,则把它当作修改点,加入到修改点集合当中。
3.根据权利要求2所述基于控制流图的单元回归测试用例集合优化方法,其特征在于,步骤A2中使用深度优先搜索算法同时遍历控制流图CFG1和CFG2,对比当前节点对的抽象语法树信息;同时还考虑节点的增加和删减情况,并作了相应处理;其具体过程如下:
A21、根据控制流图产生时的节点序号顺序,分别取CFG1和CFG2的未访问过的后继节点作为当前节点对,并取当前节点对中CFG2的节点作为当前节点;
A22、若当前节点对为空,当父节点是函数入口节点时,遍历结束,否则回退到当前节点对的父节点,执行步骤A21;
A23、若当前节点对中的两个节点都不为空,则比较当前节点对中每个节点包含的抽象语法树信息,即对应的表达式中的常量、变量、运算符信息,若这些信息都相同则执行步骤A21;若不同,则执行步骤A24;
A24、将当前节点作为修改点,加入到修改点集合当中;如果当前节点对中CFG1的节点为空,CFG2的节点不为空,则说明CFG2的节点是修改后新增的,此时将CFG2非空节点的父节点作为修改点,加入到修改点集合当中;如果CFG1的节点不为空而CFG2的节点为空,则说明CFG1中对应的代码已被删除,把CFG1中被删除的节点作为修改点,加入到修改点集合中。
4.根据权利要求1所述的基于控制流图的单元回归测试用例集合优化方法,其特征在于,步骤B中在单元测试过程中使用的测试用例,均以控制流图节点标号的形式将执行路径记录于数据库中;遍历测试用例数据库中的每个测试用例,若其执行路径的标号序列中包含了修改点集合中任一修改点的标号,则被选择为回归测试用例,加入到选择测试用例集T selected 并执行。
5.根据权利要求1所述的基于控制流图的单元回归测试用例集合优化方法,其特征在于,步骤C中,从覆盖率角度考虑为回归测试添加新的测试用例;具体为:首先,计算出修改点在控制流图中的所有可达后继节点;然后,从此节点集合中选出在步骤B的运行过程中没有被覆盖到的节点,作为需要在回归测试中被覆盖的目标节点集合N
6.根据权利要求1所述的基于控制流图的单元回归测试用例集合优化方法,其特征在于,步骤E中,以节点集合N中的节点为覆盖目标,进行区间运算,生成满足覆盖条件的测试用例,并运行;同时,更新节点集合N,从中删除在本次运行过程中已覆盖到的节点。
7.根据权利要求1所述的基于控制流图的单元回归测试用例集合优化方法,其特征在于,步骤F中,该回归测试用例集合T R 由两部分构成:选择测试用例集T selected 和新增测试用例集合T new ,即:
T R  = T selected  ∪ T new
CN2012104266289A 2012-10-31 2012-10-31 基于控制流图的单元回归测试用例集合优化方法 Pending CN102915271A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2012104266289A CN102915271A (zh) 2012-10-31 2012-10-31 基于控制流图的单元回归测试用例集合优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2012104266289A CN102915271A (zh) 2012-10-31 2012-10-31 基于控制流图的单元回归测试用例集合优化方法

Publications (1)

Publication Number Publication Date
CN102915271A true CN102915271A (zh) 2013-02-06

Family

ID=47613644

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2012104266289A Pending CN102915271A (zh) 2012-10-31 2012-10-31 基于控制流图的单元回归测试用例集合优化方法

Country Status (1)

Country Link
CN (1) CN102915271A (zh)

Cited By (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103593291A (zh) * 2013-11-18 2014-02-19 北京邮电大学 用于包括多个函数测试模块的单元测试方法及装置
CN103678121A (zh) * 2013-11-18 2014-03-26 杭州电子科技大学 一种嵌入式二进制软件测试用例优先排序方法
CN103778061A (zh) * 2014-01-17 2014-05-07 南京航空航天大学 数组越界错误的自动检测和校正方法
CN104252408A (zh) * 2013-06-26 2014-12-31 国际商业机器公司 提供测试用例的方法和装置
CN104461908A (zh) * 2014-12-31 2015-03-25 中国科学院软件研究所 一种基于软件组合测试的回归测试用例重用方法
CN104834603A (zh) * 2015-05-26 2015-08-12 牟永敏 一种面向回归测试的控制流变更影响域分析方法和系统
CN105426282A (zh) * 2015-11-05 2016-03-23 天津津航计算技术研究所 优化数字芯片验证平台测试用例回归次数的方法
CN105760288A (zh) * 2014-12-15 2016-07-13 阿里巴巴集团控股有限公司 测试改写后的应用程序的方法及装置
CN105808438A (zh) * 2016-03-11 2016-07-27 北京信息科技大学 一种基于函数调用路径的测试用例复用方法
CN105893245A (zh) * 2015-12-15 2016-08-24 乐视网信息技术(北京)股份有限公司 一种屏蔽不同测试工具运行差异的方法和装置
CN106294120A (zh) * 2015-06-26 2017-01-04 伊姆西公司 测试代码的方法、设备和计算机程序产品
CN107102939A (zh) * 2016-11-09 2017-08-29 中国矿业大学 一种回归测试用例自动分类方法
CN109101410A (zh) * 2017-06-20 2018-12-28 北京明略软件系统有限公司 一种风险驱动测试方法和装置以及计算机可读存储介质
CN109213723A (zh) * 2017-07-01 2019-01-15 英特尔公司 用于具有安全、功率降低和性能特征的可配置空间加速器的处理器、方法和系统
CN109254924A (zh) * 2018-09-28 2019-01-22 中国科学院长春光学精密机械与物理研究所 一种软件故障定位方法、装置、设备及可读存储介质
CN109460354A (zh) * 2017-12-28 2019-03-12 南京邮电大学 一种基于rdf推理进行测试用例约简的方法
CN109828909A (zh) * 2018-12-21 2019-05-31 北京城市网邻信息技术有限公司 回归测试用例确定方法、装置、电子设备及存储介质
CN110554952A (zh) * 2018-06-04 2019-12-10 西安邮电大学 一种基于搜索的分层回归测试数据生成方法
CN111159027A (zh) * 2019-12-23 2020-05-15 武汉联影医疗科技有限公司 自动化测试方法、装置、计算机设备和可读存储介质
CN111382085A (zh) * 2020-05-09 2020-07-07 北京字节跳动网络技术有限公司 测试用例生成方法、装置、设备及介质
CN111858301A (zh) * 2020-06-05 2020-10-30 中国船舶重工集团公司第七0九研究所 基于变更历史的组合服务测试用例集约简方法及装置
CN113254325A (zh) * 2020-02-10 2021-08-13 北京沃东天骏信息技术有限公司 测试用例的处理方法和装置
CN114490424A (zh) * 2022-02-24 2022-05-13 北京启明星辰信息安全技术有限公司 自动化测试方法及装置
CN115248783A (zh) * 2022-09-26 2022-10-28 江西萤火虫微电子科技有限公司 软件测试方法、系统、可读存储介质及计算机设备
CN117009230A (zh) * 2023-07-25 2023-11-07 北京泰策科技有限公司 一种基于代码覆盖率评测的精准测试方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
CN101866317A (zh) * 2010-06-29 2010-10-20 南京大学 一种基于聚类分析的回归测试用例选择方法
US20110161936A1 (en) * 2009-12-28 2011-06-30 International Business Machines Method and apparatus for regression testing selection for a framework-based application

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法
US20110161936A1 (en) * 2009-12-28 2011-06-30 International Business Machines Method and apparatus for regression testing selection for a framework-based application
CN101866317A (zh) * 2010-06-29 2010-10-20 南京大学 一种基于聚类分析的回归测试用例选择方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
蔡敏等: "单元回归测试中测试用例集优化策略的研究与实现", 《第七届中国测试学术会议论文集》 *

Cited By (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104252408A (zh) * 2013-06-26 2014-12-31 国际商业机器公司 提供测试用例的方法和装置
CN104252408B (zh) * 2013-06-26 2017-04-12 国际商业机器公司 提供测试用例的方法和装置
US9811446B2 (en) 2013-06-26 2017-11-07 International Business Machines Corporation Method and apparatus for providing test cases
CN103678121B (zh) * 2013-11-18 2016-03-02 杭州电子科技大学 一种嵌入式二进制软件测试用例优先排序方法
CN103593291A (zh) * 2013-11-18 2014-02-19 北京邮电大学 用于包括多个函数测试模块的单元测试方法及装置
CN103593291B (zh) * 2013-11-18 2016-03-09 北京邮电大学 用于包括多个函数测试模块的单元测试方法及装置
CN103678121A (zh) * 2013-11-18 2014-03-26 杭州电子科技大学 一种嵌入式二进制软件测试用例优先排序方法
CN103778061A (zh) * 2014-01-17 2014-05-07 南京航空航天大学 数组越界错误的自动检测和校正方法
CN103778061B (zh) * 2014-01-17 2016-08-24 南京航空航天大学 数组越界错误的自动检测和校正方法
CN105760288A (zh) * 2014-12-15 2016-07-13 阿里巴巴集团控股有限公司 测试改写后的应用程序的方法及装置
CN105760288B (zh) * 2014-12-15 2019-02-01 阿里巴巴集团控股有限公司 测试改写后的应用程序的方法及装置
CN104461908A (zh) * 2014-12-31 2015-03-25 中国科学院软件研究所 一种基于软件组合测试的回归测试用例重用方法
CN104461908B (zh) * 2014-12-31 2017-04-05 中国科学院软件研究所 一种基于软件组合测试的回归测试用例重用方法
CN104834603A (zh) * 2015-05-26 2015-08-12 牟永敏 一种面向回归测试的控制流变更影响域分析方法和系统
CN104834603B (zh) * 2015-05-26 2017-12-01 牟永敏 一种面向回归测试的控制流变更影响域分析方法和系统
CN106294120A (zh) * 2015-06-26 2017-01-04 伊姆西公司 测试代码的方法、设备和计算机程序产品
CN106294120B (zh) * 2015-06-26 2020-06-05 伊姆西Ip控股有限责任公司 测试代码的方法、设备和计算机程序产品
CN105426282A (zh) * 2015-11-05 2016-03-23 天津津航计算技术研究所 优化数字芯片验证平台测试用例回归次数的方法
CN105426282B (zh) * 2015-11-05 2018-04-03 天津津航计算技术研究所 优化数字芯片验证平台测试用例回归次数的方法
CN105893245A (zh) * 2015-12-15 2016-08-24 乐视网信息技术(北京)股份有限公司 一种屏蔽不同测试工具运行差异的方法和装置
CN105808438B (zh) * 2016-03-11 2018-07-10 北京信息科技大学 一种基于函数调用路径的测试用例复用方法
CN105808438A (zh) * 2016-03-11 2016-07-27 北京信息科技大学 一种基于函数调用路径的测试用例复用方法
CN107102939B (zh) * 2016-11-09 2020-07-07 中国矿业大学 一种回归测试用例自动分类方法
CN107102939A (zh) * 2016-11-09 2017-08-29 中国矿业大学 一种回归测试用例自动分类方法
CN109101410A (zh) * 2017-06-20 2018-12-28 北京明略软件系统有限公司 一种风险驱动测试方法和装置以及计算机可读存储介质
CN109213723A (zh) * 2017-07-01 2019-01-15 英特尔公司 用于具有安全、功率降低和性能特征的可配置空间加速器的处理器、方法和系统
CN109460354A (zh) * 2017-12-28 2019-03-12 南京邮电大学 一种基于rdf推理进行测试用例约简的方法
CN109460354B (zh) * 2017-12-28 2021-09-24 南京邮电大学 一种基于rdf推理进行测试用例约简的方法
CN110554952A (zh) * 2018-06-04 2019-12-10 西安邮电大学 一种基于搜索的分层回归测试数据生成方法
CN110554952B (zh) * 2018-06-04 2023-01-20 西安邮电大学 一种基于搜索的分层回归测试数据生成方法
CN109254924A (zh) * 2018-09-28 2019-01-22 中国科学院长春光学精密机械与物理研究所 一种软件故障定位方法、装置、设备及可读存储介质
CN109254924B (zh) * 2018-09-28 2022-02-08 中国科学院长春光学精密机械与物理研究所 一种软件故障定位方法、装置、设备及可读存储介质
CN109828909A (zh) * 2018-12-21 2019-05-31 北京城市网邻信息技术有限公司 回归测试用例确定方法、装置、电子设备及存储介质
CN111159027A (zh) * 2019-12-23 2020-05-15 武汉联影医疗科技有限公司 自动化测试方法、装置、计算机设备和可读存储介质
CN113254325A (zh) * 2020-02-10 2021-08-13 北京沃东天骏信息技术有限公司 测试用例的处理方法和装置
CN111382085A (zh) * 2020-05-09 2020-07-07 北京字节跳动网络技术有限公司 测试用例生成方法、装置、设备及介质
CN111858301B (zh) * 2020-06-05 2022-10-11 中国船舶重工集团公司第七0九研究所 基于变更历史的组合服务测试用例集约简方法及装置
CN111858301A (zh) * 2020-06-05 2020-10-30 中国船舶重工集团公司第七0九研究所 基于变更历史的组合服务测试用例集约简方法及装置
CN114490424A (zh) * 2022-02-24 2022-05-13 北京启明星辰信息安全技术有限公司 自动化测试方法及装置
CN115248783A (zh) * 2022-09-26 2022-10-28 江西萤火虫微电子科技有限公司 软件测试方法、系统、可读存储介质及计算机设备
CN117009230A (zh) * 2023-07-25 2023-11-07 北京泰策科技有限公司 一种基于代码覆盖率评测的精准测试方法及系统
CN117009230B (zh) * 2023-07-25 2024-04-16 北京泰策科技有限公司 一种基于代码覆盖率评测的精准测试方法及系统

Similar Documents

Publication Publication Date Title
CN102915271A (zh) 基于控制流图的单元回归测试用例集合优化方法
CN102110051B (zh) 应用程序切片技术的静态缺陷检测方法
CN103116540B (zh) 基于全局超级块支配图的动态符号执行方法
CN103559122B (zh) 基于程序行为切片的测试案例约减方法
CN103778061B (zh) 数组越界错误的自动检测和校正方法
US7614043B2 (en) Automated product defects analysis and reporting
CN110740054B (zh) 一种基于强化学习的数据中心虚拟化网络故障诊断方法
CN108897676B (zh) 基于形式化规则的飞行引导控制软件可靠性分析系统与方法
CN104503917A (zh) 基于数据流函数调用路径的变更影响域分析方法及系统
CN103617115B (zh) 一种基于抽象解释和模型验证的运行时错误分析方法
CN108664391A (zh) 一种面向程序状态的故障分类方法、变异测试方法及设备
CN102880547A (zh) 一种软件单元与部件与相结合的源代码变更影响分析与测试方法
CN107844415A (zh) 一种基于插值的模型检测路径缩减方法、计算机
CN103713933A (zh) 计算机程序中热点函数、变量的汇聚方法、装置及系统
CN104360947B (zh) 一种基于petri网的多进程死锁检测方法
CN110287693A (zh) 一种基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法
CN105808438A (zh) 一种基于函数调用路径的测试用例复用方法
Xu et al. Prioritizing state-based aspect tests
CN102799960B (zh) 面向数据模型的并行业务流程异常检测方法
CN107579844A (zh) 一种基于业务路径和频度矩阵的动态关联故障挖掘方法
US8607204B2 (en) Method of analyzing single thread access of variable in multi-threaded program
CN109002723B (zh) 一种分段式符号执行方法
Hu et al. File parsing vulnerability detection with symbolic execution
CN116431516A (zh) 一种用于变异测试的程序语句选择方法及系统
CN115048298A (zh) 一种面向数据包拼接的种子调度权值分配方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20130206