基于调用关系依赖图的回归测试方法及系统的制作方法

文档序号:6526658阅读:210来源:国知局
基于调用关系依赖图的回归测试方法及系统的制作方法
【专利摘要】本发明提供了一种基于调用关系依赖图的回归测试方法及系统,其中的方法包括:将从版本管理库中获取的待比较版本的所有方法进行转存;将版本管理库更新至待测版本,获取待测版本的所有方法之间的调用关系,并进行存储;将待测版本的所有方法与所转存的待比较版本的所有方法进行比较,获取方法变更集;根据所存储的调用关系生成调用关系依赖图,并根据方法变更集,在调用关系依赖图中对变更的方法进行标注;根据所标注的方法确定待测版本的回归范围,并根据回归范围进行回归测试。通过本发明能够使回归测试的范围更加精准且更有目的性,同时也能够使研发人员分析出所提交测试的代码是否存在错改漏改,确保所修改的代码都能完整的覆盖其影响面。
【专利说明】基于调用关系依赖图的回归测试方法及系统
【技术领域】
[0001]本发明涉及软件测试【技术领域】,更为具体地,涉及一种基于调用关系依赖图的回归测试方法及系统。
【背景技术】
[0002]软件测试是软件生命周期的一个必要的阶段,其直接关系着软件的质量。在软件生命周期的任何一个阶段中,只要软件发生了改变,就可能给该软件带来问题。因此,每当软件发生变化时,就必须进行回归测试,以便于确定修改是否达到了预期的目的,以及检查修改是否损害了软件原有的正常功能。
[0003]现有的回归测试没有一个比较精准的标准,多半都是靠测试人员的经验、习惯以及项目的特性进行回归验收,测试范围不够准确,并且大范围的回归测试耗时耗力,甚至有时候还会遗漏测试点,造成测试覆盖率不全的问题。
[0004]在传统的黑盒测试中,测试人员都不太接触研发的代码,因此测试人员对研发人员所修改的代码也没有感知,测试人员只是依靠研发人员的测试建议和测试风险来评估回归测试的范围,如此便会造成以下问题:
[0005]一、研发人员只是修改了几行代码,但测试人员并不清楚修改的这几行代码对其他代码的影响,只能依靠研发人员单方面的推断来评估,造成回归测试范围不够精准。
[0006]二、研发人员在修改了代码之后,有可能其自身对修改的代码所产生的影响也缺乏认识,如此便会给出错误的测试建议和测试范围,导致测试风险增加,使回归测试变成无用功。
[0007]三、有可能研发人员只是对一些方法中的不是很重要的代码进行了修改,但为了达到项目的上线标准,测试人员却不敢不进行回归测试,如此不仅使测试没有针对性,并且还会造成回归测试的时间太长,从而延缓项目的上线时间,甚至错过产品发布的最好良机。
[0008]鉴于上述问题,如何既能缩短回归测试的测试时间,又能使回归测试的测试范围变得更加精确且更有目的性,成为测试人员亟待解决的问题。

【发明内容】

