CN110554954B - 一种结合静态依赖和动态执行规则的测试用例选择方法 - Google Patents

一种结合静态依赖和动态执行规则的测试用例选择方法 Download PDF

Info

Publication number
CN110554954B
CN110554954B CN201910654983.3A CN201910654983A CN110554954B CN 110554954 B CN110554954 B CN 110554954B CN 201910654983 A CN201910654983 A CN 201910654983A CN 110554954 B CN110554954 B CN 110554954B
Authority
CN
China
Prior art keywords
dependency
relationship
calling
test
code
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.)
Active
Application number
CN201910654983.3A
Other languages
English (en)
Other versions
CN110554954A (zh
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.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
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 Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201910654983.3A priority Critical patent/CN110554954B/zh
Publication of CN110554954A publication Critical patent/CN110554954A/zh
Application granted granted Critical
Publication of CN110554954B publication Critical patent/CN110554954B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提出一种结合静态依赖和动态执行规则的测试用例选择方法,为了更准确地选择测试用例从而进一步减少测试规模,提出了本方法级别的测试用例选择方法,本方法结合静态依赖分析和动态执行规则来收集更准确的依赖,从而选择更准确规模更小的测试集。本方法首先定位提交代码中的更改方法,通过静态分析和动态执行规则收集方法级别精准的依赖关系;设计一个基于BFS的增量迭代搜索算法用来搜索更改方法集的所有受影响的方法,从中识别出受影响的测试用例集。本方法能解决已有的静态测试用例选择方法因为不合理的依赖分析,导致遗漏一些必要测试或者选择一些不必要的测试,对于大型复杂系统的频繁地持续集成测试更具应用价值。

Description

一种结合静态依赖和动态执行规则的测试用例选择方法
技术领域
本发明属于计算机软件测试领域,涉及持续集成测试用例选择技术,研究如何收集精准的依赖关系,并设计一个基于广度优先策略(BFS)的搜索算法,增量迭代地搜索出受更改代码影响的测试用例子集。
背景技术
基于互联网的软件开发要求产品快速迭代,同时保持产品的质量,持续集成(Continuous Integration,简称CI)正是解决这一问题的软件开发实践。持续集成要求开发人员频繁地集成更改的代码到主线代码库,每次集成通过自动化的构建(包括编译和测试)来验证代码质量,从而尽快地发现集成错误。这一开发实践已经在Google、Microsoft、Cisco、GitHub、Eclipse、Apache等著名的软件组织和开源社区中得到了广泛应用。持续集成通过自动化集成测试(简称CI测试)来保证集成到主干的代码质量,持续集成时的测试用例选择是一个非常有挑战性的问题。如果运行所有的测试用例,需要消耗大量的计算资源,并造成测试反馈周期过长;如果选择的测试用例集不合适,又不足以覆盖必要的测试代码以保证待集成代码的质量。测试用例选择的目的是,选择和运行受更改代码影响的测试,从而大大节省测试时间和测试资源,并在实践中得到了广泛的应用。
现有的测试用例选择方法积累了较多的研究成果,但仍然存在不足,诸如时间成本太高、遗漏一些必要的测试,目前还少有研究在减少测试成本的同时,能保证缺陷的检测能力和测试覆盖度。根据测试依赖的收集方式,测试用例选择技术可分为动态技术和静态技术;根据测试依赖和更改的程序元素的粒度,可分为方法级别、文件级别、模块级别等。
动态测试用例选择技术通过运行测试来收集依赖,虽然能选择一个比较准确的测试集,但是收集依赖耗时长且第三方非预期中断等可能导致不完整的测试用例选择;静态选择技术使用静态分析来推导出依赖,比动态选择技术更易于操作,但是现有的静态选择方法因为不合理的依赖分析,导致遗漏一些必要测试用例或者选择一些不必要的测试用例。
现有研究也比较了不同粒度测试用例选择技术,结果表明基于粗粒度依赖(例如文件级别)的测试用例选择技术能减少分析依赖的时间开销,但存在选择一些不必要的测试;基于细粒度依赖的测试用例选择技术(例如方法级别)能收集更精确的依赖,从而选择更准确的测试集,但会增加收集依赖的时间开销。尽管现有的研究已提出较多的基于细粒度依赖关系的选择测试方法,但仍然面临一些挑战(例如一些复杂的依赖关系不能处理,只能支持单个语言的应用场景)。
另外进一步分析了现有的静态选择技术,发现影响测试用例选择有效性的因素主要包括:
1.遗漏依赖关系导致遗漏必要的测试,例如不能处理在反射中方法的调用关系;
2.不精确的依赖关系,导致不必要的测试,例如继承中的动态绑定的调用关系不能被准确地构建。
以上两个问题主要因为某些依赖关系是在运行时动态确定的,无法通过现有的静态分析技术完全得到。
发明内容
在现有类级别的测试用例选择方法的基础上,为了更准确地选择测试用例从而进一步减少测试规模,本发明提出一种结合静态依赖和动态执行规则的测试用例选择方法,属于方法级别的测试用例选择方法,该方法结合静态依赖分析和动态执行规则(反射中的动态执行和继承中的动态绑定)来收集更准确的依赖,从而选择更准确规模更小的测试集。
为解决上述问题,本发明采用的技术方案为:
一种结合静态依赖和动态执行规则的测试用例选择方法,包括以下步骤:
定位提交代码中的更改方法,得到集成版本的更改方法集;
对源码进行静态分析,得到继承依赖和直接调用依赖关系,以及构造函数之间、父类与子类之间的隐式调用依赖关系,从而构建静态依赖关系集;
根据静态依赖关系集,使用反射中的动态调用和继承关系中的动态绑定这两个动态执行规则,提取运行时的调用依赖关系,从而构建动态依赖关系集;
基于静态依赖关系集和动态依赖关系集,设计一基于BFS(即广度优先搜索)的增量迭代搜索算法,用来搜索更改方法集的所有受影响的方法,从中识别出受影响的测试用例集。
1).定位更改的方法:
进一步地,提交代码包括程序代码和测试代码。
进一步地,对于每个持续集成版本,定位更改方法的步骤包括:
从提交的日志消息中获取更改文件的名称;
获取每个更改文件的更改代码行,并排除空行和注释行;
映射更改的代码行到对应的更改方法。
进一步地,映射更改的代码行到对应的更改方法,具体包括以下步骤:
使用开源工具Doxygen分析源码,得到代码文件对应的xml文件;
解析xml文件,得到如下代码结构信息:方法名称、变量名称、方法的开始行和结束行、变量所在行,以及方法的注释信息;
基于以上的结构信息,映射出更改文件中更改行到对应的方法或变量,并标记这些方法和变量为更改方法。
2).提取方法级别依赖关系:
·继承依赖和直接调用依赖关系:
解析Doxygen输出的xml文件中标记信息,得到继承依赖和直接调用依赖关系;
·构造函数之间的隐式调用依赖关系:
利用得到的继承依赖和直接调用依赖关系推导得出构造函数之间的隐式调用依赖关系。
·父类与子类之间的隐式调用依赖关系:
使用关键字搜索每个xml文件中存在的父类与子类之间的隐式调用,记录出现的位置,并解析得到被调用方法的名称、参数类型和返回值类型;搜索该被调用方法的父类,并根据该被调用方法的名称、参数类型和返回值类型,从父类中搜索被调用的方法;根据代码结构信息将出现的位置映射到相应的方法,并将其标记为调用方法,根据该调用方法和上述被调用方法建立父类与子类之间的隐式调用依赖关系。
·反射中的动态调用依赖关系
使用关键字搜索每个xml文件中存在的反射中动态调用,记录出现的位置,并分析xml得到被调用方法的名称;
根据代码的结构信息,将出现的位置映射到对应的调用方法,并得到调用方法的相关信息,根据得到的被调用方法和调用方法,构建反射中的动态调用关系。
·继承关系中的动态绑定依赖关系:
对于静态依赖关系集中调用关系,首先检查被调用的方法是否在子类方法中给出定义,如果没有,使用BFS搜索算法迭代地搜索父类方法,直到搜索到父类方法的定义;
然后根据子类是否重载了父类的方法的情况,更新该调用依赖中被调用的方法;
如果子类没有重载父类的方法,则根据被调用方法的名称和参数找出父类对该方法的定义,并更新被调用的子类方法;如果子类重载了父类的方法,将根据父类中被调用方法的名称、参数和返回类型从其子类中搜索重载的方法,利用该重载的方法更新调用依赖中被调用的方法,得到继承关系中的动态绑定关系。
进一步地,根据静态依赖关系集和动态依赖关系集中的继承依赖和调用依赖,生成方法级别的调用关系图,该关系图由当前版本所有方法的节点集合和节点之间调用关系的边集合组成。
3).搜索受影响的方法和识别相关的测试集:
对于更改方法集中的每个更改方法,根据调用关系图,通过设计的基于BFS的增量迭代搜索算法搜索出所有受影响的方法,加入到受影响的方法集;从受影响的方法集中识别出所有的测试方法,得到测试用例集。
进一步地,对受影响的方法集中的每个方法进行判断,如果方法名称以“test”开头或者方法的注释信息包含“@Test”,则判定为测试方法。
4).扩展测试集:重新检测在先前版本中遗留的失效测试用例,并加入到选择的测试集,该失效测试用例在先前的版本中已经被检测到但未被重新运行过。
本发明取得的有益效果如下:
本发明方法能够平衡持续集成测试中测试资源和测试质量,大规模减少测试成本的同时,保证测试效果。该方法选择的测试集,能减少92%实际CI测试集规模;覆盖实际CI测试检测到的97%缺陷,并且在26%版本上能发现新的缺陷;选择测试和运行选择测试的总成本,仅仅占实际CI测试时间的24%。因此,本发明对于大型复杂系统的频繁地持续集成测试具有非常好的应用价值。
附图说明
图1为本发明方法的框架图。
图2为本发明使用的依赖关系实例图。
具体实施方式
现有的研究表明,静态测试用例选择技术比动态测试用例选择技术更易于操作,收集依赖成本低,越来越受到关注;然而现有的静态测试用例选择方法因为不合理的依赖分析,导致遗漏一些必要测试或者选择一些不必要的测试。因此,本发明在已有类级别的测试用例选择方法的基础上,为了更准确地选择测试用例从而进一步减少测试规模,提出了一种新的细粒度(即方法级别)的测试用例选择方法,该方法结合静态依赖分析和动态执行规则(反射中的动态执行和继承中的动态绑定)来收集更准确的依赖,从而选择更准确规模更小的测试集。该方法在收集依赖关系时,同时考虑了方法和变量的调用关系,以确保提取更完整的依赖关系。
一种结合静态依赖和动态执行规则的测试用例选择方法,如图1所示,该方法结合静态分析和动态执行规则收集方法级别的精准依赖关系,然后设计一个基于BFS(即广度优先搜索策略)增量迭代的搜索算法,以搜索出受更改方法影响的测试集,该方法主要包括4个步骤:定位更改的方法、提取方法级别依赖关系、搜索受影响的方法并识别相关的测试用例、扩展测试用例。
1.定位更改方法
对于每个持续集成版本,分三个阶段来定位更改方法:首先,从提交的日志消息中获取更改文件的名称;然后,使用“git diff”命令得到每个更改文件的更改代码行,并排除空行和注释行;最后,映射更改的代码行到对应的更改方法。在第三个阶段中,首先,使用一个开源工具Doxygen分析源码,并输出代码文件对应的xml文件,深入解析xml文件得到代码结构信息,包括方法名称、变量名称、方法的开始行和结束行、变量所在行,以及方法的注释信息(例如@Test);然后,基于以上的结构信息,映射出更改文件中更改行到对应的方法或变量,并标记这些方法和变量为更改方法。为了方便起见,在下文中,“方法”和“变量”统一用“方法”表示。另外,提交代码不仅包括程序代码也包括测试代码,因此本发明也能定位更改的测试方法,以便更好地选出与更改代码相关的测试用例。
基于以上过程,得到集成版本的更改方法集M_Set。
定义1:M_Set={M1,M2,…,Mn},M_Set是当前集成版本更改方法的集合,Mi是至少包含一行更改代码的更改方法。
2.收集方法级别的依赖关系
图2给出了一个实例来解释本发明中使用的依赖关系。程序类用A+、A和B所在框标记,测试类用T1-T4所在框标记(例如类A是程序类,类T2是测试类),方法(例如方法A.n)在其类中用圆圈标记。两大依赖关系中继承依赖和调用依赖分别用I和U标记,例如,类A+是类A的子类(标记为I),方法T1.t调用方法A.m1(标记为U)。使用静态分析和动态执行规则分析得到的依赖关系分别用S和D标记。
1)使用静态程序分析来收集依赖关系
方法级别的静态依赖关系大部分可以通过代码分析工具直接得到,也存在一些隐式调用依赖关系,现有的研究方法和代码依赖分析工具无法得到。这些隐式调用依赖关系通常发生在构造函数之间、父类与子类之间,本发明仔细分析并得到这种隐式调用依赖关系。
1a)对于继承依赖和直接调用依赖关系:解析Doxygen输出的xml文件中标记(例如derivedcompoundref表示子类,ReferencedBy表示直接调用类),可以得到继承依赖和直接调用依赖关系。
1b)对于构造函数之间的隐式调用依赖关系:利用得到的继承依赖和直接调用依赖关系推导得出。现有研究指出,每个继承依赖或直接调用依赖关系,其构造函数之间都存在隐式调用。遵循此规则,类A+是类A的子类,属于继承依赖(如图2所示),这说明类A+的构造函数隐式调用了类A的构造函数,因此本方法能构建类A+和类A的构造函数之间的依赖关系。对于直接调用的依赖关系,当方法T2.t调用A+.m时(如图2所示),这说明类T2的构造函数隐式调用了类A+的构造函数,因此能构建类T2和类A的构造函数之间的依赖关系。
1c)对于父类与子类之间的隐式调用依赖关系:子类的方法调用父类的方法,并且该子类中存在与被调用函数同名的方法。使用关键字“super”和步骤1得到的代码结构信息来分析这种依赖关系。以图2为例,子类的方法A+.n重载了父类的方法A.n,并且子类的方法A+.o通过“super.n”调用父类的方法A.n(例如Java中用“super.n”,C++中用“__super::n”)。为了得到这种隐式调用依赖关系,对于每个xml文件,首先使用关键字搜索(例如,“super.”,“super(”,“__super::”),检查xml文件中是否存在这种隐式调用;如果存在,记录出现的位置(即代码行),并获取被调用方法的名称(即n)和其他信息(例如参数和返回类型)。其次,搜索该被调用方法n的父类(例如类A),并根据该被调用方法名称(即n)、参数类型和返回值类型从父类中搜索被调用的方法(即A.n);同时根据代码结构信息将出现的位置映射到相应的方法,并将其标记为调用方法(即A+.o)。最后,根据被调用方法和调用方法建立父类与子类之间的隐式调用依赖关系。
基于以上的过程,得到了源代码的静态依赖关系集(Es_Set)。
2)使用动态执行规则分析依赖关系
根据得到的静态依赖关系集(Es_Set),使用两个动态执行规则(反射中的动态调用和继承关系中的动态绑定)提取运行时的调用依赖关系。
2a)规则1:反射中的动态调用。方法以字符串的形式被动态调用(例如"Method m=getMethod(‘m2’,int.class,String.class);)"。为了收集这种依赖关系,对于每个xml文件,首先使用关键字搜索(“getMethod”“getMethods”“getDeclaredMethod”或“getDeclaredMethods”)检测是否存在这种依赖,如果存在,则记录出现的位置,并分析xml得到被调用方法的名称(例如,m2是被调用方法名称,“int.class,String.class”是参数类型,m2所在的类是被调用的类)。然后,根据代码的结构信息,将出现的位置映射到对应的方法(即调用方法),并得到调用方法的相关信息。最后,根据得到的被调用方法和调用方法,构建动态调用关系。
2b)规则2:继承关系中的动态绑定。该规则分为两种子场景,将在下面的两段中分别进行介绍。
第一种场景是子类没有重载父类的方法。如图2所示,方法T2.t调用方法A+.m(用虚线标记),但方法m在类A+中并没有给出定义,而是定义在其父类A中。在这种情况下,静态依赖构建的是方法T2.t和方法A+.m的调用关系(由实线箭头标记);而本发明提出的方法构建的是方法T2.t和方法A.m的调用(用虚线箭头标记),并移除方法T2.t和方法A+.m的调用,以防止选择不必要的测试。
第二种场景是子类重载了父类的方法。如图2所示,方法T2.t1调用接口A.n,方法A.n被子类方法A+.n重载,这两个方法具有相同的名称、参数类型和返回类型。在这种情况下,程序在动态执行时调用方法A+.n而不是方法A.n。类似于第一种场景,静态依赖构建方法T2.t1和方法A.n的调用关系(由实线箭头标记),而本发明提出的方法构建的是方法T2.t1和方法A+.n的调用关系(用虚线箭头标记),并移除方法T2.t1和方法A.n的调用关系。
算法1展示了根据动态规则2提取依赖关系的伪代码。详细来讲,对于静态依赖关系集Es_Set中调用关系,首先检查被调用的方法(以图2中A+.m为例)是否在类A+中给出定义,如果没有,使用广度优先搜索算法(BFS)迭代搜索类A的父类,直到搜索方法m的定义,然后根据规则2的第一个场景的规则更新该调用依赖中被调用的方法(如算法1中第2-10行所示)。此外,对于规则2中第二个场景的调用依赖关系,假设图2中的方法A.n是依赖关系中被调用方法,将根据其方法名称、参数和返回类型从其子类中搜索重载的方法(即A+.n)。如果存在,用方法A+.n更新该调用依赖中被调用的方法(如算法1中第11-14行所示)。
Figure BDA0002136577620000071
为了方便步骤3的操作,根据继承依赖和调用依赖生成方法级别的调用关系图。
定义2(方法级别调用关系图-MCG):一个MCG是一个二元组<N,Ev>,其中
·N是该版本上所有方法的节点集合,
·
Figure BDA0002136577620000081
是表示节点之间调用关系的边集合;如果存在一条边<n1,n2>∈Ev,表明基于继承和调用的依赖,方法n1调用方法n2
3.搜索变化影响方法和识别受影响测试用例
该步骤设计了一个基于BFS(即广度优先搜索)增量迭代的搜索算法,以搜索更改方法的所有受影响的方法,并识别出受影响的测试用例。
算法2给出了搜索算法的伪代码,具体来讲,对于步骤1得到的更改方法集M_Set中的每个方法Mi,首先使用BFS搜索策略增量迭代地搜索出所有受影响的方法(在方法调用关系图MCG中能到达的方法Mi的所有节点),并将这些方法加入到受变化影响的方法集AM_Set(如算法2中第2行所示)。值得注意的是,将更改方法Mi也加入到AM_Set,以确保能选出新增或修改的测试(如算法2中第3行所示)。在图2的例子中,假设方法A.n是更改方法,则受影响的方法集AM_Set={A.n,A+.o,A.m1,T1.t,B.m2,T3.t,T4.t}。对于集合AM_Set中的每个方法,逐个判断是否是测试方法。参考现有研究的判断标准,如果方法名称以“test”开头或者方法的注释信息包含“@Test”,则判定该方法是测试方法。如果是测试方法,并且该方法不在受影响的测试集T_Set中,则将其添加到集合T_Set(如算法2中第4-8行所示)。基于以上的过程,得到了一组受影响的测试用例集T_Set={T1.t,T3.t,T4.t}。
Figure BDA0002136577620000082
4.扩展测试用例
该步骤用于补充在先前版本遗留下来的失效测试,这些失效测试在先前的版本已经被检测,但是没有被及时处理,遗留到了后续版本。虽然这些测试与更改代码没有任何依赖关系,但是他们能检测到缺陷。具体来讲,首先找出近期n个版本的失效测试用例,然后逐个检测这些失效测试用例是否重新运行过,如果没有,添加该测试用例到集合T_Set。试验了近期1到30集成版本,结果显示当n=10时性能最好。因此,在本发明的方法中使用近期10个版本的失效测试。
本发明的目的是在持续集成测试中平衡测试资源和测试质量,大规模减少测试成本的同时,保证测试效果。因此,本发明工作对于大型复杂系统的频繁地持续集成测试具有非常好的应用价值。

Claims (10)

1.一种结合静态依赖和动态执行规则的测试用例选择方法,包括以下步骤:
定位提交代码中的更改方法,得到集成版本的更改方法集;
对源码进行静态分析,得到继承依赖和直接调用依赖关系,利用继承依赖和直接调用依赖关系推导得出构造函数之间的隐式调用依赖关系,根据父类与子类之间的隐式调用关系建立父类与子类之间的隐式调用依赖关系,根据该继承依赖和直接调用依赖关系以及构造函数之间、父类与子类之间的隐式调用依赖关系构建静态依赖关系集;
根据静态依赖关系集,使用反射中的动态调用和继承关系中的动态绑定这两个动态执行规则,提取运行时的调用依赖关系,从而构建动态依赖关系集;
基于静态依赖关系集和动态依赖关系集,设计一基于BFS的增量迭代搜索算法,用来搜索更改方法集的所有受影响的方法,从中识别出受影响的测试用例集。
2.如权利要求1所述的方法,其特征在于,提交代码包括程序代码和测试代码。
3.如权利要求1所述的方法,其特征在于,定位更改方法的步骤包括:
从提交的日志消息中获取更改文件的名称;
获取每个更改文件的更改代码行,并排除空行和注释行;
映射更改的代码行到对应的更改方法。
4.如权利要求3所述的方法,其特征在于,映射更改的代码行到对应的更改方法,包括以下步骤:
使用Doxygen分析源码,得到代码文件对应的xml文件;
解析xml文件,得到如下代码结构信息:方法名称、变量名称、方法的开始行和结束行、变量所在行,以及方法的注释信息;
基于以上的结构信息,映射出更改文件中更改行到对应的方法或变量,并标记这些方法和变量为更改方法。
5.如权利要求1所述的方法,其特征在于,解析由分析源码输出的xml文件中标记信息,得到继承依赖和直接调用依赖关系。
6.如权利要求1所述的方法,其特征在于,使用关键字搜索由分析源码输出的每个xml文件中存在的父类与子类之间的隐式调用,记录出现的位置,并解析得到被调用方法的名称、参数类型和返回值类型;搜索该被调用方法的父类,并根据该被调用方法的名称、参数类型和返回值类型,从父类中搜索被调用的方法;根据代码结构信息将出现的位置映射到相应的方法,并将其标记为调用方法,根据该调用方法和上述被调用方法建立父类与子类之间的隐式调用依赖关系。
7.如权利要求1所述的方法,其特征在于,反射中的动态调用的规则为:
使用关键字搜索由分析源码输出的每个xml文件中存在的反射中动态调用,记录出现的位置,并分析xml得到被调用方法的名称;
根据代码的结构信息,将出现的位置映射到对应的调用方法,并得到调用方法的相关信息,根据得到的被调用方法和调用方法,构建反射中的动态调用关系。
8.如权利要求1所述的方法,其特征在于,继承关系中的动态绑定的规则为:
对于静态依赖关系集中调用关系,检查被调用的方法是否在子类方法中给出定义,如果没有,使用BFS搜索算法迭代地搜索父类方法,直到搜索到父类方法的定义;
根据子类是否重载了父类的方法的情况,更新该调用依赖中被调用的方法;
如果子类没有重载父类的方法,则根据被调用方法的名称和参数找出父类对该方法的定义,并更新被调用的子类方法;如果子类重载了父类的方法,将根据父类中被调用方法的名称、参数和返回类型从其子类中搜索重载的方法,利用该重载的方法更新调用依赖中被调用的方法,得到继承关系中的动态绑定关系。
9.如权利要求1所述的方法,其特征在于,根据静态依赖关系集和动态依赖关系集中的继承依赖和调用依赖,生成方法级别的调用关系图,该关系图由当前版本所有方法的节点集合和节点之间调用关系的边集合组成;对于更改方法集中的每个更改方法,根据调用关系图,通过设计的基于BFS的增量迭代搜索算法搜索出所有受影响的方法,加入到受影响的方法集;从受影响的方法集中识别出所有的测试用例,得到测试用例集。
10.如权利要求9所述的方法,其特征在于,对受影响的方法集中的每个方法进行判断,如果方法名称以“test”开头或者方法的注释信息包含“@Test”,则判定为测试方法。
CN201910654983.3A 2019-07-19 2019-07-19 一种结合静态依赖和动态执行规则的测试用例选择方法 Active CN110554954B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910654983.3A CN110554954B (zh) 2019-07-19 2019-07-19 一种结合静态依赖和动态执行规则的测试用例选择方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910654983.3A CN110554954B (zh) 2019-07-19 2019-07-19 一种结合静态依赖和动态执行规则的测试用例选择方法

Publications (2)

Publication Number Publication Date
CN110554954A CN110554954A (zh) 2019-12-10
CN110554954B true CN110554954B (zh) 2020-12-01

Family

ID=68736474

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910654983.3A Active CN110554954B (zh) 2019-07-19 2019-07-19 一种结合静态依赖和动态执行规则的测试用例选择方法

Country Status (1)

Country Link
CN (1) CN110554954B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111400164B (zh) * 2020-02-07 2023-05-26 浙江口碑网络技术有限公司 一种软件测试方法及装置
CN111324542B (zh) * 2020-03-06 2023-03-14 广东电网有限责任公司 一种Web应用回归测试用例选择系统、方法以及设备
CN113297076B (zh) * 2021-05-21 2023-06-23 建信金融科技有限责任公司 基于调用链图的服务变更识别方法及装置
US11841791B2 (en) 2021-06-07 2023-12-12 International Business Machines Corporation Code change request aggregation for a continuous integration pipeline
CN113656290B (zh) * 2021-08-04 2024-07-05 支付宝(杭州)信息技术有限公司 一种mock点自动识别方法、装置以及设备
CN113672506B (zh) * 2021-08-06 2023-06-13 中国科学院软件研究所 基于机器学习的动态比例测试用例排序选择方法及系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120102458A1 (en) * 2010-10-22 2012-04-26 Microsoft Corporation Generating documentation from tests
US9389986B2 (en) * 2013-05-06 2016-07-12 Microsoft Technology Licensing, Llc Identifying impacted tests from statically collected data
CN103699488B (zh) * 2013-12-30 2017-01-04 优视科技有限公司 基于调用关系依赖图的回归测试方法及系统
CN104778032A (zh) * 2014-01-09 2015-07-15 阿尔卡特朗讯 一种用于进行持续集成的方法和设备
CN105183571A (zh) * 2015-09-22 2015-12-23 小米科技有限责任公司 函数调用方法和装置
CN107729015B (zh) * 2017-09-12 2020-12-11 创新先进技术有限公司 一种确定工程代码中的无用函数的方法和装置
CN108170613B (zh) * 2018-03-08 2021-08-03 国家计算机网络与信息安全管理中心 一种软件测试用例自动生成方法
CN108595334B (zh) * 2018-04-27 2021-08-13 刘尚国 一种计算Java程序动态切片的方法、装置及可读存储介质

Also Published As

Publication number Publication date
CN110554954A (zh) 2019-12-10

Similar Documents

Publication Publication Date Title
CN110554954B (zh) 一种结合静态依赖和动态执行规则的测试用例选择方法
Prete et al. Template-based reconstruction of complex refactorings
US7788640B2 (en) Using code analysis to generate documentation
CN109144882B (zh) 一种基于程序不变量的软件故障定位方法及装置
US7836440B2 (en) Dependency-based grouping to establish class identity
US9632916B2 (en) Method and apparatus to semantically connect independent build and test processes
US20170132119A1 (en) Method and device for retrieving test case based on code coverage
US8782609B2 (en) Test failure bucketing
US20100031238A1 (en) Method and Apparatus for Locating Memory Leak in a Program
Kapdan et al. On the structural code clone detection problem: a survey and software metric based approach
Chen et al. Extracting and studying the Logging-Code-Issue-Introducing changes in Java-based large-scale open source software systems
US7233733B2 (en) Method and system for finding evolving regions in graphs without persistent node identity
Tichy et al. Detecting performance bad smells for henshin model transformations.
CN103186463A (zh) 确定软件的测试范围的方法和系统
Dabain et al. Design pattern detection using FINDER
Mattis et al. Lightweight lexical test prioritization for immediate feedback
Liuying et al. Test selection from UML statecharts
Jendele et al. Efficient automated decomposition of build targets at large-scale
Lee et al. Automatic detection of design pattern for reverse engineering
CN114282227B (zh) 一种Fabric区块链系统智能合约的安全分析检测方法
CN110321130B (zh) 基于系统调用日志的不可重复编译定位方法
Bach et al. Determining method-call sequences for object creation in C++
CN110990648A (zh) 一种病毒查询方法、服务器及计算机可读存储介质
Imran et al. Design Smell Analysis for Developing and Established Open Source Java Software
Cheda et al. State of the practice in algorithmic debugging

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant