一种用于回归测试选取测试用例的系统及方法与流程

文档序号:13455719阅读:214来源:国知局
一种用于回归测试选取测试用例的系统及方法与流程
:本发明属于计算机软件测试技术领域,主要用于大型及互联网软件的开发、维护阶段,具体涉及一种基于测试用例与代码逻辑、源码版本关系矩阵的用于回归测试选取测试用例的系统及方法。

背景技术:
:软件的变化可能源于发现错误并作了修改,也可能是因为在继承或者维护阶段加入了新的模块。但软件中所包含的错误被发现时,如果错误跟踪与管理系统不够完善,就可能会遗漏对这些错误的修改;而开发者对错误理解得不够透彻,也可能导致所作的不正确的修改恰好修正了错误的外在表现,没有修复错误本身,从而造成修改失败。修改还有可能产生副作用,从而导致软件未被修改的部分又产生新的问题,使本来正常的功能产生错误。同样,在有新代码加入软件的时候,除了新加入的代码有可能含有错误外,新代码还有可能对原有的代码带来影响。因此,每当软件发生变化时,必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。同时,还需要补充新的测试用例测试新的或被修改了的功能。为了验证修改的正确性及其对其他功能模块的影响就需要进行回归测试。回归用例选取在工业界一直以来没有可以达到商用标准的技术,基本上要么依赖人的经验来进行判断和选取,要么需要花费大量成本进行全量回归。在对于测试要求非常严格的行业,解决该问题最主要的方法是依赖于自动化测试进行全量回归,而自动化测试的用例开发、维护以及运行结果分析确认,以及由于程序更新导致大量的自动化测试失效,在大型系统维护过程中会产生巨大的工作量。

技术实现要素:
:为此,本发明所要解决的技术问题在于现有技术中用于软件测试的回归用例选取需要花费大量成本,程序更新容易导致大量的自动化测试失效,工作量大,从而提出一种基于测试用例与代码逻辑、源码版本关系矩阵的用于回归测试选取测试用例的系统及方法。为达到上述目的,本发明的技术方案如下:一种用于回归测试选取测试用例的系统,包括:源码分块装置,所述源码分块装置用于记录程序运行过程中完整的函数执行剖面信息。剖面收集装置,所述剖面收集装置用于根据所述源码分块装置中的函数执行剖面信息生成一个用于描述程序的测试用例与最后运行版本的数据矩阵。矩阵计算装置,所述矩阵计算装置用于根据所述剖面收集装置中的数据矩阵计算测试用例在新的运行版本中的回归优先值,并引导用户根据所述回归优先值进行测试用例的回归。作为上述技术方案的优选,所述源码分块装置具体包括:词法分析模块,所述词法分析模块用于对待测试程序的字符流进行扫描并识别单词和语句,将所述语句进行语句类型的标记,所述语句类型包括分支语句和顺序语句。类型分类模块,所述类型分类模块用于根据所述词法分析模块输出的语句类型将程序代码分割成多个代码块,所述代码块包括顺序块和分支块,所述顺序块是一组没有分支判断的连续代码语句,所述分支块是分支判断语句的节点。结构标识模块,所述结构标识模块用于分析所述类型分类模块输出的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识。结构校正模块,所述结构校正模块用于校正结构标识模块分析得到的块结构逻辑位置,生成描述程序逻辑结构的块编码表。植入探针模块,所述植入探针模块用于在处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息,所述测试信息包括函数执行剖面信息。作为上述技术方案的优选,所述剖面收集装置具体包括:测试用例选取模块,所述测试用例选取模块用于从之前保存的测试历史中获取每个测试用例的最后运行版本。测试用例与函数关联模块,所述测试用例与函数关联模块用于根据所述测试用例选取模块获取每个测试用例的最后运行版本中的函数执行剖面信息,并生成一个用于描述程序的测试用例与运行版本的数据矩阵。作为上述技术方案的优选,所述矩阵计算装置具体包括:矩阵计算模块,所述矩阵计算模块用于将所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息与新的运行版本中的函数信息进行对比,计算并获取最终影响系数。矩阵优先级排列模块,所述矩阵优先级排列模块用于将所述矩阵计算模块中的最终影响系数进行排列,获取每个测试用例在新的运行版本中的回归优先值。矩阵计算呈现模块,所述矩阵计算呈现模块用于引导用户根据所述回归优先值进行测试用例的回归。作为上述技术方案的优选,所述矩阵计算模块具体包括:函数执行剖面信息获取子模块,获取所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息和新的运行版本中的函数信息。函数对比子模块,将所述函数执行剖面信息中的每一个函数与所述新的运行版本中的函数信息进行对比,若出现函数改动变化,则将对应的测试用例的影响系数+1,若出现函数对比删除,则将对应的测试用例的影响系数+2。最终影响系数获取子模块,将每个测试用例的最后运行版本中函数执行剖面信息的所有函数对比获得的影响系数进行累计,获取每个测试用例的最终影响系数。一种用于回归测试选取测试用例的方法,包括如下步骤:S1:记录程序运行过程中的完整的函数执行剖面信息。S2:根据所述步骤S1中的函数执行剖面信息生成一个用于描述程序的测试用例与最后运行版本的数据矩阵。S3:根据所述步骤S2中的数据矩阵计算测试用例在新的运行版本中的回归优先值,并引导用户根据所述回归优先值进行测试用例的回归。作为上述技术方案的优选,所述步骤S1具体包括如下步骤:S11:对待测试程序的字符流进行扫描并识别单词和语句,将所述语句进行语句类型的标记,所述语句类型包括分支语句和顺序语句。S12:根据所述步骤S11中的语句类型将程序代码分割成多个代码块,所述代码块包括顺序块和分支块,所述顺序块是一组没有分支判断的连续代码语句,所述分支块是分支判断语句的节点。S13:分析所述步骤S12中的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识。S14:校正所述步骤S13中的块结构逻辑位置,生成描述程序逻辑结构的块编码表。S15:在所述步骤S14处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息,所述测试信息包括函数执行剖面信息。作为上述技术方案的优选,所述步骤S2具体包括如下步骤:S21:从之前保存的测试历史中提取测试用例的最后运行版本。S22:获取每个测试用例的最后运行版本中的函数执行剖面信息,并生成一个用于描述程序的测试用例与运行版本的数据矩阵。作为上述技术方案的优选,所述步骤S3具体包括如下步骤:S31:将所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息与新的运行版本中的函数信息进行对比,计算并获取最终影响系数。S32:将所述步骤S31中的最终影响系数进行排列,获取每个测试用例在新的运行版本中的回归优先值。S33:引导用户根据所述步骤S32中的回归优先值进行测试用例的回归。作为上述技术方案的优选,所述步骤S31具体包括如下步骤:S311:获取所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息和新的运行版本中的函数信息。S312:将所述函数执行剖面信息中的每一个函数与所述新的运行版本中的函数信息进行对比,若出现函数改动变化,则将对应的测试用例的影响系数+1,若出现函数对比删除,则将对应的测试用例的影响系数+2。S313:将每个测试用例的最后运行版本中函数执行剖面信息的所有函数对比获得的影响系数进行累计,获取每个测试用例的最终影响系数。本发明的有益效果在于:(1)测试用例的回归无需特殊制作,让用户在平时的测试过程中自动的记录回归所需要的数据,无需附加其它回归数据,从而降低测试回归难度与时间。(2)测试用例自动回归,通过函数对比得出测试用例回归优先值,排序出改动最多、风险最高的测试用例,从而在测试任务紧张的情况下给测试人员指路。影响系数的提出解决了测试用例选取精准和安全不能在算法上同时兼顾的问题,通过影响系数用户可以自行根据项目情况(时间、风险承受能力等)选择回归的测试用例。(3)回归测试的计算考虑了工程的实际情况,例如由于时间因素,并不是每个测试用例都在最新版本中执行,测试用例的执行数据分散在各个版本中。算法充分考虑了工程的这种实际情况,计算过程中将历史数据都进行了迭代和考虑,计算结果也能够更加的准确和真实。(4)以函数为剖面进行分析,而不是程序的控制流为剖面,可以很大程度提升计算的性能,以较粗的颗粒度进行计算,同时也可以降低的选取风险,提供更加安全的测试用例选取结果。同时函数剖面可以体现所有语言层面的一些变化和信息,因为在面向对象语言里,无论有多少语言特性,最后都在函数这个层面落地和得以运行。附图说明:以下附图仅旨在于对本发明做示意性说明和解释,并不限定本发明的范围。其中:图1为本发明一个实施例的一种用于回归测试选取测试用例的系统;图2为本发明一个实施例的一种用于回归测试选取测试用例的方法。具体实施方式:实施例1如图1所示,本发明的用于回归测试选取测试用例的系统,包括:源码分块装置,所述源码分块装置用于记录程序运行过程中完整的函数执行剖面信息。所述源码分块装置是通过程序插桩技术实现的。所述源码分块装置具体包括:词法分析模块,所述词法分析模块用于对待测试程序的字符流进行扫描并识别单词和语句,将所述语句进行语句类型的标记,所述语句类型包括分支语句和顺序语句。类型分类模块,所述类型分类模块用于根据所述词法分析模块输出的语句类型将程序代码分割成多个代码块,所述代码块包括顺序块和分支块,所述顺序块是一组没有分支判断的连续代码语句,所述分支块是分支判断语句的节点。结构标识模块,所述结构标识模块用于分析所述类型分类模块输出的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识。结构校正模块,所述结构校正模块用于校正结构标识模块分析得到的块结构逻辑位置,生成描述程序逻辑结构的块编码表。植入探针模块,所述植入探针模块用于在处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息,所述测试信息包括函数执行剖面信息。用例和代码覆盖率的接收、存储和以及关联分析模块。剖面收集装置,所述剖面收集装置用于根据所述源码分块装置中的函数执行剖面信息生成一个用于描述程序的测试用例与最后运行版本的数据矩阵。所述剖面收集装置还用于区分并记录每个测试用例对应的函数执行剖面信息,区分并记录每个运行版本每个测试用例的函数执行剖面信息。通过“一种基于用例与源码双向追溯的测试装置及方法”(专利登记号201410345813.4)的专利技术,来实现聚类选择的剖面收集过程,从之前保存的测试历史中提取测试用例最后运行的版本,并从结果子集中提取出每个测试用例在程序最后运行版本上的执行函数信息,并用于矩阵计算。所述剖面收集装置具体包括:测试用例选取模块,所述测试用例选取模块用于从之前保存的测试历史中获取每个测试用例的最后运行版本。测试用例与函数关联模块,所述测试用例与函数关联模块用于根据通过“一种基于用例与源码双向追溯的测试装置及方法”(专利登记号201410345813.4)的专利技术,结合测试用例选取模块,获取每个测试用例最后运行版本运行中函数执行剖面信息,放入矩阵T-V中用于最后的比对,即生成一个用于描述程序的测试用例与运行版本的数据矩阵T-V。矩阵计算装置,在执行剖面中,每个对象拥有多个属性,每个属性对应程序的一个函数,用以指示该函数是否在最新版本对象对应的测试用例执行中被调用。每一个测试用例对应的函数执行剖面称作剖面实例,所述矩阵计算装置用于根据所述剖面收集装置中的数据矩阵计算测试用例在新的运行版本中的回归优先值,并引导用户根据所述回归优先值进行测试用例的回归。通过矩阵计算模块分析多个版本的函数剖面级别代码变化的比对结果。通过矩阵优先级排列模块,得出测试用例在新版本中的回归优先值,并采用矩阵计算呈现模块引导用户通过该回归优先值排行进行测试用例的回归,从而大幅度缩短回归测试的时间。所述矩阵计算装置具体包括:矩阵计算模块,所述矩阵计算模块用于将所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息与新的运行版本中的函数信息进行对比,计算并获取最终影响系数。所述矩阵计算模块具体包括:函数执行剖面信息获取子模块,获取所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息和新的运行版本中的函数信息。函数对比子模块,将所述函数执行剖面信息中的每一个函数与所述新的运行版本中的函数信息进行对比,若出现函数改动变化,则将对应的测试用例的影响系数+1,若出现函数对比删除,则将对应的测试用例的影响系数+2。最终影响系数获取子模块,将每个测试用例的最后运行版本中函数执行剖面信息的所有函数对比获得的影响系数进行累计,获取每个测试用例的最终影响系数。矩阵优先级排列模块,所述矩阵优先级排列模块用于将所述矩阵计算模块中的最终影响系数进行排列,获取每个测试用例在新的运行版本中的回归优先值。矩阵计算呈现模块,所述矩阵计算呈现模块用于引导用户根据所述回归优先值进行测试用例的回归。具体实施方式如下:一、剖面收集装置生成一个用于描述程序的测试用例与最后运行版本的数据矩阵T-V。假设被测试软件P的当前最新运行版本为Vn,建立一个矩阵,该矩阵通过测试用例ID(唯一标识)取得运行版本Vn之前所有运行版本的测试用例执行的最后情况(测试用例最后运行时间所对应的版本),得出结果定义为数据矩阵T-V。运行版本与测试用例的关系如下所示:其中,T为Vn版本所有的测试用例,Vx为Vn版本之前的测试用例对应的版本,“1”表示测试用例最后运行的时间所对应的版本位置,例如T1最后运行的版本为V2,Tn最后运行的版本为V4。根据上述表格得出数据矩阵T-V,即每个ID测试用例所对应的版本,如下所示:测试用例T1T2T3T4T5运行版本V1V2V3V4V5二、矩阵计算装置计算测试用例在新的运行版本中的回归优先值,并引导用户根据所述回归优先值进行测试用例的回归。矩阵计算模块:数据矩阵T-V与最新运行版本Vn的函数对比计算。数据矩阵T-V中已经取得了测试用例最后的运行情况,所以该矩阵中的测试用例均为运行过且具有有效地测试数据,通过剖面收集装置,获取其中数据矩阵T-V版本中每一个测试用例中的所在执行版本的函数执行剖面,通过矩阵计算模块对其函数执行列表中每一个函数和最新运行版本Vn中函数进行对比,如果函数发生了变化,那么对比的测试用例的影响系数+1,如果该函数在Vn版本中被删除,那么影响度+2,对一个用例的所有函数遍历并且累计计算以后,使用矩阵优先级排列模块得到测试用例的优先级顺序,最终使用矩阵计算呈现模块进行数据的展示。数据矩阵T-V与最后运行版本Vn对比如下所示:T-VM1M2M3M4MnVn版本函数T1+Vn版本函数T2++Vn版本函数T3--Vn版本函数T4Vn版本函数TnVn版本函数其中,“M”为函数、“+”为对比后改动过的函数、“-”为对比后删除的函数。通过“函数改动变化+1”与“函数对比删除+2”对比得结果如下:测试用例T1T2T3T4Tn运行版本V3V3V4V4V4最终影响系数12400从上述示例结果用矩阵优先级排列模块可以得出,T3为最高、其次是T2、T1,测试用例T4为最低。并通过矩阵计算呈现模块引导,测试用例T3计算得到的优先级最高,需要优先运行,其次T2、T1,T4因其运行剖面的函数在新版本中的执行逻辑均没有发生变化,则无需要回归,如下面的表格所示:T3T2T1T4TnV3V3V2V4V442100最先回归第二回归第三回归不回归不回归本实施例所述的用于回归测试选取测试用例的系统,通过源码分块装置记录程序运行过程中完整的函数执行剖面信息,通过剖面收集装置生成一个用于描述程序的测试用例与最后运行版本的数据矩阵,通过矩阵计算装置计算测试用例在新的运行版本中的回归优先值,并引导用户根据回归优先值进行测试用例的回归。无需为测试用例单独制定特有的自动化脚本,通过“一种基于用例与源码双向追溯的测试装置及方法”(专利登记号201410345813.4)的专利技术,在普通的手工黑盒测试过程中,自动给出测试用例在测试过程中运行的函数执行剖面。在记录了多个版本的多个测试用例的函数执行剖面信息以后,在通过计算每个测试用例的最新执行版本里面的函数和当前最新版本程序的函数的代码差异信息,计算每个测试用例测试是否需要被选取出来进行测试,回归流程可以使测试人员在日常的测试过程中就已经把回归的影响数据进行记录并且存储,当版本更新发布后,就可以直接给出用例的选取结果以及影响度排序,无需测试人员进行其他的辅助的、人工的判断。基于算法给出的结果是安全和精确的,也无需因为小部分的代码更新去回归整个的测试用例集。可以大幅度的提升在维护阶段软件测试的效率,并且降低新版本的上线风险。实施例2如图2所示,本发明的用于回归测试选取测试用例的方法,包括如下步骤:S1:记录程序运行过程中的完整的函数执行剖面信息。所述步骤S1具体包括如下步骤:S11:对待测试程序的字符流进行扫描并识别单词和语句,将所述语句进行语句类型的标记,所述语句类型包括分支语句和顺序语句。S12:根据所述步骤S11中的语句类型将程序代码分割成多个代码块,所述代码块包括顺序块和分支块,所述顺序块是一组没有分支判断的连续代码语句,所述分支块是分支判断语句的节点。S13:分析所述步骤S12中的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识。S14:校正所述步骤S13中的块结构逻辑位置,生成描述程序逻辑结构的块编码表。S15:在所述步骤S14处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息,所述测试信息包括函数执行剖面信息。S2:根据所述步骤S1中的函数执行剖面信息生成一个用于描述程序的测试用例与最后运行版本的数据矩阵。所述步骤S2具体包括如下步骤:S21:从之前保存的测试历史中提取测试用例的最后运行版本。S22:获取每个测试用例的最后运行版本中的函数执行剖面信息,并生成一个用于描述程序的测试用例与运行版本的数据矩阵。S3:根据所述步骤S2中的数据矩阵计算测试用例在新的运行版本中的回归优先值,并引导用户根据所述回归优先值进行测试用例的回归。所述步骤S3具体包括如下步骤:S31:将所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息与新的运行版本中的函数信息进行对比,计算并获取最终影响系数。所述步骤S31具体包括如下步骤:S311:获取所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息和新的运行版本中的函数信息。S312:将所述函数执行剖面信息中的每一个函数与所述新的运行版本中的函数信息进行对比,若出现函数改动变化,则将对应的测试用例的影响系数+1,若出现函数对比删除,则将对应的测试用例的影响系数+2。S313:将每个测试用例的最后运行版本中函数执行剖面信息的所有函数对比获得的影响系数进行累计,获取每个测试用例的最终影响系数。S32:将所述步骤S31中的最终影响系数进行排列,获取每个测试用例在新的运行版本中的回归优先值。S33:引导用户根据所述步骤S32中的回归优先值进行测试用例的回归。显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1