CN105528293A - 一种用于回归测试选取测试用例的***及方法 - Google Patents
一种用于回归测试选取测试用例的***及方法 Download PDFInfo
- Publication number
- CN105528293A CN105528293A CN201510919377.1A CN201510919377A CN105528293A CN 105528293 A CN105528293 A CN 105528293A CN 201510919377 A CN201510919377 A CN 201510919377A CN 105528293 A CN105528293 A CN 105528293A
- Authority
- CN
- China
- Prior art keywords
- test case
- function
- module
- test
- version
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/368—Test management for test version control, e.g. updating test cases to a new software version
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
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)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种用于回归测试选取测试用例的***和方法,通过源码分块装置记录程序运行过程中完整的函数执行剖面信息,通过剖面收集装置生成一个用于描述程序的测试用例与最后运行版本的数据矩阵,通过矩阵计算装置计算测试用例在新的运行版本中的回归优先值,并引导用户根据回归优先值进行测试用例的回归。回归流程可以使用户在日常的测试过程中就已经把回归的影响数据进行记录并且存储,当版本更新发布后,就可以直接给出测试用例的选取结果以及影响度排序,无需测试人员进行其他的辅助的、人工的判断。无需因为小部分的代码更新去回归整个的测试用例集,可以大幅度的提升在维护阶段软件测试的效率,并且降低新版本的上线风险。
Description
技术领域:
本发明属于计算机软件测试技术领域,主要用于大型及互联网软件的开发、维护阶段,具体涉及一种基于测试用例与代码逻辑、源码版本关系矩阵的用于回归测试选取测试用例的***及方法。
背景技术:
软件的变化可能源于发现错误并作了修改,也可能是因为在继承或者维护阶段加入了新的模块。但软件中所包含的错误被发现时,如果错误跟踪与管理***不够完善,就可能会遗漏对这些错误的修改;而开发者对错误理解得不够透彻,也可能导致所作的不正确的修改恰好修正了错误的外在表现,没有修复错误本身,从而造成修改失败。修改还有可能产生副作用,从而导致软件未被修改的部分又产生新的问题,使本来正常的功能产生错误。同样,在有新代码加入软件的时候,除了新加入的代码有可能含有错误外,新代码还有可能对原有的代码带来影响。因此,每当软件发生变化时,必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。同时,还需要补充新的测试用例测试新的或被修改了的功能。为了验证修改的正确性及其对其他功能模块的影响就需要进行回归测试。回归用例选取在工业界一直以来没有可以达到商用标准的技术,基本上要么依赖人的经验来进行判断和选取,要么需要花费大量成本进行全量回归。在对于测试要求非常严格的行业,解决该问题最主要的方法是依赖于自动化测试进行全量回归,而自动化测试的用例开发、维护以及运行结果分析确认,以及由于程序更新导致大量的自动化测试失效,在大型***维护过程中会产生巨大的工作量。
发明内容:
为此,本发明所要解决的技术问题在于现有技术中用于软件测试的回归用例选取需要花费大量成本,程序更新容易导致大量的自动化测试失效,工作量大,从而提出一种基于测试用例与代码逻辑、源码版本关系矩阵的用于回归测试选取测试用例的***及方法。
为达到上述目的,本发明的技术方案如下:
一种用于回归测试选取测试用例的***,包括:
源码分块装置,所述源码分块装置用于记录程序运行过程中完整的函数执行剖面信息。
剖面收集装置,所述剖面收集装置用于根据所述源码分块装置中的函数执行剖面信息生成一个用于描述程序的测试用例与最后运行版本的数据矩阵。
矩阵计算装置,所述矩阵计算装置用于根据所述剖面收集装置中的数据矩阵计算测试用例在新的运行版本中的回归优先值,并引导用户根据所述回归优先值进行测试用例的回归。
作为上述技术方案的优选,所述源码分块装置具体包括:
词法分析模块,所述词法分析模块用于对待测试程序的字符流进行扫描并识别单词和语句,将所述语句进行语句类型的标记,所述语句类型包括分支语句和顺序语句。
类型分类模块,所述类型分类模块用于根据所述词法分析模块输出的语句类型将程序代码分割成多个代码块,所述代码块包括顺序块和分支块,所述顺序块是一组没有分支判断的连续代码语句,所述分支块是分支判断语句的节点。
结构标识模块,所述结构标识模块用于分析所述类型分类模块输出的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识。
结构校正模块,所述结构校正模块用于校正结构标识模块分析得到的所述块结构逻辑位置,生成描述程序逻辑结构的块编码表。
植入探针模块,所述植入探针模块用于在处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息,所述测试信息包括函数执行剖面信息。
作为上述技术方案的优选,所述剖面收集装置具体包括:
测试用例选取模块,所述测试用例选取模块用于从之前保存的测试历史中获取每个测试用例的最后运行版本。
测试用例与函数关联模块,所述测试用例与函数关联模块用于根据所述测试用例选取模块获取每个测试用例的最后运行版本中的函数执行剖面信息,并生成一个用于描述程序的测试用例与运行版本的数据矩阵。
作为上述技术方案的优选,所述矩阵计算装置具体包括:
矩阵计算模块,所述矩阵计算模块用于将所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息与新的运行版本中的函数信息进行对比,计算并获取最终影响系数。
矩阵优先级排列模块,所述矩阵优先级排列模块用于将所述矩阵计算模块中的最终影响系数进行排列,获取每个测试用例在新的运行版本中的回归优先值。
矩阵计算呈现模块,所述矩阵计算呈现模块用于引导用户根据所述回归优先值进行测试用例的回归。
作为上述技术方案的优选,所述矩阵计算模块具体包括:
函数执行剖面信息获取子模块,获取所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息和新的运行版本中的函数信息。
函数对比子模块,将所述函数执行剖面信息中的每一个函数与所述新的运行版本中的函数信息进行对比,若出现函数改动变化,则将对应的测试用例的影响系数+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测试用例所对应的版本,如下所示:
测试用例 | T1 | T2 | T3 | T4 | T5 |
运行版本 | V1 | V2 | V3 | V4 | V5 |
二、矩阵计算装置计算测试用例在新的运行版本中的回归优先值,并引导用户根据所述回归优先值进行测试用例的回归。
矩阵计算模块:数据矩阵T-V与最新运行版本Vn的函数对比计算。数据矩阵T-V中已经取得了测试用例最后的运行情况,所以该矩阵中的测试用例均为运行过且具有有效地测试数据,通过剖面收集装置,获取其中数据矩阵T-V版本中每一个测试用例中的所在执行版本的函数执行剖面,通过矩阵计算模块对其函数执行列表中每一个函数和最新运行版本Vn中函数进行对比,如果函数发生了变化,那么对比的测试用例的影响系数+1,如果该函数在Vn版本中被删除,那么影响度+2,对一个用例的所有函数遍历并且累计计算以后,使用矩阵优先级排列模块得到测试用例的优先级顺序,最终使用矩阵计算呈现模块进行数据的展示。
数据矩阵T-V与最后运行版本Vn对比如下所示:
T-V | M1 | M2 | M3 | M4 | Mn | Vn版本函数 |
T1 | + | Vn版本函数 | ||||
T2 | + | + | Vn版本函数 | |||
T3 | - | - | Vn版本函数 | |||
T4 | Vn版本函数 | |||||
Tn | Vn版本函数 |
其中,“M”为函数、“+”为对比后改动过的函数、“-”为对比后删除的函数。
通过“函数改动变化+1”与“函数对比删除+2”对比得结果如下:
测试用例 | T1 | T2 | T3 | T4 | Tn |
运行版本 | V3 | V3 | V4 | V4 | V4 |
最终影响系数 | 1 | 2 | 4 | 0 | 0 |
从上述示例结果用矩阵优先级排列模块可以得出,T3为最高、其次是T2、T1,测试用例T4为最低。并通过矩阵计算呈现模块引导,测试用例T3计算得到的优先级最高,需要优先运行,其次T2、T1,T4因其运行剖面的函数在新版本中的执行逻辑均没有发生变化,则无需要回归,如下面的表格所示:
T3 | T2 | T1 | T4 | Tn |
V3 | V3 | V2 | V4 | V4 |
4 | 2 | 1 | 0 | 0 |
最先回归 | 第二回归 | 第三回归 | 不回归 | 不回归 |
本实施例所述的用于回归测试选取测试用例的***,通过源码分块装置记录程序运行过程中完整的函数执行剖面信息,通过剖面收集装置生成一个用于描述程序的测试用例与最后运行版本的数据矩阵,通过矩阵计算装置计算测试用例在新的运行版本中的回归优先值,并引导用户根据回归优先值进行测试用例的回归。无需为测试用例单独制定特有的自动化脚本,通过“一种基于用例与源码双向追溯的测试装置及方法”(专利登记号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中的回归优先值进行测试用例的回归。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。
Claims (10)
1.一种用于回归测试选取测试用例的***,其特征在于,包括:
源码分块装置,所述源码分块装置用于记录程序运行过程中完整的函数执行剖面信息;
剖面收集装置,所述剖面收集装置用于根据所述源码分块装置中的函数执行剖面信息生成一个用于描述程序的测试用例与最后运行版本的数据矩阵;
矩阵计算装置,所述矩阵计算装置用于根据所述剖面收集装置中的数据矩阵计算测试用例在新的运行版本中的回归优先值,并引导用户根据所述回归优先值进行测试用例的回归。
2.根据权利要求1所述的用于回归测试选取测试用例的***,其特征在于,所述源码分块装置具体包括:
词法分析模块,所述词法分析模块用于对待测试程序的字符流进行扫描并识别单词和语句,将所述语句进行语句类型的标记,所述语句类型包括分支语句和顺序语句;
类型分类模块,所述类型分类模块用于根据所述词法分析模块输出的语句类型将程序代码分割成多个代码块,所述代码块包括顺序块和分支块,所述顺序块是一组没有分支判断的连续代码语句,所述分支块是分支判断语句的节点;
结构标识模块,所述结构标识模块用于分析所述类型分类模块输出的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识;
结构校正模块,所述结构校正模块用于校正结构标识模块分析得到的所述块结构逻辑位置,生成描述程序逻辑结构的块编码表;
植入探针模块,所述植入探针模块用于在处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息,所述测试信息包括函数执行剖面信息。
3.根据权利要求1所述的用于回归测试选取测试用例的***,其特征在于,所述剖面收集装置具体包括:
测试用例选取模块,所述测试用例选取模块用于从之前保存的测试历史中获取每个测试用例的最后运行版本;
测试用例与函数关联模块,所述测试用例与函数关联模块用于根据所述测试用例选取模块获取每个测试用例的最后运行版本中的函数执行剖面信息,并生成一个用于描述程序的测试用例与运行版本的数据矩阵。
4.根据权利要求1所述的用于回归测试选取测试用例的***,其特征在于,所述矩阵计算装置具体包括:
矩阵计算模块,所述矩阵计算模块用于将所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息与新的运行版本中的函数信息进行对比,计算并获取最终影响系数;
矩阵优先级排列模块,所述矩阵优先级排列模块用于将所述矩阵计算模块中的最终影响系数进行排列,获取每个测试用例在新的运行版本中的回归优先值;
矩阵计算呈现模块,所述矩阵计算呈现模块用于引导用户根据所述回归优先值进行测试用例的回归。
5.根据权利要求4所述的用于回归测试选取测试用例的***,其特征在于,所述矩阵计算模块具体包括:
函数执行剖面信息获取子模块,获取所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息和新的运行版本中的函数信息;
函数对比子模块,将所述函数执行剖面信息中的每一个函数与所述新的运行版本中的函数信息进行对比,若出现函数改动变化,则将对应的测试用例的影响系数+1,若出现函数对比删除,则将对应的测试用例的影响系数+2;
最终影响系数获取子模块,将每个测试用例的最后运行版本中函数执行剖面信息的所有函数对比获得的影响系数进行累计,获取每个测试用例的最终影响系数。
6.一种用于回归测试选取测试用例的方法,其特征在于,包括如下步骤:
S1:记录程序运行过程中的完整的函数执行剖面信息;
S2:根据所述步骤S1中的函数执行剖面信息生成一个用于描述程序的测试用例与最后运行版本的数据矩阵;
S3:根据所述步骤S2中的数据矩阵计算测试用例在新的运行版本中的回归优先值,并引导用户根据所述回归优先值进行测试用例的回归。
7.根据权利要求6所述的用于回归测试选取测试用例的方法,其特征在于,所述步骤S1具体包括如下步骤:
S11:对待测试程序的字符流进行扫描并识别单词和语句,将所述语句进行语句类型的标记,所述语句类型包括分支语句和顺序语句;
S12:根据所述步骤S11中的语句类型将程序代码分割成多个代码块,所述代码块包括顺序块和分支块,所述顺序块是一组没有分支判断的连续代码语句,所述分支块是分支判断语句的节点;
S13:分析所述步骤S12中的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识;
S14:校正所述步骤S13中的块结构逻辑位置,生成描述程序逻辑结构的块编码表;
S15:在所述步骤S14处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息,所述测试信息包括函数执行剖面信息。
8.根据权利要求6所述的用于回归测试选取测试用例的方法,其特征在于,所述步骤S2具体包括如下步骤:
S21:从之前保存的测试历史中提取测试用例的最后运行版本;
S22:获取的每个测试用例的最后运行版本中的函数执行剖面信息,并生成一个用于描述程序的测试用例与运行版本的数据矩阵。
9.根据权利要求6所述的用于回归测试选取测试用例的方法,其特征在于,所述步骤S3具体包括如下步骤:
S31:将所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息与新的运行版本中的函数信息进行对比,计算并获取最终影响系数;
S32:将所述步骤S31中的最终影响系数进行排列,获取每个测试用例在新的运行版本中的回归优先值;
S33:引导用户根据所述步骤S32中的回归优先值进行测试用例的回归。
10.根据权利要求9所述的用于回归测试选取测试用例的方法,其特征在于,所述步骤S31具体包括如下步骤:
S311:获取所述数据矩阵中的每个测试用例的最后运行版本中的函数执行剖面信息和新的运行版本中的函数信息;
S312:将所述函数执行剖面信息中的每一个函数与所述新的运行版本中的函数信息进行对比,若出现函数改动变化,则将对应的测试用例的影响系数+1,若出现函数对比删除,则将对应的测试用例的影响系数+2;
S313:将每个测试用例的最后运行版本中函数执行剖面信息的所有函数对比获得的影响系数进行累计,获取每个测试用例的最终影响系数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510919377.1A CN105528293B (zh) | 2015-12-14 | 2015-12-14 | 一种用于回归测试选取测试用例的***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510919377.1A CN105528293B (zh) | 2015-12-14 | 2015-12-14 | 一种用于回归测试选取测试用例的***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105528293A true CN105528293A (zh) | 2016-04-27 |
CN105528293B CN105528293B (zh) | 2018-01-16 |
Family
ID=55770536
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510919377.1A Active CN105528293B (zh) | 2015-12-14 | 2015-12-14 | 一种用于回归测试选取测试用例的***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105528293B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107967216A (zh) * | 2017-12-18 | 2018-04-27 | 网易(杭州)网络有限公司 | 代码检测方法和装置、设备、计算机可读存储介质 |
CN109408355A (zh) * | 2017-08-16 | 2019-03-01 | 迈普通信技术股份有限公司 | 测试用例获取方法及装置 |
CN110825621A (zh) * | 2019-10-16 | 2020-02-21 | 四川大学 | 基于动态风险的回归测试用例优先级计算方法 |
CN111324542A (zh) * | 2020-03-06 | 2020-06-23 | 广东电网有限责任公司 | 一种Web应用回归测试用例选择***、方法以及设备 |
CN113868122A (zh) * | 2021-09-10 | 2021-12-31 | 苏州浪潮智能科技有限公司 | 一种用于回归测试的测试用例筛选方法、***及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101866317A (zh) * | 2010-06-29 | 2010-10-20 | 南京大学 | 一种基于聚类分析的回归测试用例选择方法 |
CN102063374A (zh) * | 2011-01-07 | 2011-05-18 | 南京大学 | 一种使用半监督信息进行聚类的回归测试用例选择方法 |
TW201435584A (zh) * | 2013-03-08 | 2014-09-16 | Chunghwa Telecom Co Ltd | 應用於回歸測試案例選擇之混合機率模型 |
CN104077232A (zh) * | 2014-07-21 | 2014-10-01 | 上海零一拼装信息技术有限公司 | 一种基于用例与源码双向追溯的测试装置及方法 |
US20150254173A1 (en) * | 2014-03-07 | 2015-09-10 | Ca, Inc. | Automated generation of test cases for regression testing |
-
2015
- 2015-12-14 CN CN201510919377.1A patent/CN105528293B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101866317A (zh) * | 2010-06-29 | 2010-10-20 | 南京大学 | 一种基于聚类分析的回归测试用例选择方法 |
CN102063374A (zh) * | 2011-01-07 | 2011-05-18 | 南京大学 | 一种使用半监督信息进行聚类的回归测试用例选择方法 |
TW201435584A (zh) * | 2013-03-08 | 2014-09-16 | Chunghwa Telecom Co Ltd | 應用於回歸測試案例選擇之混合機率模型 |
US20150254173A1 (en) * | 2014-03-07 | 2015-09-10 | Ca, Inc. | Automated generation of test cases for regression testing |
CN104077232A (zh) * | 2014-07-21 | 2014-10-01 | 上海零一拼装信息技术有限公司 | 一种基于用例与源码双向追溯的测试装置及方法 |
Non-Patent Citations (2)
Title |
---|
屈波 等: "基于测试用例设计信息的回归测试优先级算法", 《计算机学报》 * |
陈翔 等: "回归测试中的测试用例优先排序技术述评", 《软件学报》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109408355A (zh) * | 2017-08-16 | 2019-03-01 | 迈普通信技术股份有限公司 | 测试用例获取方法及装置 |
CN109408355B (zh) * | 2017-08-16 | 2022-02-22 | 迈普通信技术股份有限公司 | 测试用例获取方法及装置 |
CN107967216A (zh) * | 2017-12-18 | 2018-04-27 | 网易(杭州)网络有限公司 | 代码检测方法和装置、设备、计算机可读存储介质 |
CN107967216B (zh) * | 2017-12-18 | 2020-07-10 | 网易(杭州)网络有限公司 | 代码检测方法和装置、设备、计算机可读存储介质 |
CN110825621A (zh) * | 2019-10-16 | 2020-02-21 | 四川大学 | 基于动态风险的回归测试用例优先级计算方法 |
CN110825621B (zh) * | 2019-10-16 | 2021-05-14 | 四川大学 | 基于动态风险的回归测试用例优先级计算方法 |
CN111324542A (zh) * | 2020-03-06 | 2020-06-23 | 广东电网有限责任公司 | 一种Web应用回归测试用例选择***、方法以及设备 |
CN113868122A (zh) * | 2021-09-10 | 2021-12-31 | 苏州浪潮智能科技有限公司 | 一种用于回归测试的测试用例筛选方法、***及装置 |
CN113868122B (zh) * | 2021-09-10 | 2023-11-14 | 苏州浪潮智能科技有限公司 | 一种用于回归测试的测试用例筛选方法、***及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105528293B (zh) | 2018-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105528293A (zh) | 一种用于回归测试选取测试用例的***及方法 | |
US8856725B1 (en) | Automated source code and development personnel reputation system | |
CN105787367B (zh) | 一种软件更新的补丁安全性检测方法及*** | |
CN108932192A (zh) | 一种基于抽象语法树的Python程序类型缺陷检测方法 | |
CN104536883B (zh) | 一种静态缺陷检测方法及其*** | |
CN105868116A (zh) | 基于语义变异算子的测试用例生成和优化方法 | |
CN103294594A (zh) | 一种基于测试的静态分析误报消除方法 | |
US20160342720A1 (en) | Method, system, and computer program for identifying design revisions in hardware design debugging | |
CN109344060A (zh) | 一种自动化测试的分析方法及装置 | |
CN103914379B (zh) | 故障自动注入与故障检测的方法及其*** | |
CN103294596A (zh) | 一种基于程序不变量的合约式软件故障预警方法 | |
CN105159827A (zh) | 一种面向gui软件的可靠性加速测试方法 | |
CN103559131B (zh) | 一种有效的层次化错误定位方法 | |
Vidács et al. | Test suite reduction for fault detection and localization: A combined approach | |
CN105589837A (zh) | 一种电子文档的自动查错方法 | |
CN104317707A (zh) | 一种基于程序结构影响感知的软件错误定位方法 | |
CN107977454A (zh) | 双语语料清洗的方法、装置及计算机可读存储介质 | |
CN104536880B (zh) | 基于符号执行的gui程序测试用例扩增方法 | |
CN106066881A (zh) | 数据处理方法及装置 | |
JP2019194818A (ja) | ソフトウェア不具合予測装置 | |
CN110659200B (zh) | 航空机载软件的源码和目标码对比分析方法及*** | |
Noda et al. | Sirius: Static program repair with dependence graph-based systematic edit patterns | |
CN104615535B (zh) | 一种基于扩展的数据流模型来生成测试用例的方法与装置 | |
CN109542496A (zh) | 增量代码确定方法、装置及*** | |
Fatima et al. | Knowledge sharing, a key sustainable practice is on risk: An insight from Modern Code Review |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |