CN110109816A - 测试用例选择方法和装置 - Google Patents
测试用例选择方法和装置 Download PDFInfo
- Publication number
- CN110109816A CN110109816A CN201810102858.7A CN201810102858A CN110109816A CN 110109816 A CN110109816 A CN 110109816A CN 201810102858 A CN201810102858 A CN 201810102858A CN 110109816 A CN110109816 A CN 110109816A
- Authority
- CN
- China
- Prior art keywords
- test case
- function
- subgraph
- basic block
- 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
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/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)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种测试用例选择方法和装置,涉及软件测试领域,用于提高测试用例选择精度。测试用例选择方法,包括:对包含插桩的程序运行全部测试用例并解析,得到测试用例函数向量;对程序的源代码进行静态编译和解析,得到程序调用有向图;从程序调用有向图中得到发生变更的函数或基本块的顶点导出子图;根据测试用例函数向量与顶点导出子图得到测试用例子图向量;从测试用例子图向量中的测试用例中选择测试用例。本申请实施例应用于自动化精准测试。
Description
技术领域
本申请涉及软件测试领域,尤其涉及一种测试用例选择方法和装置。
背景技术
在软件工程中,测试者通过测试用例(例如设定一定条件或输入变量)来测试应用软件或软件系统是否正确工作。现有技术中一种方式通过运行全部测试用例来进行测试,但是这种方式对于软件系统较大时耗时较长。另一种方式为自动化精准测试,具体的是通过优选部分测试用例来进行测试,通常以测试用例对发生变更的函数的覆盖范围为选择条件,但是这种方式仅考虑了发生变更的函数对测试结果的影响,还有其他函数会调用这些发生变更的函数,这些函数同样会对测试结果产生影响。
发明内容
本申请实施例提供一种测试用例选择方法和装置,用于提高测试用例选择精度。
为达到上述目的,本申请的实施例采用如下技术方案:
第一方面,提供了一种测试用例选择方法,该方法包括:对包含插桩的程序运行全部测试用例并解析,得到测试用例函数向量,其中,测试用例函数向量包括全部测试用例对程序中函数和基本块的覆盖范围;对程序的源代码进行静态编译和解析,得到程序调用有向图,程序调用有向图包括程序中函数和基本块相互之间的静态调用关系;从程序调用有向图中得到发生变更的函数或基本块的顶点导出子图,顶点导出子图中包括发生变更的函数或基本块、与发生变更的函数或基本块之间有静态调用关系的函数或基本块;根据测试用例函数向量与顶点导出子图得到测试用例子图向量,其中,测试用例子图向量中包括覆盖顶点导出子图中的函数或基本块的测试用例;从测试用例子图向量中的测试用例中选择测试用例。本申请提供的测试用例选择方法,以对程序的源代码进行静态分析为主,结合图论得到发生变更的函数或基本块的顶点导出子图;对包含插桩的程序进行动态分析为辅,得到测试用例与函数的覆盖关系,再结合顶点导出子图得到覆盖发生变更的函数或基本块、与所述发生变更的函数或基本块之间有静态调用关系的函数或基本块的测试用例,最后再从中优选测试用例,使得最终选择的测试用例能够仅覆盖发生变更的函数或基本块以及与发生变更的函数或基本块之间有静态调用关系的函数或基本块,因此提高了测试用例选择精度。
在一种可能的设计中,根据测试用例函数向量与顶点导出子图得到测试用例子图向量,包括:从顶点导出子图中,去掉测试用例函数向量中的测试用例不能覆盖的函数或基本块,以得到测试用例子图向量。该设计使得顶点导出子图中去掉了测试用例不能覆盖的函数或基本块。
在一种可能的设计中,从测试用例子图向量中的测试用例中选择测试用例,包括:A:从测试用例子图向量中的测试用例中随机选择覆盖率最大的测试用例,其中,覆盖率指覆盖测试用例子图向量中的函数或基本块的比率;B:从剩余测试用例中选择额外增益最大的测试用例,其中,额外增益指在步骤A基础上有助于增加覆盖率;C:如果额外增益为0,则跳转到步骤A;如果额外增益不为0,则跳转到步骤B,直到满足预设条件。该设计使得最终选择的测试用例是最优的。
第二方面,提供了一种测试用例选择装置,包括:获取单元,还用于对包含插桩的程序运行全部测试用例并解析,得到测试用例函数向量,其中,测试用例函数向量包括全部测试用例对程序中函数和基本块的覆盖范围;获取单元,还用于对程序的源代码进行静态编译和解析,得到程序调用有向图,程序调用有向图包括程序中函数和基本块相互之间的静态调用关系;获取单元,还用于从程序调用有向图中得到发生变更的函数或基本块的顶点导出子图,顶点导出子图中包括发生变更的函数或基本块、与发生变更的函数或基本块之间有静态调用关系的函数或基本块;获取单元,还用于根据测试用例函数向量与顶点导出子图得到测试用例子图向量,其中,测试用例子图向量中包括覆盖顶点导出子图中的函数或基本块的测试用例;选择单元,用于从获取单元得到的测试用例子图向量中的测试用例中选择测试用例。基于同一发明构思,由于该装置解决问题的原理以及有益效果可以参见上述第一方面和第一方面的各可能的方法实施方式以及所带来的有益效果,因此该装置的实施可以参见上述第一方面和第一方面的各可能的方法的实施方式,重复之处不再赘述。
第三方面,提供了一种测试用例选择装置,该测试用例选择装置包括:一个或多个处理器、存储器、总线系统、以及一个或多个程序,处理器和存储器通过总线系统相连;其中一个或多个程序被存储在存储器中,一个或多个程序包括指令,指令当被该装置执行时使装置执行如第一方面和第一方面的各可能的方法实施方式。
第四方面,提供了一种存储一个或多个程序的计算机可读存储介质,一个或多个程序包括指令,指令当被计算机执行时使计算机执行如第一方面和第一方面的各可能的方法实施方式。
第三方面至第四方面的技术效果可以参照第一方面所述内容。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的测试用例选择方法的流程示意图一;
图2为本申请实施例提供的测试用例对函数的覆盖示意图;
图3为本申请实施例提供的基本块维度的测试用例函数向量的示意图;
图4为本申请实施例提供的函数维度的测试用例函数向量的示意图;
图5为本申请实施例提供的函数与函数之间的静态调用关系示意图一;
图6为本申请实施例提供的函数与基本块、基本块与基本块之间的静态调用关系示意图;
图7为本申请实施例提供的函数与函数之间的静态调用关系示意图二;
图8为本申请实施例提供的图论中顶点导出子图的原理示意图;
图9为本申请实施例提供的顶点导出子图的示意图一;
图10为本申请实施例提供的顶点导出子图的示意图二;
图11为本申请实施例提供的顶点导出子图的示意图三;
图12为本申请实施例提供的顶点导出子图的示意图四;
图13为本申请实施例提供的测试用例排序后示意图一;
图14为本申请实施例提供的测试用例排序后示意图二;
图15为本申请实施例提供的测试用例选择方法的流程示意图二;
图16为本申请实施例提供的测试用例选择装置的结构示意图一;
图17为本申请实施例提供的测试用例选择装置的结构示意图二;
图18为本申请实施例提供的测试用例选择装置的结构示意图三。
具体实施方式
本申请主要应用于自动化精准测试。其中,精准测试指通过建立高效的工具体系及模型,分析代码修改的影响范围,运用相关算法对测试用例进行智能选择和排序,以尽可能最小的测试代价获得最大测试收益,保障产品质量。与传统测试相比,精准测试有下面几个特征:自动进行动静分析,自动进行用例优先级排序,自动生成用例,自动执行用例,自动进行程序崩溃分析,测试过程标准化、可视化,结果可度量,充分发挥大数据及机器学习优势,需要强大的工具体系及方法论支撑。与传统全覆盖测试相比,精准测试能更快、更准的达到路径、函数全覆盖,提前发现缺陷,提高测试质量以及把控测试方向。
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。回归测试包括:将回归版本与测试用例数据库相关联;对回归测试影响进行分析从而选择优选测试用例;用测试用例在回归版本上执行以执行回归测试。
对于应用于自动回归测试,本申请可以自动分析代码修改及影响范围,进行测试用例的智能选择,能够提高测试的精准度,降低系统测试、维护升级等成本。同样地,本申请也可以应用于云化测试产品中的代码路径追踪及可视化领域。
本申请实施例通过将程序源代码经过静态编译后,得到函数和基本块相互之间的静态调用关系,然后结合图论中的顶点导出子图原理,提取出发生变更的函数或基本块相关联的函数和基本块。并且,对包含插桩的程序运行测试用例,可以得到测试用例覆盖的函数和基本块。再结合发生变更的函数或基本块及其相关联的函数和基本块,可以得到与发生变更的函数或基本块及其相关联的函数和基本块的测试用例。最后从中选择优选测试用例。提高了测试用例选择精度,提升了测试用例发现缺陷的精度及自动化回归测试效率。
本申请所述的基本块(BB,Basic Block)指程序-顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是其中的最后一个语句。对一个基本块来说,执行时只从其入口进入,从其出口退出。
本申请所述的函数指程序中的某部分代码,包括一个或多个基本块。它负责完成某项特定任务,相较于其他代码,具备相对独立性。本申请所述的分支指函数中的语句块。本申请所述的路径指程序中函数或分支的调用序列。本申请所述的剖面指程序代码覆盖层面的呈现。
本申请所述的插桩,最早是由J.C.Huang教授提出的,它是在保证被测程序原有逻辑完整性的基础上,在程序中插入一些探针,通过探针的执行并抛出程序运行的特征数据,以及通过对这些特征数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的。
具体的,本申请提供了一种测试用例选择方法,参照图1中所示,该方法包括:
S101、对包含插桩的程序运行全部测试用例并解析,得到测试用例函数向量。
其中,测试用例函数向量包括全部测试用例对程序中函数和基本块的覆盖范围,即测试用例与函数或基本块的覆盖关系。
具体的,在编译阶段可以通过GNU编译套件(GNU Compiler Collection,GCC)进行动态分析,GCC提供了-fprofile-arcs、-ftest-coverage编译选项,编译时将开关打开进行代码插桩,之后经过链接生成可执行程序版本。测试用例运行在包括插桩的程序版本上可生成包含测试用例覆盖信息的GCC覆盖工具(GCC Coverage,GCOV)块图文件(GCOV NOtefile,GCNO)和GCOV数据文件(GCOV DAta File,GCDA)文件,对这两个文件解析后即可得到用例对代码的函数、基本块或行的覆盖范围。示例性的,参照图2中所示,为一种测试用例对函数的覆盖示意图,其中,T0-T4表示测试用例,F0-F4表示函数,T0可以覆盖F0和F1,T1可以覆盖F2和F3,T3未覆盖任何函数,T4可以覆盖F4。示例性的,参照图3和图4中所示,其中,图3为基本块维度的测试用例函数向量的示意图,图4为函数维度的测试用例函数向量的示意图。其中,T1-T4表示测试用例,F表示函数,BB表示函数中的基本块,例如F3BB1表示函数F3中的基本块BB1。
可以每日生成一个插桩的程序版本,运行全部测试用例后得到一次动态分析数据,生成测试用例函数向量,作为数据库中的一部分。该方式可以通过GCC获取程序动态执行剖面,不污染源代码。
S102、对程序的源代码进行静态编译和解析,得到程序调用有向图。
程序调用有向图包括程序中函数以及基本块(例如函数与基本块、函数与函数、基本块与基本块)相互之间的静态调用关系。每次可以通过ChangeID来表示提交一次源代码的静态数据。
可以采用底层虚拟机(Low Level Virtual Machine,LLVM)程序静态分析,LLVM提供了-emit-ast、-emit-llvm选项,编译时将开关打开,可生成包含代码调用关系的中间码(Intermediate Representation,IR)文件及抽象语法树(Abstract Syntax Tree,AST)文件,解析后即可得到代码调用关系图,示例性的,如图5中所示,为函数与函数之间的静态调用关系示意图,其中,共有m*n个函数,函数F22调用了函数F11和F21,并且函数F22被函数F13调用。示例性的,参照图6和图7中所示,其中图6为函数与基本块、基本块与基本块之间的静态调用关系示意图,其中,F1BB1调用F2,F2BB2调用F3,其他函数与基本块之间静态调用关系类似。图7为对应的函数与函数之间的静态调用关系示意图。
S103、从程序调用有向图中得到发生变更的函数或基本块的顶点导出子图。
顶点导出子图中包括发生变更的函数或基本块、与发生变更的函数或基本块之间有静态调用关系的函数或基本块。变更的记录可以单独提交,里面涉及的变更可以包括增加、删除、修改、重命名等操作。
根据图论中的基本概念,顶点导出子图指:对有向图G=<V,R>,若其中V是结点集,R={(x,y)|x,y∈V}是弧集,弧e=(T(e),H(e))连接G中相邻的两个节点,则以V1为顶点集,以两个顶点均在V1中的边集组成的图,称为图G的顶点导出子图,记为G(V1)。示例性的,参照图8中所示,程序调用有向图G,假设G中函数V9发生变更,则根据顶点导出子图原理,新导出的子图为图8中粗线表示的子图。
函数或基本块发生变更后,影响范围包括:
1、变更的函数或基本块
2、变更的函数或基本块+变更的函数或基本块的祖先节点(变更的函数或基本块所处的可能路径的上游)
3、变更的函数或基本块+变更的函数或基本块的子孙节点(变更的函数或基本块所处的可能路径的下游)
4、变更的函数或基本块+变更的函数或基本块的祖先节点及子孙节点(变更的函数或基本块所处的路径上的所有节点)
而对于不在以上任意一种影响范围的函数或基本块,变更的函数或基本块不会对它们产生任何影响,因为它们不在变更的函数或基本块所处的路径上,修改所带来的影响无法传递到这些函数的执行。随着范围扩大,涉及函数增多,则要覆盖这些函数的测试用例数量也会增大。综合考虑测试成本与覆盖范围,可以选择影响范围2中涉及的函数作为顶点导出子图。示例性的,从基本块维度,在图6基础上,假设发生变更的基本块为F1BB2、F3BB1,受影响的基本块包括:F1BB1、F2BB1、F2BB2、F3BB2、F4BB1、F4BB2、F5BB1、F5BB2、F10BB1、F10BB2,则可以得到如图9中所示的顶点导出子图。从函数维度,在图7基础上,假设发生变更的函数为F1、F3,受影响的函数包括:F2、F4、F5、F10,则可以得到如图10中所示的顶点导出子图。
S104、根据测试用例函数向量与顶点导出子图得到测试用例子图向量。
其中,测试用例子图向量中包括覆盖顶点导出子图中的函数或基本块的测试用例。即这些测试用例可以覆盖发生变更的函数或基本块以及与发生变更的函数或基本块之间有静态调用关系的函数或基本块。
具体的,可以从顶点导出子图中,去掉测试用例函数向量的测试用例不能覆盖的函数或基本块,以得到测试用例子图向量。从基本块维度,根据图3中所示的测试用例函数向量,排除图6中所示的顶点导出子图中测试用例不能覆盖的函数或分支后(F10未被测试用例覆盖),得到最终受影响且具有明确调用关系的基本块包括:F1BB1、F2BB1、F2BB2、F3BB2、F4BB1、F4BB2、F5BB1、F5BB2,则可以得到如图11中所示的顶点导出子图。从函数维度,排除图7中所示的顶点导出子图中测试用例不能覆盖的函数或分支后(F10未被测试用例覆盖),得到最终受影响且具有明确调用关系的函数包括:F1、F2、F4、F5,则可以得到如图12中所示的顶点导出子图。
S105、从测试用例子图向量中的测试用例中选择测试用例。
具体的,可以包括结合图3中的示例得到图9中的结果。
A:从测试用例子图向量中的测试用例中随机选择覆盖率最大的测试用例。
其中,覆盖率指覆盖测试用例子图向量中的函数或基本块的比率。例如从基本块维度,对图3中的示例来说,测试用例T4和T1均覆盖测试用例子图向量中的基本块F1BB2、F3BB1、F1BB1、F2BB1、F2BB2、F3BB2、F4BB1、F4BB2、F5BB1、F5BB2中四个基本块(参照图13中所示的加粗框),因此从中随机选择T4。例如从函数维度,对于图4中的示例来说,测试用例T4和T1均覆盖测试用例子图向量中的函数F1、F2、F3、F4、F5中的两个函数(参照图14中所示的加粗框),因此从中随机选择T3。
B:从剩余测试用例中选择额外增益最大的测试用例。
其中,额外增益指在步骤A基础上有助于增加覆盖率。对于图3和图13来说,剩余测试用例T1、T2、T3中,T1还可以覆盖另外四个基本块,T2还可以覆盖另外两个基本块(F2BB1和F2BB2),T3虽然覆盖F1BB2和F2BB2,但是由于F1BB2已经在T4覆盖,T3实际上只另外覆盖一个基本块F2BB2,因此T1的额外增益最大,从中选择T1。对于图4和图14来说,剩余测试用例T1、T2、T4中,T1还可以覆盖另外两个函数,T4还可以覆盖另外一个函数,T2虽然覆盖函数F2,但是由于F2已经在T3覆盖,T2实际上不覆盖另外的函数,因此T1的额外增益最大,从中选择T1。
C:如果额外增益为0,则跳转到步骤A;如果额外增益不为0,则跳转到步骤B,直到满足预设条件。
对于图3和图13来说,由于T1所带来的额外增益不为0,因此重新跳转到步骤B,只剩下T2可提供额外增益,因此最后选择T2,最终选择的测试用例T4、T1、T2。对于图4和图14来说,由于T1所带来的额外增益不为0,因此重新跳转到步骤B,只剩下T4可提供额外增益,因此最后选择T4,最终选择的测试用例T3、T1、T4。上述预设条件可以包括例如,运行时间门限、遍历测试用例轮数门限等等。需要说明的是,造成上述不同维度选择的测试用例结果和排序不同,主要是由于其中的随机选择过程造成的,不影响实际的测试效果。
将上述步骤及涉及文件整理后可得到如图15所示的流程图,需要说明的是,其中的镜像指对发布的程序版本进行编译链接后生成的可运行的程序,最后将该镜像在测试用例选择装置上结合测试用例运行,以生成报表,报表中包含测试错误信息。
本申请提供的测试用例选择方法,以对程序的源代码进行静态分析为主,结合图论得到发生变更的函数或基本块的顶点导出子图;对包含插桩的程序进行动态分析为辅,得到测试用例与函数的覆盖关系,再结合顶点导出子图得到覆盖发生变更的函数或基本块、与所述发生变更的函数或基本块之间有静态调用关系的函数或基本块的测试用例,最后再从中优选测试用例,使得最终选择的测试用例能够仅覆盖发生变更的函数或基本块以及与发生变更的函数或基本块之间有静态调用关系的函数或基本块,因此提高了测试用例选择精度。
本申请提供一种测试用例选择装置,用于执行上述方法。本申请实施例可以根据上述方法示例对测试用例选择装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图16示出了上述实施例中所涉及的测试用例选择装置的一种可能的结构示意图,测试用例选择装置200包括:获取单元2011、选择单元2012。上述各单元用于支持测试用例选择装置执行图1、图15中任一附图中的相关方法。本申请提供的测试用例选择装置用于执行上文所提供的对应的方法,因此,其相应的特征和所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
示例性的,获取单元2011用于支持测试用例选择装置执行图1和图15中的步骤S101-S104;选择单元2012用于支持测试用例选择装置执行图1和图15中的步骤S105。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
在采用集成的单元的情况下,图17示出了上述实施例中所涉及的测试用例选择装置的一种可能的结构示意图。测试用例选择装置200包括:存储模块2021、处理模块2022。上述各模块用于支持测试用例选择装置执行图1、图15中任一附图中的相关方法。本申请提供的测试用例选择装置用于执行上文所提供的对应的方法,因此,其相应的特征和所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
具体的,处理模块2022用于对测试用例选择装置200的动作进行控制管理,例如,处理模块2022用于支持测试用例选择装置200执行上述获取单元2011、选择单元2012的功能。存储模块2021用于存储测试用例选择装置的程序代码和数据。
其中,处理模块2022可以是处理器或控制器,例如可以是中央处理器(Centralprocessing unit,CPU),通用处理器,数字信号处理器(Digital Signal Processor,DSP),专用集成电路(Application-Specific Integrated Circuit,ASIC),现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。存储模块2021可以是存储器。
当处理模块2022为处理器,存储模块2021为存储器时,本申请所涉及的测试用例选择装置可以为图18所示的测试用例选择装置200。
参阅图18所示,该测试用例选择装置200包括:一个或多个处理器2032、存储器2031、总线系统2033,以及一个或多个程序。其中,处理器2032、存储器2031通过总线系统2033相互连接;总线系统2033可以是外设部件互连标准总线或扩展工业标准结构总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。其中所述一个或多个程序被存储在存储器2031中,一个或多个程序包括指令,指令当被测试用例选择装置执行时使测试用例选择装置执行图1、图15中任一附图中的相关方法。
本申请还提供一种存储一个或多个程序的计算机存储介质,一个或多个程序包括指令,该指令当被计算机执行时,使计算机执行图1、图15中任一附图中的相关方法。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (7)
1.一种测试用例选择方法,其特征在于,包括:
对包含插桩的程序运行全部测试用例并解析,得到测试用例函数向量,其中,所述测试用例函数向量包括全部测试用例对所述程序中函数和基本块的覆盖范围;
对所述程序的源代码进行静态编译和解析,得到程序调用有向图,所述程序调用有向图包括所述程序中函数和基本块相互之间的静态调用关系;
从所述程序调用有向图中得到发生变更的函数或基本块的顶点导出子图,所述顶点导出子图中包括发生变更的函数或基本块、与所述发生变更的函数或基本块之间有静态调用关系的函数或基本块;
根据所述测试用例函数向量与所述顶点导出子图得到测试用例子图向量,其中,所述测试用例子图向量中包括覆盖所述顶点导出子图中的函数或基本块的测试用例;
从所述测试用例子图向量中的测试用例中选择测试用例。
2.根据权利要求1所述的方法,其特征在于,所述根据所述测试用例函数向量与所述顶点导出子图得到测试用例子图向量,包括:
从所述顶点导出子图中,去掉所述测试用例函数向量中的测试用例不能覆盖的函数或基本块,以得到所述测试用例子图向量。
3.根据权利要求1所述的方法,其特征在于,所述从所述测试用例子图向量中的测试用例中选择测试用例,包括:
A:从所述测试用例子图向量中的测试用例中随机选择覆盖率最大的测试用例,其中,所述覆盖率指覆盖所述测试用例子图向量中的函数或基本块的比率;
B:从剩余测试用例中选择额外增益最大的测试用例,其中,所述额外增益指在步骤A基础上有助于增加所述覆盖率;
C:如果所述额外增益为0,则跳转到步骤A;如果所述额外增益不为0,则跳转到步骤B,直到满足预设条件。
4.一种测试用例选择装置,其特征在于,包括:
获取单元,还用于对包含插桩的程序运行全部测试用例并解析,得到测试用例函数向量,其中,所述测试用例函数向量包括全部测试用例对所述程序中函数和基本块的覆盖范围;
所述获取单元,还用于对所述程序的源代码进行静态编译和解析,得到程序调用有向图,所述程序调用有向图包括所述程序中函数和基本块相互之间的静态调用关系;
所述获取单元,还用于从所述程序调用有向图中得到发生变更的函数或基本块的顶点导出子图,所述顶点导出子图中包括发生变更的函数或基本块、与所述发生变更的函数或基本块之间有静态调用关系的函数或基本块;
所述获取单元,还用于根据所述测试用例函数向量与所述顶点导出子图得到测试用例子图向量,其中,所述测试用例子图向量中包括覆盖所述顶点导出子图中的函数或基本块的测试用例;
选择单元,用于从所述获取单元得到的测试用例子图向量中的测试用例中选择测试用例。
5.根据权利要求4所述的装置,其特征在于,所述获取单元,具体用于:
从所述顶点导出子图中,去掉所述测试用例函数向量中的测试用例不能覆盖的函数或基本块,以得到所述测试用例子图向量。
6.根据权利要求4所述的装置,其特征在于,所述选择单元,具体用于:
A:从所述测试用例子图向量中的测试用例中随机选择覆盖率最大的测试用例,其中,所述覆盖率指覆盖所述测试用例子图向量中的函数或基本块的比率;
B:从剩余测试用例中选择额外增益最大的测试用例,其中,所述额外增益指在步骤A基础上有助于增加所述覆盖率;
C:如果所述额外增益为0,则跳转到步骤A;如果所述额外增益不为0,则跳转到步骤B,直到满足预设条件。
7.一种存储一个或多个程序的计算机可读存储介质,其特征在于,所述一个或多个程序包括指令,所述指令当被计算机执行时使所述计算机执行如权利要求1-3任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810102858.7A CN110109816A (zh) | 2018-02-01 | 2018-02-01 | 测试用例选择方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810102858.7A CN110109816A (zh) | 2018-02-01 | 2018-02-01 | 测试用例选择方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110109816A true CN110109816A (zh) | 2019-08-09 |
Family
ID=67483147
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810102858.7A Pending CN110109816A (zh) | 2018-02-01 | 2018-02-01 | 测试用例选择方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110109816A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111597121A (zh) * | 2020-07-24 | 2020-08-28 | 四川新网银行股份有限公司 | 一种基于历史测试用例挖掘的精准测试方法 |
CN111930630A (zh) * | 2020-08-17 | 2020-11-13 | 电信科学技术第十研究所有限公司 | 基于数据流的大数据测试用例的生成方法及装置 |
CN113656318A (zh) * | 2021-08-23 | 2021-11-16 | 上海哔哩哔哩科技有限公司 | 软件版本测试方法、装置及计算机设备 |
CN113672506A (zh) * | 2021-08-06 | 2021-11-19 | 中国科学院软件研究所 | 基于机器学习的动态比例测试用例排序选择方法及系统 |
CN117009230A (zh) * | 2023-07-25 | 2023-11-07 | 北京泰策科技有限公司 | 一种基于代码覆盖率评测的精准测试方法及系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130275953A1 (en) * | 2008-08-26 | 2013-10-17 | International Business Machines Corporation | Test coverage analysis |
CN103744782A (zh) * | 2014-01-02 | 2014-04-23 | 北京百度网讯科技有限公司 | 程序执行序列的获取方法及装置 |
US9015592B2 (en) * | 2008-03-14 | 2015-04-21 | Verizon Patent And Licensing Inc. | Method, apparatus, and computer program for providing web service testing |
CN104536896A (zh) * | 2015-01-12 | 2015-04-22 | 牟永敏 | 面向函数调用路径的回归测试用例选择与排序方法及系统 |
CN104794059A (zh) * | 2015-05-08 | 2015-07-22 | 北京理工大学 | 一种基于函数调用记录的缺陷定位方法及装置 |
US20150212927A1 (en) * | 2014-01-24 | 2015-07-30 | Bank Of America Corporation | Application Testing Automation |
CN106776348A (zh) * | 2017-02-06 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 测试用例管理方法和装置 |
-
2018
- 2018-02-01 CN CN201810102858.7A patent/CN110109816A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9015592B2 (en) * | 2008-03-14 | 2015-04-21 | Verizon Patent And Licensing Inc. | Method, apparatus, and computer program for providing web service testing |
US20130275953A1 (en) * | 2008-08-26 | 2013-10-17 | International Business Machines Corporation | Test coverage analysis |
CN103744782A (zh) * | 2014-01-02 | 2014-04-23 | 北京百度网讯科技有限公司 | 程序执行序列的获取方法及装置 |
US20150212927A1 (en) * | 2014-01-24 | 2015-07-30 | Bank Of America Corporation | Application Testing Automation |
CN104536896A (zh) * | 2015-01-12 | 2015-04-22 | 牟永敏 | 面向函数调用路径的回归测试用例选择与排序方法及系统 |
CN104794059A (zh) * | 2015-05-08 | 2015-07-22 | 北京理工大学 | 一种基于函数调用记录的缺陷定位方法及装置 |
CN106776348A (zh) * | 2017-02-06 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 测试用例管理方法和装置 |
Non-Patent Citations (3)
Title |
---|
R.BEENA: "code coverage based test case selection and1-7 prioritization", 《INTERNATIONAL JOURNAL OF SOFTWARE ENGINEERING & APPLICATIONS(IJSEA)》 * |
张志华等: "基于函数调用的路径覆盖生成技术研究", 《电子学报》 * |
郑锦勤等: "基于函数调用路径的回归测试用例选择排序方法研究", 《计算机应用研究》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111597121A (zh) * | 2020-07-24 | 2020-08-28 | 四川新网银行股份有限公司 | 一种基于历史测试用例挖掘的精准测试方法 |
CN111930630A (zh) * | 2020-08-17 | 2020-11-13 | 电信科学技术第十研究所有限公司 | 基于数据流的大数据测试用例的生成方法及装置 |
CN111930630B (zh) * | 2020-08-17 | 2024-01-05 | 电信科学技术第十研究所有限公司 | 基于数据流的大数据测试用例的生成方法及装置 |
CN113672506A (zh) * | 2021-08-06 | 2021-11-19 | 中国科学院软件研究所 | 基于机器学习的动态比例测试用例排序选择方法及系统 |
CN113672506B (zh) * | 2021-08-06 | 2023-06-13 | 中国科学院软件研究所 | 基于机器学习的动态比例测试用例排序选择方法及系统 |
CN113656318A (zh) * | 2021-08-23 | 2021-11-16 | 上海哔哩哔哩科技有限公司 | 软件版本测试方法、装置及计算机设备 |
CN117009230A (zh) * | 2023-07-25 | 2023-11-07 | 北京泰策科技有限公司 | 一种基于代码覆盖率评测的精准测试方法及系统 |
CN117009230B (zh) * | 2023-07-25 | 2024-04-16 | 北京泰策科技有限公司 | 一种基于代码覆盖率评测的精准测试方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110109816A (zh) | 测试用例选择方法和装置 | |
US9524226B2 (en) | System and method for display of software quality | |
US20170286169A1 (en) | Automatically Mapping Program Functions to Distributed Heterogeneous Platforms Based on Hardware Attributes and Specified Constraints | |
US9377998B2 (en) | Code generation for control design | |
US6385765B1 (en) | Specification and verification for concurrent systems with graphical and textual editors | |
CN102880546B (zh) | 一种基于xml数据库的软件集成测试方法及系统 | |
US10430532B2 (en) | Bidomain simulator | |
US20100192128A1 (en) | System and methods of using test points and signal overrides in requirements-based test generation | |
US8732676B1 (en) | System and method for generating unit test based on recorded execution paths | |
CN114115857A (zh) | 一种机器学习模型自动化生产线构建方法及系统 | |
CN104424093A (zh) | 一种兼容性测试方法及系统 | |
WO2023061874A1 (en) | Checking source code validity at time of code update | |
CN103634154A (zh) | 网络状态的模拟系统及其模拟方法 | |
Krupitzer et al. | FESAS IDE: An integrated development environment for autonomic computing | |
EP1548581A2 (en) | Methods, apparatus and programs for system development | |
Amparore et al. | (Stochastic) model checking in GreatSPN | |
Prosvirnova et al. | Automated generation of minimal cut sets from AltaRica 3.0 models | |
Sottile et al. | Semi-automatic extraction of software skeletons for benchmarking large-scale parallel applications | |
US10380313B1 (en) | Implementation and evaluation of designs for heterogeneous computing platforms with hardware acceleration | |
CN104317580B (zh) | 虚拟试验应用集成开发系统 | |
US20200183658A1 (en) | Identification and visualization of associations among code generated from a model and sources that affect code generation | |
CN113448678A (zh) | 应用信息生成方法、部署方法及装置、系统、存储介质 | |
CN111382065B (zh) | 基于测试模板的验证流程管理系统及其方法 | |
Walter et al. | Tools for declarative performance engineering | |
CN111143228A (zh) | 基于决策表法的测试代码生成方法及装置 |
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 | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20210702 |
|
AD01 | Patent right deemed abandoned |