[发明专利]基于测试用例自动生成算法的单元测试自动执行方法有效
| 申请号: | 201910819271.2 | 申请日: | 2019-08-31 |
| 公开(公告)号: | CN110543421B | 公开(公告)日: | 2022-03-29 |
| 发明(设计)人: | 黄翰;连木明;朱浩锋;植浩聪;谌小虎;刘方青;杨忠明;汪疆平 | 申请(专利权)人: | 华南理工大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 广州粤高专利商标代理有限公司 44102 | 代理人: | 何淑珍;江裕强 |
| 地址: | 510640 广*** | 国省代码: | 广东;44 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 测试 自动 生成 算法 单元测试 执行 方法 | ||
1.基于测试用例自动生成算法的单元测试自动执行方法,其特征在于,包括以下步骤:
S1、对输入的源程序即用户代码进行文件预处理,使其符合词法分析要求的语法结构;
S2、递归遍历用户代码,对预处理后的源程序进行词法分析,生成控制流图即测试代码的路径图,记录程序所有可能执行路径的路径编码,记为路径表;
S3、递归遍历用户代码,对预处理后的源程序进行词法分析,并在预处理后的源程序中的条件语句块和循环语句块中分别插入代码,得到新组织好的代码;
插入的代码即测试代码分为两部分,第一部分用于当用户代码执行到条件语句块或者循环语句块时,能实时记录该插入的代码块编号并将该代码块加入到当前测试用例的编码路径中,这一部分插入的代码也用于记录用户代码的输入变量执行到该代码块时的实际值;第二部分插入的代码包括对输入变量进行处理的测试用例自动生成算法的代码和调用用户代码函数的代码;
插入代码时需要对判断语句中的判断条件解析生成函数调用,即将判断条件转变成一个函数并将判断条件的执行转变为与函数调用,转换的流程如下:
1.进行词法分析;
2.进行语法分析;
3.生成fitness计算函数,生成的fitness计算函数指的是所述判断条件转变的函数;
4.输出生成的fitness计算函数代码;
所述词法分析是指将字符串转化为token序列;通过扫描输入的字符串,逐个检查字符串中的字符,将字符串分成若干个片段,判断各个片段的类型,得到token序列;一个token序列包括字符串的类型和字符串;所述token序列中的类型包括:算术表达式、关系运算符、且运算符、或运算符、非运算符、左括号、右括号和其他异常类型;
S4、将新组织好的代码写入到一个新的源程序文件中并调用C++编译器对新的源程序文件中的代码进行编译,得到可执行文件;
S5、运行步骤S4中生成的可执行文件,并将用户代码中的每个函数参数的上界和下界传入到新的源程序文件中,并将fitness适应值初始化为0;
S6、测试用例自动生成算法根据传入的参数的上界、参数的下界和fitness适应值生成一个测试用例,步骤S4中的新的源程序文件编译后生成的程序调用用户代码并将测试用例传入用户代码中;
S7、在用户代码执行即源程序运行的过程中,步骤S4中的新源程序文件编译后生成的程序实时记录用户代码进入到的代码块编号以及输入参数在该代码块开始时的具体值;
S8、当用户代码执行完并返回后,步骤S4中的新源程序文件编译后生成的程序获取fitness适应值的结果,并生成和记录该测试用例对应的路径编码;
S9、将步骤S2中生成的路径表与通过传入测试用例生成的路径编码作比较,若覆盖率已经达到100%或者运行已经超时则进入步骤S10,否则,重复步骤S5,S6,S7,S8;
S10、生成路径编码与测试用例的映射关系,每一个路径编码仅对应第一次达到该路径时的测试用例;
S11、生成测试报告,内容包括测试用例与路径编码的映射关系以及路径覆盖率。
2.根据权利要求1所述的基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:在步骤S1的文件预处理过程中,检测每个if语句后有无else语句,若无则加入else语句,扩展成if-else结构;在每个if和else语句块中检测其是否带有大括号“{”和“}”,若无则加入大括号,作为识别语句块的标志;同样,在while和for语句块中,检测并加入大括号;对于switch语句,检测其有无default关键字,若无则加入default关键字,使后续生成代码路径的方式规则化。
3.根据权利要求1所述的基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:所述步骤S2和步骤S3都是采用递归下降的分析方法对源程序进行词法分析,使得可以将步骤S2生成控制流图和步骤S3插入代码的过程一起执行,减少扫描代码的开销。
4.根据权利要求1所述的基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:在步骤S3中通过测试代码进行源程序中函数间数据的通信,将测试代码与用户代码合并成一个程序文件,简化了测试代码编译后运行的测试进程与用户代码编译后运行的用户进程之间通信的难度。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华南理工大学,未经华南理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910819271.2/1.html,转载请声明来源钻瓜专利网。