[0009]鉴于上述问题,本发明的目的是提供一种基于调用关系依赖图的回归测试方法及系统,以缩短回归测试的测试时间,使回归测试的测试范围变得更加精确且更有目的性。
[0010]根据本发明的一个方面,提供一种基于调用关系依赖图的回归测试方法,包括:
[0011]将从版本管理库中获取的待比较版本的所有方法进行转存;
[0012]将版本管理库更新至待测版本,然后编译待测版本,获取待测版本的所有方法之间的调用关系,并进行存储;
[0013]将待测版本的所有方法与所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集;
[0014]根据所存储的调用关系生成调用关系依赖图,并根据方法变更集,在调用关系依赖图中对变更的方法进行标注;
[0015]根据在调用关系依赖图中所标注的方法确定待测版本的回归范围,并根据回归范围进行回归测试。
[0016]其中,在将从版本管理库中获取的待比较版本的所有方法进行转存之前,还包括:利用版本管理库所提供的接口,通过持续集成工具从版本管理库中获取待比较版本的所有方法;或者,直接从版本管理库中获取待比较版本的所有方法。
[0017]其中,在获取待测版本的所有方法之间的调用关系的过程中,通过java字节码框架获取待测版本的所有方法之间的调用关系。
[0018]另一方面,本发明提供一种基于调用关系依赖图的回归测试系统,包括:
[0019]方法转存单元,用于将从版本管理库中获取的待比较版本的所有方法进行转存;
[0020]调用关系获取单元,用于将版本管理库更新至待测版本,然后编译待测版本,获取待测版本的所有方法之间的调用关系,并进行存储;
[0021]变更集生成单元,用于将待测版本的所有方法与方法转存单元中所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集;
[0022]变更方法标注单元,用于根据所存储的调用关系生成调用关系依赖图,并根据方法变更集,在调用关系依赖图中对变更的方法进行标注;
[0023]回归测试单元,用于根据在调用关系依赖图中所标注的方法确定待测版本的回归范围,并根据回归范围进行回归测试。
[0024]利用上述根据本发明的基于调用关系依赖图的回归测试方法及系统,通过分析待测版本与待比较版本这两个版本的源码,得出两个版本之间发生变更的方法,以及待测版本的方法之间的调用关系,生成调用关系依赖图,使研发和测试人员依据该调用关系依赖图和变更的方法分析出待测版本改动的影响面,从而使得回归测试的范围更加精准且更有目的性,同时通过依赖关系图,也能够使研发人员分析出所提交测试的代码是否存在错改漏改,确保所修改的代码都能完整的覆盖其影响面。
[0025]为了实现上述以及相关目的,本发明的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。
【专利附图】

【附图说明】
[0026]通过参考以下结合附图的说明及权利要求书的内容,并且随着对本发明的更全面理解,本发明的其它目的及结果将更加明白及易于理解。在附图中:
[0027]图1为根据本发明实施例的基于调用关系依赖图的回归测试方法的流程示意图;
[0028]图2为根据本发明实施例的基于调用关系依赖图的回归测试系统逻辑结构框图。
[0029]在所有附图中相同的标号指示相似或相应的特征或功能。
【具体实施方式】
[0030]以下将结合附图对本发明的具体实施例进行详细描述。
[0031]针对前述现有的回归测试方法容易造成回归测试范围不精准、测试风险大和测试缺少目的性的问题。本发明通过对待测版本和待对比版本两个版本之间的方法进行比较,生成方法变更集,同时获取待测版本的方法之间的调用关系,生成调用关系依赖图,并根据方法变更集,在调用关系依赖图中对变更的方法进行标注,从而使研发人员可以依据该标注对待测版本进行检查和分析,确认是否有修改遗漏,并同时给出测试人员相应的测试建议;同样的,测试人员可以依据该标注对待测版本进行分析,确定出回归测试的范围,使回归测试的范围更加精准且更有目的性。
[0032]为了说明本发明提供的基于调用关系依赖图的回归测试方法,图1示出了根据本发明实施例的基于调用关系依赖图的回归测试方法的流程。
[0033]如图1所示,本发明提供的基于调用关系依赖图的回归测试方法包括:
[0034]SllO:将从版本管理库中获取的待比较版本的所有方法进行转存。
[0035]其中,在将从版本管理库中获取的待比较版本的所有方法进行转存之前,还包括:利用版本管理库所提供的接口,通过持续集成工具从版本管理库中获取待比较版本的所有方法;或者,直接从版本管理库中获取待比较版本的所有方法。
[0036]需要说明的是,上述的待比较版本是相对于待测版本而言的。实际上,持续集成工具能够持续构建版本管理库中的所有版本。也就是说,版本管理库中的所有版本都可以被持续集成工具所托管,通过持续集成工具可以获取版本管理库中的任何一个版本的代码(即一个版本中的所有方法)。
[0037]另外需要说明的是,持续集成工具包括:jenkins、CruiseControl和LuntBuild等,或者还可以根据需求构建持续集成工具。
[0038]具体地,由于不同版本管理库所提供的接口都不一样,因此,通过持续集成工具便能够轻易获取待测版本的代码。例如,版本管理库提供的是SVN接口,那么持续集成工具就会使用SVN接口获取代码,如果版本管理库提供的是git接口,那么持续集成工具就会使用git接口获取代码。
[0039]其中,在将从版本管理库中获取的待比较版本的所有方法进行转存的过程中,将所获取的待比较版本的所有方法转存到存储系统中。其中,该存储系统包括文件存储系统、数据库或者其他存储系统。
[0040]具体地,将所获取的待比较版本的所有方法进行转存的目的是:为了避免版本管理库所提供的接口差异所造成的版本之间的方法比较的适配难度,将所获取的某个版本的代码进行转存,可以按照用户所设计的数据结构去存储,更有利于下述所进行的两个版本之间的方法级别的比较。
[0041]S120:将版本管理库更新至待测版本,然后编译待测版本,获取待测版本的所有方法之间的调用关系,并进行存储。
[0042]其中,在获取待测版本的所有方法之间的调用关系的过程中,通过java字节码框架获取待测版本的所有方法之间的调用关系。其中,java字节码框架包括ASM、javaassist、bcel或者其他java字节码框架。在获取待测版本的所有方法之间的调用关系,并进行存储的过程中,将调用关系存储在运行系统的内存或者文件存储系统中。
[0043]S130:将待测版本的所有方法与所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集。
[0044]其中,在将待测版本的所有方法与所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集的过程中,通过源代码分析框架将待测版本的所有方法与所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集。其中,源代码分析框架包括JDT AST、javaparser或者其他源代码分析框架;方法变更集包括修改的方法集、新增的方法集和删除的方法集。
[0045]S140:根据所存储的调用关系生成调用关系依赖图,并根据方法变更集,在调用关系依赖图中对变更的方法进行标注。
[0046]具体地,根据修改的方法集、新增的方法集和删除的方法集,在调用关系依赖图中将修改的方法、新增的方法和删除的方法分别进行标注。
[0047]S150:根据在调用关系依赖图中所标注的方法确定待测版本的回归范围,并根据回归范围进行回归测试。
[0048]具体地,研发人员可以依据该标注对待测版本进行检查和分析,确认是否有修改遗漏,并同时给出测试人员相应的测试建议;测试人员可以依据该标注对待测版本进行分析,确定出待测版本的回归范围,并进行回归测试。
[0049]通过图1所示的流程可以看出,本发明所提供的基于调用关系依赖图的回归测试方法能够使测试人员更好的对待测版本进行回归测试,使回归测试的范围更加精准且更有目的性,同时也能够使研发人员分析出所提交测试的代码是否存在错改漏改,确保所修改的代码都能完整的覆盖其影响面。
[0050]为了更为清楚的说明本发明所提供的基于调用关系依赖图的回归测试方法,下述以示例的方式对本发明所提供的基于调用关系依赖图的回归测试方法进行详细说明。
[0051]需要说明的是,在本发明的其中一个示例中,使用jenkins从版本管理库中获取代码。具体地:
[0052]在jenkins上搭建一个持续构建的job,配置jenkins上的代码库分支,通过jenkins获取相应分支相应版本的源代码,同时利用jenkins的参数化构建,给用户提供一个可选框,用于输入待比较版本和更新版本。
[0053]对于待比较版本,当获取到代码管理库对应的版本之后,则先删除数据库中的方法表,其中方法表里面存放了方法名、方法体、参数和路径,然后遍历jenkins托管的所有java文件,利用AST提供的API获取包名和类名,获取方法名,并将方法的路径、方法名、参数、实现体全都转存入数据库中。
[0054]对于更新版本则通过版本管理库更新至待测版本,然后使用ASM扫描得出待测版本的每个方法的依赖关系,即得出类似A->B,B->C这样的数据结构,并保存在内存中。
[0055]将待测版本的所有方法与存入数据库中的初始版本的所有方法进行比较,获取变更列表,即添力卩、修改、删除的类。其中,通过AST提供的API获取的方法变更列表。
[0056]其中,对于添加的类,则通过AST获取方法内容保存在内存中的添加方法Add_List,并存入数据库的方法表中;
[0057]对于修改的类,则通过AST获取包名和类名,通过path寻找表中的旧方法列表并将该方法设置一个标记位为false ;通过AST遍历获得修改后的方法body体,与数据库存放的旧方法进行对比,若没有旧的方法,即在数据库中找不到相应的方法,则证明这个方法是这个修改的类新增的,即将这个方法添加到数据库的表中,并加入添加方法Add_List ;若有旧的方法,则进行diff操作,如果有改动,则将标记位设置为true,并且修改数据库的方法表中对应的方法实体;最后,将修改类中的修改的方法且标记位为true的方法依次存AModifie_List ;对于那些标记位为false的方法即为删除的方法,则将其存入DeletecLList 中;
[0058]对于删除的类,通过path寻找表中的方法列表,将这些方法添加的删除的方法列表Delete_List中,并存入内存,并将数据库中的方法从表中删除;
[0059]调用第三方图片生成工具Graphviz根据修改方法列表和添加方法列表生成调用关系依赖图;并将所有变更方法存入json文件供图片读取数据。在图片中将变更的方法标示出来,并与待比较版本进行对比。
[0060]通过上述示例并结合下述场景,能够充分地体现出本发明所提供的基于调用关系依赖图的回归测试方法的优点。
[0061]场景一
[0062]开发人员修改了类A方法a的几行代码,打印了相关的log,为了调试使用,对功能并没有影响,从调用关系依赖图来看,也只是修改了方法a,且调用关系并没有相关的改变,即调用a的方法都没有修改,因此分析出来的结果是可以不进行回归测试。
[0063]场景二
[0064]开发人员修改了类B方法b的代码,添加了本次功能需要添加的业务代码,加上了排重的处理,从调用关系依赖图看,修改了 b方法,同时调用b方法的c方法也相应地修改了,且C方法为MVC层的controller层,通过这个action,我们定位到了某个页面c,因此分析出来的结果是,需要对页面c进行验证测试,验证是否符合业务提出的需求,其他没有涉及到此功能的无需进行回归,只需精准回归c页面即可。
[0065]场景三
[0066]开发人员修改了类D方法d的代码,d方法是一个DAO层的代码,由于修改了代码,从逻辑上看必须修改d方法对应的service方法e,但是从依赖关系图看,研发只是修改了DAO层的d方法,而调用d方法的service方法e并没有任何修改,因此分析出的结果是开发改漏了代码,应该修改e方法的代码适应d方法,因此在提测前避免了错误。
[0067]与上述方法相对应,本发明还提供一种基于调用关系依赖图的回归测试系统,图2示出了根据本发明实施例的基于调用关系依赖图的回归测试系统逻辑结构。
[0068]如图2所示,本发明提供的基于调用关系依赖图的回归测试系统200包括方法转存单元210、调用关系获取单元220、变更集生成单元230、变更方法标注单元240和回归测试单元250。
[0069]其中,方法转存单元210用于将从版本管理库中获取的待比较版本的所有方法进行转存。其中,方法转存单元210在将从版本管理库中获取的待比较版本的所有方法进行转存之前,还包括:利用版本管理库所提供的接口,通过持续集成工具从版本管理库中获取待比较版本的所有方法;或者,直接从版本管理库中获取待比较版本的所有方法。
[0070]需要说明的是,上述的待比较版本是相对于待测版本而言的。实际上,持续集成工具能够持续构建版本管理库中的所有版本。也就是说,版本管理库中的所有版本都可以被持续集成工具所托管,通过持续集成工具可以获取版本管理库中的任何一个版本的代码(即一个版本中的所有方法)。
[0071]另外需要说明的是,持续集成工具包括:jenkins、CruiseControl和LuntBuild等,或者还可以根据需求构建持续集成工具。
[0072]具体地,由于不同版本管理库所提供的接口都不一样,因此,通过持续集成工具便能够轻易获取待测版本的代码。例如,版本管理库提供的是SVN接口,那么持续集成工具就会使用SVN接口获取代码,如果版本管理库提供的是git接口,那么持续集成工具就会使用git接口获取代码。
[0073]其中,方法转存单元210在将从版本管理库中获取的待比较版本的所有方法进行转存的过程中,将所获取的待比较版本的所有方法转存到存储系统中。其中,该存储系统包括文件存储系统、数据库或者其他存储系统。
[0074]具体地,将所获取的待比较版本的所有方法进行转存的目的是:为了避免版本管理库所提供的接口差异所造成的版本之间的方法比较的适配难度,将所获取的某个版本的代码进行转存,可以按照用户所设计的数据结构去存储,更有利于下述所进行的两个版本之间的方法级别的比较。
[0075]调用关系获取单元220用于将版本管理库更新至待测版本,然后编译待测版本,获取待测版本的所有方法之间的调用关系,并进行存储。
[0076]其中,调用关系获取单元220在获取待测版本的所有方法之间的调用关系的过程中,通过java字节码框架获取待测版本的所有方法之间的调用关系。其中,java字节码框架包括ASM、javaassist、bcel或者其他java字节码框架。调用关系获取单元220在获取待测版本的所有方法之间的调用关系,并进行存储的过程中,将调用关系存储在运行系统的内存或者文件存储系统中。
[0077]变更集生成单元230用于将待测版本的所有方法与所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集。
[0078]其中,变更集生成单元230在生成方法变更集的过程中,通过源代码分析框架将待测版本的所有方法与方法转存单元210中所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集。其中,源代码分析框架包括JDT AST、javaparser或者其他源代码分析框架;方法变更集包括修改的方法集、新增的方法集和删除的方法集。
[0079]变更方法标注单元240用于根据所存储的调用关系生成调用关系依赖图,并根据方法变更集,在调用关系依赖图中对变更的方法进行标注。
[0080]具体地,根据变更集生成单元230所生成的修改的方法集、新增的方法集和删除的方法集,在调用关系依赖图中将修改的方法、新增的方法和删除的方法分别进行标注。
[0081]回归测试单元250用于根据在调用关系依赖图中所标注的方法确定待测版本的回归范围,并根据回归的范围进行回归测试。
[0082]具体地,研发人员可以依据变更方法标注单元240所标注的方法,对待测版本进行检查和分析,确认是否有修改遗漏,并同时给出测试人员相应的测试建议;测试人员可以依据该标注对待测版本进行分析,确定出待测版本的回归范围,并进行回归测试。
[0083]通过上述能够看出,本发明所提供的基于调用关系依赖图的回归测试方法及系统,通过分析得出两个版本之间发生变更的方法,以及待测版本的方法之间的调用关系,生成调用关系依赖图,使研发和测试人员依据该调用关系依赖图和变更的方法分析出待测版本改动的影响面,从而使得回归测试的范围更加精准且更有目的性,同时通过依赖关系图,也能够使研发人员分析出所提交测试的代码是否存在错改漏改,确保所修改的代码都能完整的覆盖其影响面。
[0084]如上参照附图以示例的方式描述了根据本发明的基于调用关系依赖图的回归测试方法及系统。但是,本领域技术人员应当理解,对于上述本发明所提出的基于调用关系依赖图的回归测试方法及系统,还可以在不脱离本
【发明内容】
的基础上做出各种改进。因此,本发明的保护范围应当由所附的权利要求书的内容确定。
【权利要求】
1.一种基于调用关系依赖图的回归测试方法,包括: 将从版本管理库中获取的待比较版本的所有方法进行转存; 将所述版本管理库更新至待测版本,然后编译所述待测版本,获取所述待测版本的所有方法之间的调用关系,并进行存储; 将所述待测版本的所有方法与所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集; 根据所存储的调用关系生成调用关系依赖图,并根据所述方法变更集,在所述调用关系依赖图中对所述变更的方法进行标注; 根据在所述调用关系依赖图中所标注的方法确定所述待测版本的回归范围,并根据所述回归范围进行回归测试。
2.如权利要求1所述的基于调用关系依赖图的回归测试方法,其中,在将从版本管理库中获取的待比较版本的所有方法进行转存之前,还包括: 利用所述版本管理库所提供的接口,通过持续集成工具从所述版本管理库中获取所述待比较版本的所有方法;或者, 直接从所述版本管理库中获取所述待比较版本的所有方法。
3.如权利要求1所述的基于调用关系依赖图的回归测试方法,其中,在将从版本管理库中获取的待比较版本的所有方法进行转存的过程中, 将所获取的待比较版本的所有方法转存到存储系统中。
4.如权利要求1所述的基于调用关系依赖图的回归测试方法,其中,在获取所述待测版本的所有方法之间的调用关系的过程中, 通过java字节码框架获取所述待测版本的所有方法之间的调用关系。
5.如权利要求1所述的基于调用关系依赖图的回归测试方法,其中,在获取所述待测版本的所有方法之间的调用关系,并进行存储的过程中, 将所述调用关系存储在运行系统的内存或者文件存储系统中。
6.如权利要求1所述的基于调用关系依赖图的回归测试方法,其中,在将所述待测版本的所有方法与所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集的过程中, 通过源代码分析框架将所述待测版本的所有方法与所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集。
7.如权利要求1所述的基于调用关系依赖图的回归测试方法,其中,所述方法变更集包括修改的方法集、新增的方法集和删除的方法集。
8.一种基于调用关系依赖图的回归测试系统,包括: 方法转存单元,用于将从版本管理库中获取的待比较版本的所有方法进行转存; 调用关系获取单元,用于将所述版本管理库更新至待测版本,然后编译所述待测版本,获取所述待测版本的所有方法之间的调用关系,并进行存储; 变更集生成单元,用于将所述待测版本的所有方法与所述方法转存单元中所转存的待比较版本的所有方法进行比较,获取发生变更的方法,生成方法变更集; 变更方法标注单元,用于根据所存储的调用关系生成调用关系依赖图,并根据所述方法变更集,在所述调用关系依赖图中对所述变更的方法进行标注;回归测试单元,用于根据在所述调用关系依赖图中所标注的方法确定所述待测版本的回归范围,并根据所述回归范围进行回归测试。
9.如权利要求8所述的基于调用关系依赖图的回归测试系统,其中,所述方法转存单元在将从版本管理库中获取的待比较版本的所有方法进行转存之前,还包括: 利用所述版本管理库所提供的接口,通过持续集成工具从所述版本管理库中获取所述待比较版本的所有方法;或者, 直接从所述版本管理库中获取所述待比较版本的所有方法。
10.如权利要求8所述的基于调用关系依赖图的回归测试系统,其中,所述方法转存单元在将从版本管理库中获取的待比较版本的所有方法进行转存的过程中, 将所获取的待比较版本的所有方法转存到存储系统中。
11.如权利要求8所述的基于调用关系依赖图的回归测试系统,其中,所述调用关系获取单元在获取所述待测版本的所有方法之间的调用关系的过程中, 通过java字节码框架获取所述待测版本的所有方法之间的调用关系。
12.如权利要求8所述的基于调用关系依赖图的回归测试系统,其中,所述调用关系获取单元在获取所述待测版本的所有方法之间的调用关系,并进行存储的过程中, 将所述调用关系存储在运行系统的内存或者文件存储系统中。
13.如权利要求8所述的基于调用关系依赖图的回归测试装置,其中,所述变更集生成单元在生成方法变更集的过程中, 通过源代码分析框架将所述待测版本的所有方法与所述方法转存单元中所转存的待比较版本的所有方法进行比较,获`取发生变更的方法,生成方法变更集。
【文档编号】G06F11/36GK103699488SQ201310745825
【公开日】2014年4月2日 申请日期:2013年12月30日 优先权日:2013年12月30日
【发明者】陈伟鸿, 刘威, 李剑 申请人:优视科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1