CN110543421A - 基于测试用例自动生成算法的单元测试自动执行方法 - Google Patents

基于测试用例自动生成算法的单元测试自动执行方法 Download PDF

Info

Publication number
CN110543421A
CN110543421A CN201910819271.2A CN201910819271A CN110543421A CN 110543421 A CN110543421 A CN 110543421A CN 201910819271 A CN201910819271 A CN 201910819271A CN 110543421 A CN110543421 A CN 110543421A
Authority
CN
China
Prior art keywords
code
test
test case
judgment
statement
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
Application number
CN201910819271.2A
Other languages
English (en)
Other versions
CN110543421B (zh
Inventor
黄翰
连木明
朱浩锋
植浩聪
谌小虎
刘方青
杨忠明
汪疆平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
South China University of Technology SCUT
Original Assignee
South China University of Technology SCUT
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by South China University of Technology SCUT filed Critical South China University of Technology SCUT
Priority to CN201910819271.2A priority Critical patent/CN110543421B/zh
Publication of CN110543421A publication Critical patent/CN110543421A/zh
Application granted granted Critical
Publication of CN110543421B publication Critical patent/CN110543421B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

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

本发明提供了基于测试用例自动生成算法的单元测试自动执行方法。所述方法包括以下步骤:首先对被测试程序的代码进行预处理后进行词法分析,先建立生成测试代码的路径图,并将控制流图输出到文件,然后在经过预处理后的代码中进行定点代码插入,编译插入代码后的文件。然后根据测试用例自动生成算法生成测试用例,调用用户代码,遍历用户代码的每个代码块,计算fitness的算法适应值,获取fitness适应值并生成测试用例对应的路径,当判断路径是否全覆盖或者运行超时退出。本发明适用于软件开发过程中的单元测试,可以通过计算机程序自动生成测试用例进行代码测试以及自动生成测试报告,大大降低了人力资源成本和时间成本。

Description

基于测试用例自动生成算法的单元测试自动执行方法
技术领域
本发明涉及计算机软件工程的软件测试领域,具体涉及基于路径覆盖测试用例自动生成算法与单元测试自动执行的一体化方法。
背景技术
随着软件应用数量的爆炸式增长和软件行业的不断发展,高质量的软件成为业界和用户的普遍需求,而高质量的软件总是离不开大量的测试。IEEE计算机协会在IEEEStd829-1983中对软件测试给出了明确的定义:通过人工测试或自动测试的手段对软件的质量进行度量,用于检验被测试软件实际运行结果是否于设计软件时的初中相一致。由于传统的通过人工生成测试用例对被测试软件进行测试的方式需要耗费大量的人力成本和时间成本,工业界对于自动生成测试用例的需求日益增加。
现有的软件自动化测试方法可分为静态和动态两类。静态测试方法是指无需动态执行被测试程序代码,仅对代码进行静态检测和审阅来评测。静态测试方法有着难以发现由于软件运行环境导致的错误和故障,和因测试目标的复杂性而导致符号执行状态空间爆炸致使静态分析无法继续进行的缺陷。因此需要使用动态测试来对软件代码进行进一步的测试。对于动态测试方法大都是基于语句覆盖或者是分支覆盖,远没有路径覆盖方法更有效地检测出代码的bug。
本发明中采用的基于测试用例自动生成算法的单元测试自动执行方法,通过对被测试程序的代码进行语法分析生成路径图,并对被测试代码进行定点代码插入,并编译插入代码后的文件。然后根据测试用例自动生成算法不断生成测试用例并传入修改后的被测试代码进行代码路径覆盖。当判断路径全覆盖或者运行超时测试完成。本发明适用于软件开发过程中的单元测试,经过大量的代码验证,可以作为实际的软件自动测试工具。
发明内容
本发明针对如今软件行业上缺乏一体化的软件自动化测试方法的不足,提出了基于测试用例自动生成算法的单元测试自动执行方法。本发明的目的在于帮助软件测试人员去除大量的技术含量低且重复性的工作,能够快速的获得覆盖被测试程序所有路径的测试用例的报告,从而利用这些测试用例更好地检测出测试程序可能存在的BUG,用于修复程序漏洞,提高软件质量。
本发明的目的至少通过如下技术方案之一实现。
基于测试用例自动生成算法的单元测试自动执行方法,包括以下步骤:
S1、对输入的源程序即用户代码进行文件预处理,使其符合词法分析要求的语法结构;
S2、递归遍历用户代码,对预处理后的源程序进行词法分析,生成控制流图即测试代码的路径图,记录程序所有可能执行路径的路径编码,记为路径表;
S3、递归遍历用户代码,对预处理后的源程序进行词法分析,并在预处理后的源程序中的条件语句块和循环语句块中分别插入代码,得到新组织好的代码;
插入的代码即测试代码分为两部分,第一部分用于当用户代码执行到条件语句块或者循环语句块时,能实时记录该插入的代码块编号并将该代码块加入到当前测试用例的编码路径中,这一部分插入的代码也用于记录用户代码的输入变量执行到该代码块时的实际值;第二部分插入的代码包括对输入变量进行处理的测试用例自动生成算法的代码和调用用户代码函数的代码;
S4、将新组织好的代码写入到一个新的源程序文件中并调用C++编译器对新的源程序文件中的代码进行编译,得到可执行文件;
S5、运行步骤S4中生成的可执行文件,并将用户代码中的每个函数参数的上界和下界传入到新的源程序文件中,并将fitness适应值初始化为0;
S6、测试用例自动生成算法根据传入的参数的上界、参数的下界和fitness适应值生成一个测试用例,步骤S4中的新的源程序文件编译后生成的程序(步骤S4中并没有说明有生成程序,是否S4中得到的可执行文件就是生成的程序?若是,请全文统一)调用用户代码并将测试用例传入用户代码中;
S7、在用户代码执行即源程序运行的过程中,步骤S4中的新源程序文件编译后生成的程序(同上)实时记录用户代码进入到的代码块编号以及输入参数在该代码块开始时的具体值;
S8、当用户代码执行完并返回后,步骤S4中的新源程序文件编译后生成的程序(同上)获取fitness适应值的结果,并生成和记录该测试用例对应的路径编码;
S9、将步骤S2中生成的路径表与通过传入测试用例生成的路径编码作比较,若覆盖率已经达到100%或者运行已经超时则进入步骤S10,否则,重复步骤S5,S6,S7,S8;
S10、生成路径编码与测试用例的映射关系,每一个路径编码仅对应第一次达到该路径时的测试用例;
S11、生成测试报告,内容包括测试用例与路径编码的映射关系以及路径覆盖率。
进一步地,在步骤S1的文件预处理过程中,检测每个if语句后有无else语句,若无则加入else语句,扩展成if-else结构;在每个if和else语句块中检测其是否带有大括号“{”和“}”,若无则加入大括号,作为识别语句块的标志;同样,在while和for语句块中,检测并加入大括号;对于switch语句,检测其有无default关键字,若无则加入default关键字,使后续生成代码路径的方式规则化。在预处理阶段为所有代码块加入了标志代码块的符号{和},能准确定位到每一个代码块开始和结束的位置。
进一步地,在步骤S2中,对源程序进行词法分析(词法分析根据现有编译方法中的DFA,构建有限状态自动机的方法,进行词法分析),使用深度优先搜索的方式解决代码块嵌套的问题。在递归的每一层,仅匹配一个条件语句或循环语句的关键字,然后为该含有条件语句或者循环语句的代码块进行编号并搜索下一层,直到该代码块的结束;所述关键字包括if、else、switch、for、while;其中,每一个判断语句按照该语句在文件中的位置,依次连接生成控制流图。
进一步地,所述步骤S2和步骤S3都是采用递归下降的分析方法对源程序进行词法分析,使得可以将步骤S2生成控制流图和步骤S3插入代码的过程一起执行,减少扫描代码的开销。
进一步地,在步骤S3中通过测试代码进行函数间数据的通信,将测试代码与用户代码合并成一个程序文件,简化了测试代码编译后运行的测试进程与用户代码编译后运行的用户进程之间通信的难度。
进一步地,在步骤S3中,插入代码时需要对判断语句中的判断条件解析生成函数调用,即将判断条件转变成一个函数并将判断条件的执行转变为与函数调用,转换的流程如下:
5.进行词法分析;
6.进行语法分析;
7.生成fitness计算函数;(生成的fitness计算函数指的是上述的判断条件转变的函数)
8.输出生成的fitness计算函数代码;
所述词法分析是指将字符串转化为token序列;通过扫描输入的字符串,逐个检查字符串中的字符,将字符串分成若干个片段,判断各个片段的类型,得到token序列;一个token序列包括字符串的类型和字符串;所述token序列中的类型包括:算术表达式、关系运算符、且运算符、或运算符、非运算符、左括号、右括号和其他即异常类型。
进一步地,所述语法分析是指将词法分析得到的token序列转化成抽象语法树:
首先,预处理token序列,将原本属于算术表达式一部分的括号重新与算术表达式合并,即如果一对括号之间只有算术表达式或括号,这对括号以及里面的token序列都应该合并成一个token序列;token序列合并时将字符串按顺序首尾相连,合并后的字符串类型为算术表达式;然后,将预处理后的token序列按照优先级从高到低扫描,将高优先级token作为抽象语法树的父节点,将低优先级的token作为抽象语法树的子节点构造抽象语法树,将token序列逐步转化为抽象语法树。
进一步地,所述生成fitness计算函数是指基于抽象语法树生成计算fitness的函数;计算fitness的过程一共要生成4个函数,包括:calcFitnessTT()、calcFitnessTF()、calcFitnessFT()、calcFitnessFF(),4个函数都要基于抽象语法树生成与原表达式等价的逻辑表达式并将逻辑表达式作为函数的返回值,各个函数计算的结果返回值加在一起,就是fitness的最终结果。
进一步地,对于源程序即用户代码中的第i个判断语句:
当nodeTable[i][0]为真且nodeTable[i][1]为真时,f=0
当nodeTable[i][0]为假且nodeTable[i][1]为真时,c的值按判断规则递归得到;
当nodeTable[i][0]为真且nodeTable[i][1]为假时,先将若判断语句中的判断条件V的数值进行数学取反,再按照判断规则求c;
当nodeTable[i][0]为假且nodeTable[i][1]为假时,
nodeTable[i][0]为真时表示当前判断节点的true分支执行过,为假则表示true分支没有执行过;nodeTable[i][1]为真时表示当前判断节点的false分支执行过,为假则表示false没有执行过;
所述判断规则如下:
若判断语句中的判断条件V的形式为a>b,则
若判断语句中的判断条件V的形式为a≥b,则
若判断语句中的判断条件V的形式为a<b,则
若判断语句中的判断条件V的形式为a≤b,则
若判断语句中的判断条件V的形式为a=b,则
若判断语句中的判断条件V的形式为a≠b,则
若判断语句中的判断条件V的形式为A,一个布尔值,且无法再被分解成表达式,则
若判断语句中的判断条件V的形式为A∧B,则c=cA+cB
若判断语句中的判断条件V的形式为A∨B,则c=min(cA+cB);
a、b、A、B是将判断语句中的判断条件进行等价的一个替代符号;常数K和ε为固定值,按照具体情况指定。
进一步地,在步骤S5,S6,S7,S8中,测试用例自动生成算法不断地自动生成测试用例,不断调用修改后的用户代码,计算覆盖率;如果路径覆盖率没达带到100%或者运行还未超时,则根据测试用例执行结果的fitness适应值进行改进,当当前测试用例执行生成fitness比上一个测试用例执行后生成的fitness小时,则重新随机生成一个测试用例;步骤S5中,fitness适应值仅初始化为0一次。
进一步地,在步骤S10中,用户无需额外的操作则能自动得到一份规整的基于路径覆盖的测试报告和一幅代码的控制流图。
与现有技术相比,本发明具有以下优点与技术效果:
基于测试用例自动生成算法的单元测试自动执行方法,使得可以通过计算机程序自动生成测试用例进行代码测试以及自动生成测试报告,大大降低了人力资源成本和时间成本。测试人员只需要将被测代码输入到基于测试用例自动生成算法的单元测试自动执行智能软件中,就可以得到一张代码的路径图和由测试用例对应其所覆盖路径的测试报告。该过程十分简洁、快速,大大简化了软件测试人员的测试难度和测试时间。
附图说明
图1为实施例中基于测试用例自动生成算法的单元测试自动执行方法实现流程示意图;
图2为实施例测试程序“Triangle”代码内容示意图;
图3为测试代码路径图;
图4为测试报告内容示意图;
图5为测试报告说明示意图。
具体实施方式
以下结合实施例对本发明的实施方式作进一步说明,但本发明的实施不限于此,需指出的是,以下若有未特别详细说明之过程或符号,均是本领域技术人员可参照现有技术理解或实现的(如部分代码举例)。
基于测试用例自动生成算法的单元测试自动执行方法,如图1所示,包括以下步骤:
S1、对输入的源程序即用户代码进行文件预处理,使其符合词法分析要求的语法结构。
在步骤S1的文件预处理过程中,检测每个if语句后有无else语句,若无则加入else语句,扩展成if-else结构;在每个if和else语句块中检测其是否带有大括号“{”和“}”,若无则加入大括号,作为识别语句块的标志;同样,在while和for语句块中,检测并加入大括号;对于switch语句,检测其有无default关键字,若无则加入default关键字,使后续生成代码路径的方式规则化。在预处理阶段为所有代码块加入了标志代码块的符号{和},能准确定位到每一个代码块开始和结束的位置。
S2、递归遍历用户代码,对预处理后的源程序进行词法分析,生成控制流图即测试代码的路径图,记录程序所有可能执行路径的路径编码,记为路径表。
在步骤S2中,对源程序进行词法分析,使用深度优先搜索的方式解决代码块嵌套的问题。在递归的每一层,仅匹配一个条件语句或循环语句的关键字,然后为该含有条件语句或者循环语句的代码块进行编号并搜索下一层,直到该代码块的结束;所述关键字包括if、else、switch、for、while;其中,每一个判断语句按照该语句在文件中的位置,依次连接生成控制流图。
所述步骤S2和步骤S3都是采用递归下降的分析方法对源程序进行词法分析,使得可以将步骤S2生成控制流图和步骤S3插入代码的过程一起执行,减少扫描代码的开销。
S3、递归遍历用户代码,对预处理后的源程序进行词法分析,并在预处理后的源程序中的条件语句块和循环语句块中分别插入代码,得到新组织好的代码。
插入的代码即测试代码分为两部分,第一部分用于当用户代码执行到条件语句块或者循环语句块时,能实时记录该插入的代码块编号并将该代码块加入到当前测试用例的编码路径中,这一部分插入的代码也用于记录用户代码的输入变量执行到该代码块时的实际值;第二部分插入的代码包括对输入变量进行处理的测试用例自动生成算法的代码和调用用户代码函数的代码;
在步骤S3中通过测试代码进行函数间数据的通信,将测试代码与用户代码合并成一个程序文件,简化了测试代码编译后运行的测试进程与用户代码编译后运行的用户进程之间通信的难度。
在插入代码时需要对判断语句中的判断条件解析生成函数调用,即如if(a+b>0){},将判断条件a+b>0转变成一个函数,int function(int a,int b){},并将判断条件的执行转变与函数调用,即转变为if(function(a,b)){},其流程如下:
1.进行词法分析;
2.进行语法分析;
3.生成fitness计算函数;(生成的fitness计算函数指的是上述的判断条件转变的函数)
4.输出生成的fitness计算函数代码;
所述词法分析是指将字符串转化为token序列,token是指将字符串分成多个片段,如字符串“int a”,此处会分成片段“int”,“a”,通过识别片段的内容,如片段内容为“int”,那么便将片段视为一个整形token:一个token序列包括类型和字符串;token序列类型有:算术表达式、关系运算符、且运算符、或运算符、非运算符、左括号、右括号和其他即异常类型;通过扫描输入的字符串,逐个检查字符串中的字符,将字符串分成若干个片段,判断各个片段的类型,得到token序列;
所述语法分析是指将词法分析得到的token序列转化成抽象语法树:
首先,预处理token序列,将原本属于算术表达式一部分的括号重新与算术表达式合并,即如果一对括号之间只有算术表达式或括号,这对括号以及里面的token序列都应该合并成一个token序列;token序列合并时将字符串按顺序首尾相连,合并后的字符串类型为算术表达式;然后,将预处理后的token序列按照优先级从高到低扫描,将高优先级token作为抽象语法树的父节点,将低优先级的token作为抽象语法树的子节点构造抽象语法树,将token序列逐步转化为抽象语法树。
所述生成fitness计算函数是指基于抽象语法树生成计算fitness的函数;计算fitness的过程一共要生成4个函数,包括:calcFitnessTT()、calcFitnessTF()、calcFitnessFT()、calcFitnessFF(),4个函数都要基于抽象语法树生成与原表达式等价的逻辑表达式并将逻辑表达式作为函数的返回值,各个函数计算的结果返回值加在一起,就是fitness的最终结果。
对于源程序即用户代码中的第i个判断语句:
当nodeTable[i][0]为真且nodeTable[i][1]为真时,f=0
当nodeTable[i][0]为假且nodeTable[i][1]为真时,c的值按判断规则递归得到;
当nodeTable[i][0]为真且nodeTable[i][1]为假时,先将若判断语句中的判断条件V的数值进行数学取反,再按照判断规则求c;
当nodeTable[i][0]为假且nodeTable[i][1]为假时,
nodeTable[i][0]为真时表示当前判断节点的true分支执行过,为假则表示true分支没有执行过;nodeTable[i][1]为真时表示当前判断节点的false分支执行过,为假则表示false没有执行过;
所述判断规则如下:
若判断语句中的判断条件V的形式为a>b,则
若判断语句中的判断条件V的形式为a≥b,则
若判断语句中的判断条件V的形式为a<b,则
若判断语句中的判断条件V的形式为a≤b,则
若判断语句中的判断条件V的形式为a=b,则
若判断语句中的判断条件V的形式为a≠b,则
若判断语句中的判断条件V的形式为A,一个布尔值,且无法再被分解成表达式,则
若判断语句中的判断条件V的形式为A∧B,则c=cA+cB
若判断语句中的判断条件V的形式为A∨B,则c=min(cA+cB);
a、b、A、B是将判断语句中的判断条件进行等价的一个替代符号;常数K和ε为固定值,按照具体情况指定。
S4、将新组织好的代码写入到一个新的源程序文件中并调用C++编译器对新的源程序文件中的代码进行编译,得到可执行文件。
S5、运行步骤S4中生成的可执行文件,并将用户代码中的每个函数参数的上界和下界传入到新的源程序文件中,并将fitness适应值初始化为0。
S6、测试用例自动生成算法根据传入的参数的上界、参数的下界和fitness适应值生成一个测试用例,步骤S4中的新的源程序文件编译后生成的程序调用用户代码并将测试用例传入用户代码中。
S7、在用户代码执行即源程序运行的过程中,步骤S4中的新源程序文件编译后生成的程序实时记录用户代码进入到的代码块编号以及输入参数在该代码块开始时的具体值。
S8、当用户代码执行完并返回后,步骤S4中的新源程序文件编译后生成的程序获取fitness适应值的结果,并生成和记录该测试用例对应的路径编码。
S9、将步骤S2中生成的路径表与通过传入测试用例生成的路径编码作比较,若覆盖率已经达到100%或者运行已经超时则进入步骤S10,否则,重复步骤S5,S6,S7,S8。
在步骤S5,S6,S7,S8中,测试用例自动生成算法不断地自动生成测试用例,不断调用修改后的用户代码,计算覆盖率;如果路径覆盖率没达带到100%或者运行还未超时,则根据测试用例执行结果的fitness适应值进行改进,当当前测试用例执行生成fitness比上一个测试用例执行后生成的fitness小时,则重新随机生成一个测试用例;步骤S5中,fitness适应值仅初始化为0一次。
S10、生成路径编码与测试用例的映射关系,每一个路径编码仅对应第一次达到该路径时的测试用例;在此步骤中,用户无需额外的操作则可以自动得到一份规整的基于路径覆盖的测试报告和一幅代码的控制流图。
S11、生成测试报告,内容包括测试用例与路径编码的映射关系以及路径覆盖率。
实施例1:
本实施例中,基于测试用例自动生成算法的单元测试自动执行方法包括以下步骤:
第一步,输入待测的源程序,如图2所示,进行文件预处理
第二步,基于测试用例自动生成算法的单元测试自动执行方法对源程序进行全局的词法分析并建立生成测试代码的路径图,如图3所示。
第三步,插入分析代码,对判断语句中的代码进行转换并插入相关的全局代码。插入代码后,代码文件结构如下(以下代码仅为参考举例):
第四步,调用现有g++,gcc环境对插入代码后的文件进行编译并执行,当算法判断路径覆盖到100%的时候或者运行超时时,程序退出,并输出测试报告,如图4所示,测试报告说明如图5所示。
结合上述例子,下面对本发明的能解决的问题或取得的效果进行分析说明,形成一个基于代码插入形式的自动化单元测试的方法,其能自动插入测试代码,并自动进行测试,其测试结果以图4、图5为示例,报告出程序的路径覆盖率,来辅助程序员对代码进行改进。

Claims (10)

1.基于测试用例自动生成算法的单元测试自动执行方法,其特征在于,包括以下步骤:
S1、对输入的源程序即用户代码进行文件预处理,使其符合词法分析要求的语法结构;
S2、递归遍历用户代码,对预处理后的源程序进行词法分析,生成控制流图即测试代码的路径图,记录程序所有可能执行路径的路径编码,记为路径表;
S3、递归遍历用户代码,对预处理后的源程序进行词法分析,并在预处理后的源程序中的条件语句块和循环语句块中分别插入代码,得到新组织好的代码;
插入的代码即测试代码分为两部分,第一部分用于当用户代码执行到条件语句块或者循环语句块时,能实时记录该插入的代码块编号并将该代码块加入到当前测试用例的编码路径中,这一部分插入的代码也用于记录用户代码的输入变量执行到该代码块时的实际值;第二部分插入的代码包括对输入变量进行处理的测试用例自动生成算法的代码和调用用户代码函数的代码;
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中,对源程序进行词法分析,使用深度优先搜索的方式解决代码块嵌套的问题。在递归的每一层,仅匹配一个条件语句或循环语句的关键字,然后为该含有条件语句或者循环语句的代码块进行编号并搜索下一层,直到该代码块的结束;所述关键字包括if、else、switch、for、while;其中,每一个判断语句按照该语句在文件中的位置,依次连接生成控制流图。
4.根据权利要求1所述的基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:所述步骤S2和步骤S3都是采用递归下降的分析方法对源程序进行词法分析,使得可以将步骤S2生成控制流图和步骤S3插入代码的过程一起执行,减少扫描代码的开销。
5.根据权利要求1所述的基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:在步骤S3中通过测试代码进行源程序中函数间数据的通信,将测试代码与用户代码合并成一个程序文件,简化了测试代码编译后运行的测试进程与用户代码编译后运行的用户进程之间通信的难度。
6.根据权利要求1所述基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:在步骤S3中,插入代码时需要对判断语句中的判断条件解析生成函数调用,即将判断条件转变成一个函数并将判断条件的执行转变为与函数调用,转换的流程如下:
1.进行词法分析;
2.进行语法分析;
3.生成fitness计算函数,生成的fitness计算函数指的是所述判断条件转变的函数;
4.输出生成的fitness计算函数代码;
所述词法分析是指将字符串转化为token序列;通过扫描输入的字符串,逐个检查字符串中的字符,将字符串分成若干个片段,判断各个片段的类型,得到token序列;一个token序列包括字符串的类型和字符串;所述token序列中的类型包括:算术表达式、关系运算符、且运算符、或运算符、非运算符、左括号、右括号和其他即异常类型。
7.根据权利要求6所述基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:所述语法分析是指将词法分析得到的token序列转化成抽象语法树:
首先,预处理token序列,将原本属于算术表达式一部分的括号重新与算术表达式合并,即如果一对括号之间只有算术表达式或括号,这对括号以及里面的token序列都应该合并成一个token序列;token序列合并时将字符串按顺序首尾相连,合并后的字符串类型为算术表达式;然后,将预处理后的token序列按照优先级从高到低扫描,将高优先级token作为抽象语法树的父节点,将低优先级的token作为抽象语法树的子节点构造抽象语法树,将token序列逐步转化为抽象语法树。
8.据权利要求6所述基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:所述生成fitness计算函数是指基于抽象语法树生成计算fitness的函数;计算fitness的过程一共要生成4个函数,各个函数计算的结果返回值加在一起,就是fitness的最终结果。
9.据权利要求8所述基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:对于源程序即用户代码中的第i个判断语句:
当nodeTable[i][0]为真且nodeTable[i][1]为真时,f=0
当nodeTable[i][0]为假且nodeTable[i][1]为真时,c的值按判断规则递归得到;
当nodeTable[i][0]为真且nodeTable[i][1]为假时,先将若判断语句中的判断条件V的数值进行数学取反,再按照判断规则求c;
当nodeTable[i][0]为假且nodeTable[i][1]为假时,
nodeTable[i][0]为真时表示当前判断节点的true分支执行过,为假则表示true分支没有执行过;nodeTable[i][1]为真时表示当前判断节点的false分支执行过,为假则表示false没有执行过;
所述判断规则如下:
若判断语句中的判断条件V的形式为a>b,则
若判断语句中的判断条件V的形式为a≥b,则
若判断语句中的判断条件V的形式为a<b,则
若判断语句中的判断条件V的形式为a≤b,则
若判断语句中的判断条件V的形式为a=b,则
若判断语句中的判断条件V的形式为a≠b,则
若判断语句中的判断条件V的形式为A,一个布尔值,且无法再被分解成表达式,则
若判断语句中的判断条件V的形式为A∧B,则c=cA+cB
若判断语句中的判断条件V的形式为A∨B,则c=min(cA+cB);
a、b、A、B是将判断语句中的判断条件进行等价的一个替代符号;常数K和ε为设定值。
10.根据权利要求1所述基于测试用例自动生成算法的单元测试自动执行方法,其特征在于:在步骤S5,S6,S7,S8中,测试用例自动生成算法不断地自动生成测试用例,不断调用修改后的用户代码,计算覆盖率;如果路径覆盖率没达带到100%或者运行还未超时,则根据测试用例执行结果的fitness适应值进行改进,当当前测试用例执行生成fitness比上一个测试用例执行后生成的fitness小时,则重新随机生成一个测试用例;步骤S5中,fitness适应值仅初始化为0一次。
CN201910819271.2A 2019-08-31 2019-08-31 基于测试用例自动生成算法的单元测试自动执行方法 Active CN110543421B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910819271.2A CN110543421B (zh) 2019-08-31 2019-08-31 基于测试用例自动生成算法的单元测试自动执行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910819271.2A CN110543421B (zh) 2019-08-31 2019-08-31 基于测试用例自动生成算法的单元测试自动执行方法

Publications (2)

Publication Number Publication Date
CN110543421A true CN110543421A (zh) 2019-12-06
CN110543421B CN110543421B (zh) 2022-03-29

Family

ID=68711019

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910819271.2A Active CN110543421B (zh) 2019-08-31 2019-08-31 基于测试用例自动生成算法的单元测试自动执行方法

Country Status (1)

Country Link
CN (1) CN110543421B (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111162972A (zh) * 2019-12-31 2020-05-15 扬州航盛科技有限公司 基于语义分析的车载以太网协议栈自动化测试方法
CN111290966A (zh) * 2020-03-09 2020-06-16 南京大学 提高安卓应用测试覆盖率的测试用例分解组合方法和系统
CN111488287A (zh) * 2020-04-16 2020-08-04 南开大学 注入漏洞测试用例的生成方法、装置、介质及电子设备
CN112860362A (zh) * 2021-02-05 2021-05-28 达而观数据(成都)有限公司 一种机器人自动化流程的可视化调试方法及调试系统
CN113010431A (zh) * 2021-03-31 2021-06-22 中国工商银行股份有限公司 Java单元测试用例生成方法及装置
CN113360410A (zh) * 2021-07-19 2021-09-07 上汽通用五菱汽车股份有限公司 一种c代码软件的测试方法与可读存储介质
CN113821431A (zh) * 2020-12-31 2021-12-21 京东科技控股股份有限公司 测试结果的获取方法、装置、电子设备和存储介质
CN114282219A (zh) * 2021-12-29 2022-04-05 奇安信科技集团股份有限公司 一种样本检测方法及装置
CN115629996A (zh) * 2022-12-21 2023-01-20 深圳市微克科技有限公司 一种嵌入式软件自动化测试方法
CN115774558A (zh) * 2023-01-30 2023-03-10 北京全路通信信号研究设计院集团有限公司 一种测试案例自动扩展方法及装置
CN116225965A (zh) * 2023-04-11 2023-06-06 中国人民解放军国防科技大学 一种面向io大小的数据库性能问题检测方法
CN117009231A (zh) * 2023-07-28 2023-11-07 浙江大学 基于对话式大语言模型的高可靠单元测试自动生成方法及装置
CN118567932A (zh) * 2024-08-02 2024-08-30 山东墨氪智能科技有限公司 适于半导体器件参数测试的流程生成执行方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
CN102419728A (zh) * 2011-11-01 2012-04-18 北京邮电大学 基于覆盖率量化指标确定软件测试过程充分性的方法
US20170218448A1 (en) * 2016-01-29 2017-08-03 BluePrint Bio, Inc. Prediction of therapeutic response in inflammatory conditions
CN107590073A (zh) * 2017-08-30 2018-01-16 华南理工大学 基于路径覆盖软件测试的测试用例自动生成方法
CN108710575A (zh) * 2018-05-23 2018-10-26 华南理工大学 基于路径覆盖测试用例自动生成的单元测试方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
CN102419728A (zh) * 2011-11-01 2012-04-18 北京邮电大学 基于覆盖率量化指标确定软件测试过程充分性的方法
US20170218448A1 (en) * 2016-01-29 2017-08-03 BluePrint Bio, Inc. Prediction of therapeutic response in inflammatory conditions
CN107590073A (zh) * 2017-08-30 2018-01-16 华南理工大学 基于路径覆盖软件测试的测试用例自动生成方法
CN108710575A (zh) * 2018-05-23 2018-10-26 华南理工大学 基于路径覆盖测试用例自动生成的单元测试方法

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111162972A (zh) * 2019-12-31 2020-05-15 扬州航盛科技有限公司 基于语义分析的车载以太网协议栈自动化测试方法
CN111290966A (zh) * 2020-03-09 2020-06-16 南京大学 提高安卓应用测试覆盖率的测试用例分解组合方法和系统
CN111290966B (zh) * 2020-03-09 2023-06-02 南京大学 提高安卓应用测试覆盖率的测试用例分解组合方法和系统
CN111488287A (zh) * 2020-04-16 2020-08-04 南开大学 注入漏洞测试用例的生成方法、装置、介质及电子设备
CN113821431A (zh) * 2020-12-31 2021-12-21 京东科技控股股份有限公司 测试结果的获取方法、装置、电子设备和存储介质
CN112860362B (zh) * 2021-02-05 2022-10-04 达而观数据(成都)有限公司 一种机器人自动化流程的可视化调试方法及调试系统
CN112860362A (zh) * 2021-02-05 2021-05-28 达而观数据(成都)有限公司 一种机器人自动化流程的可视化调试方法及调试系统
CN113010431A (zh) * 2021-03-31 2021-06-22 中国工商银行股份有限公司 Java单元测试用例生成方法及装置
CN113010431B (zh) * 2021-03-31 2024-02-20 中国工商银行股份有限公司 Java单元测试用例生成方法及装置
CN113360410A (zh) * 2021-07-19 2021-09-07 上汽通用五菱汽车股份有限公司 一种c代码软件的测试方法与可读存储介质
CN114282219A (zh) * 2021-12-29 2022-04-05 奇安信科技集团股份有限公司 一种样本检测方法及装置
CN115629996A (zh) * 2022-12-21 2023-01-20 深圳市微克科技有限公司 一种嵌入式软件自动化测试方法
CN115774558A (zh) * 2023-01-30 2023-03-10 北京全路通信信号研究设计院集团有限公司 一种测试案例自动扩展方法及装置
CN116225965A (zh) * 2023-04-11 2023-06-06 中国人民解放军国防科技大学 一种面向io大小的数据库性能问题检测方法
CN116225965B (zh) * 2023-04-11 2023-10-10 中国人民解放军国防科技大学 一种面向io大小的数据库性能问题检测方法
CN117009231A (zh) * 2023-07-28 2023-11-07 浙江大学 基于对话式大语言模型的高可靠单元测试自动生成方法及装置
CN117009231B (zh) * 2023-07-28 2024-03-29 浙江大学 基于对话式大语言模型的高可靠单元测试自动生成方法及装置
CN118567932A (zh) * 2024-08-02 2024-08-30 山东墨氪智能科技有限公司 适于半导体器件参数测试的流程生成执行方法

Also Published As

Publication number Publication date
CN110543421B (zh) 2022-03-29

Similar Documents

Publication Publication Date Title
CN110543421B (zh) 基于测试用例自动生成算法的单元测试自动执行方法
US11775414B2 (en) Automated bug fixing using deep learning
US8627290B2 (en) Test case pattern matching
US8312440B2 (en) Method, computer program product, and hardware product for providing program individuality analysis for source code programs
US8020153B2 (en) Source code checker, source code checking method, program for causing execution of the method, and storage medium for storing the program
CN104899147B (zh) 一种面向安全检查的代码静态分析方法
CN110059006B (zh) 代码审计方法及装置
CN108763064B (zh) 一种基于黑盒函数与机器学习的代码测试生成方法和装置
CN110147235B (zh) 一种源代码与二进制代码间的语义比对方法和装置
CN112380120B (zh) 单元测试代码结构自动解析与路径分析方法
CN112765031B (zh) 一种群智化漏洞挖掘任务的分解方法
CN114911711A (zh) 一种代码缺陷分析方法、装置、电子设备及存储介质
CN105224455B (zh) 一种自动生成字符串类型测试用例的方法
CN106919403B (zh) 云环境下基于Java字节码的多粒度代码克隆检测方法
CN108897678B (zh) 静态代码检测方法和静态代码检测系统、存储设备
CN107247663B (zh) 一种冗余变异体识别方法
CN116383070B (zh) 一种面向高mc/dc的符号执行方法
CN110737590A (zh) 一种离线调试方法
CN116483700A (zh) 一种基于反馈机制的api误用检测与修正方法
CN114153447B (zh) 一种自动化生成ai训练代码的方法
KR100777103B1 (ko) 테스트 드라이버 생성 장치 및 방법
CN114462043A (zh) 基于强化学习的Java反序列化漏洞检测系统及方法
CN114706769A (zh) 基于日志的面向回归测试的黑盒测试用例排序方法
CN113282495A (zh) 一种基于轨迹监控的Java软件故障定位方法
CN113505283A (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
GR01 Patent grant
GR01 Patent grant