基于路径覆盖测试用例自动生成的单元测试方法技术

技术编号:19263299 阅读:31 留言:0更新日期:2018-10-27 02:17
本发明专利技术提供了基于路径覆盖测试用例自动生成的单元测试方法,首先对被测试程序的代码进行词法分析与语法分析,然后得到程序的控制流图。得到控制流图后根据已知的判断节点个数生成节点表。然后根据自动生成的测试用例,在生成的控制流图中驱动节点中的可执行代码的执行,同时根据可执行代码的执行结果计算获取fitness适应值,进行选择子节点继续重复上述过程,直到找到图中的终止节点,最后生成路径标记与得到该路径对应的fitness适应值。接着运行测试用例自动生成算法,该算法根据返回的fitness适应值不断自动生成测试用例,直到路径完全覆盖,或者超过设定的运行时间时退出。本发明专利技术适用于软件测试的,经过实验验证,可以应用于实际的软件测试工作环境。

Unit testing method based on path coverage test case automatic generation

The invention provides a unit test method based on automatic generation of path coverage test cases. Firstly, lexical analysis and syntax analysis are performed on the code of the tested program, and then the control flow chart of the program is obtained. After obtaining the control flow graph, the node table is generated according to the known number of nodes. Then, according to the test cases generated automatically, the executable code in the generated control flow diagram is driven to execute. At the same time, the fitness fitness fitness is calculated according to the execution results of the executable code, and the child nodes are selected to repeat the above process until the terminating node is found in the graph. Finally, the path marker and the path marker are generated. The corresponding fitness fitness value of the path is obtained. Then the test case auto-generation algorithm is run, which automatically generates test cases according to the fitness fitness value returned until the path is completely covered or exits when the set running time exceeds. The invention is suitable for software testing and can be applied to actual software testing working environment after experimental verification.

【技术实现步骤摘要】
基于路径覆盖测试用例自动生成的单元测试方法
本专利技术涉及计算机软件工程的软件测试领域,具体涉及基于路径覆盖测试用例自动生成的单元测试一体化方法。
技术介绍
随着软件产业的不断发展,软件测试在软件开发中的地位越来越重要,因为传统的软件测试基本是由人工生成测试用例,再对软件进行测试,这是一个极其复杂和繁琐的体力劳动,不仅成本高而且易出错,再者在软件测试的过程中存在大量技术含量低且重复性极高的工作,所以设计一个软件自动测试智能软件能够有效降低企业的测试人力成本,同时对测试报告进行分析,能够有效地保证测试效率和效果并控制测试成本。一个优秀的自动化测试软件可以极大地节省大量的人力物力,减少资源消耗,提高企业效益与企业的市场竞争力。现有的软件自动化测试方法中使用的动态的方法大都是具体基于语句覆盖或者是分支覆盖,而在软件测试所有的覆盖类型中,路径覆盖是最强的覆盖,有更强的纠错能力,能更有效地检查出软件的瑕疵和错误。且现如今虽有测试用例自动生成的方法,却没有一个完整的,可以对源代码自动进行解析,并将测试用例代入进行测试,同时生成测试报告的软件自动化测试智能方法。本专利技术中采用的基于路径覆盖测试用例自动生成的单元测试方法,构建源代码分析生成控制流图模块、测试用例自动生成模块、测试用例执行模块、测试报告生成模块,并将这些模块组合生成软件自动化测试系统。基于路径覆盖测试用例自动生成,无须人工干预,仅需输入需要测试的源代码,系统便可解析源代码生成控制流图,再自动生成测试用例,不断地进行测试,直至覆盖源代码中所有路径或已超过最大迭代次数,最后生成一份测试报告。本专利技术采用合理源代码解析与程序分析技术并结合测试用例自动生成的方法,实现软件自动化测试,因为无需人工干预,该系统极大地提高软件测试的效率与降低软件测试成本,效果极好。
技术实现思路
本专利技术针对如今软件行业上缺乏一体化的软件自动化测试方法的不足,开发出了基于路径覆盖测试用例自动生成的单元测试智能软件。本专利技术的目的在于构建一个软件自动化测试的系统,帮助软件测试人员去除大量的技术含量低且重复性的工作,能够快速的获得覆盖被测试程序所有路径的测试用例的报告,从而利用这些测试用例更好地检测出测试程序可能存在的BUG,用于修复程序漏洞,提高软件质量。基于路径覆盖测试用例自动生成的单元测试方法,其包括以下步骤:(a)对输入源程序即源代码进行文件预处理,使其符合词法分析与语法分析要求的语法结构;(b)对步骤(a)预处理后的输入源代码进行词法分析,建立符号表;(c)对步骤(a)预处理后的输入源代码进行语法分析,建立源代码对应的控制流图(CFG),其中包含控制节点、普通节点与终止节点,将源代码转化可执行的中间代码,并在控制节点中插入可执行代码;(d)由测试用例自动生成算法生成测试用例;(e)由测试用例执行模块获取测试用例,并驱动控制流图中节点的可执行代码的执行,根据可执行代码执行结果计算适应度函数fitness适应值;(f)若当前节点不是终止节点,由可执行代码的执行结果选择下一个子节点(子节点指的是当前节点指向的下一个节点)重复(c),(d),(e)步骤;否则进入下一步;(g)当前节点是终止节点,获取fitness适应值的最终结果,并生成该测试用例对应的路径编码;(h)判断路径覆盖是否已经达到100%或者运行是否已经超时,若已经达到100%则进入下一步,若已经超则退出,否则,重复(d),(e),(f),(g)步骤;(i)生成包含测试用例对应覆盖的路径,以及路径覆盖率的测试报告。进一步的,步骤(a)中,文件预处理中,若有多文件,在C/C++中将通过include语句进行识别,将需要include的文件放到同一个源文件中;将if‐elseif‐else结构中在elseif和else中插入块结束标识符(一般为‘{’与‘}’),将if‐elseif‐else结构转换成if‐else嵌套结构,将switch语句结构中case多分支结构进行转换成if‐else多嵌套结构,降低代码抽象程度与控制流图实现难度。进一步的,步骤(b)(c)中,对源代码进行词法分析与语法分析,生成源代码的对应的控制流图(CFG),通过循环、分支、顺序结构能表示任何可执行代码的结构,所以将顺序执行代码转化为控制流图中的顺序节点,其中包含着源代码中顺序结构代码的中间表示代码,用栈存储相关代码信息,将分支结构与循环结构通过构建图的分支节点与局部回路形式将分支与循环结构,在图中实例化。进一步的,步骤(c)中,源代码中存在函数调用与递归函数,将函数视为一个模块,对函数进行分析,构建该函数代码对应的控制流图,在函数调用时,将函数对应的控制流图的第一个节点的指针传给调用函数,组合构建控制流图;对于简单的递归函数则将其构建为带有局部回路的控制流图子图,递归调用时将子图传给外部调用者构建总的控制流图。进一步的,步骤(c)中,设计一套基于栈式计算机的中间代码指令,将操作符如+、‐、*、/等转换为对应的运算指令如ADD、SUB、MUL、DIV等,增加PUSH,POP,MOV等操作指令与增加ID,NUM,STR等标识指令。用以将高级程序设计语言进行转化生成中间代码,通过中间代码的执行来模拟程序的执行。进一步的,步骤(b)(c)中,普通节点与控制节点中的存储的是源代码的中间代码表示方法,程序的执行可以抽象为内存中变量值的修改,该方法将变量表示为ID符,并压栈,同时再将该变量在符号表中的地址压栈,在后面中间代码执行阶段,便可通过ID标识符获知当前处理为变量,接着通过ID后面的地址能访问到该变量位置,并对变量进行操作,如果是数字,则将NUM符压栈,同时将数字的值压栈,操作符直接压栈,通过这种中间代码表示降低高级程序设计语言的抽象程度,之后创建一个中间代码解释器,便能直接运行设计的中间代码;构建的中间代码解释器其基本原理是使用栈式计算机的机理,通过一个栈与几个暂存器来执行中间代码,并返回中间代码执行结果;将代码转为中间代码之后,降低了代码抽象程度,在实际的中间代码运行中,采用中缀表达式转后缀表达式的方法,通过栈的数据结构计算中中间代码的结果。进一步的,步骤(b)(c)中,在语法分析过程中,采用递归下降的分析方法将源代码进行语法分析,从而辅助控制流图的构建,通过步骤(b)(c)系统性地根据测试用例自动生成算法的需求构建源程序解析生成控制流图,从而使控制流图生成自动化。进一步的,步骤(d)(e)中,生成的控制流图是可驱动性,即该控制流图可以根据生成的测试用例自动执行节点中的可执行代码,再根据代码执行结果,自动选择下一节点,实现了控制流图中的路径自动生成。进一步的,步骤(d)(e)中,控制流图中节点里的中间代码在执行过程中,在中间代码解释器访问符号表的过程中,当前符号若被访问,则将当前符号记录与符号表中前一个符号的记录进行交换,提高符号表中符号被命中的概率与减少符号命中过程中所花费的时间。进一步的,步骤(d)(e)(f)(g)中,测试用例自动生成算法不断地自动生成测试用例,驱动控制流图中路径生成,如果路径覆盖率没有带到100%或者运行还未超时,则根据上一个测试用例执行结果进行改进继续生成测试用例,不断生成路径。上述步骤(h)中,程序正常退出并打印测试报告,该系统本文档来自技高网
...

【技术保护点】
1.基于路径覆盖测试用例自动生成的单元测试方法,其特征在于,包括以下步骤:对输入源程序即源代码进行文件预处理,使其符合词法分析与语法分析要求的语法结构;对步骤(a)预处理后的输入源代码进行词法分析,建立符号表;对步骤(a)预处理后的输入源代码进行语法分析,建立源代码对应的控制流图(CFG),其中包含控制节点、普通节点与终止节点,将源代码转化可执行的中间代码,并在控制节点中插入可执行代码;由测试用例自动生成算法生成测试用例;由测试用例执行模块获取测试用例,并驱动控制流图中节点的可执行代码的执行,根据可执行代码执行结果计算适应度函数fitness适应值;若当前节点不是终止节点,由可执行代码的执行结果选择下一个子节点重复(c),(d),(e)步骤;否则进入下一步;当前节点是终止节点,获取fitness适应值的最终结果,并生成该测试用例对应的路径编码;判断路径覆盖是否已经达到100%或者运行是否已经超时,若已经达到100%则进入下一步,若已经超则退出,否则,重复(d),(e),(f),(g)步骤;生成包含测试用例对应覆盖的路径,以及路径覆盖率的测试报告。

【技术特征摘要】
1.基于路径覆盖测试用例自动生成的单元测试方法,其特征在于,包括以下步骤:对输入源程序即源代码进行文件预处理,使其符合词法分析与语法分析要求的语法结构;对步骤(a)预处理后的输入源代码进行词法分析,建立符号表;对步骤(a)预处理后的输入源代码进行语法分析,建立源代码对应的控制流图(CFG),其中包含控制节点、普通节点与终止节点,将源代码转化可执行的中间代码,并在控制节点中插入可执行代码;由测试用例自动生成算法生成测试用例;由测试用例执行模块获取测试用例,并驱动控制流图中节点的可执行代码的执行,根据可执行代码执行结果计算适应度函数fitness适应值;若当前节点不是终止节点,由可执行代码的执行结果选择下一个子节点重复(c),(d),(e)步骤;否则进入下一步;当前节点是终止节点,获取fitness适应值的最终结果,并生成该测试用例对应的路径编码;判断路径覆盖是否已经达到100%或者运行是否已经超时,若已经达到100%则进入下一步,若已经超则退出,否则,重复(d),(e),(f),(g)步骤;生成包含测试用例对应覆盖的路径,以及路径覆盖率的测试报告。2.根据权利要求1所述的基于路径覆盖测试用例自动生成的单元测试方法,其特征在于:步骤(a)中,文件预处理中,若有多文件,在C/C++中将通过include语句进行识别,将需要include的文件放到同一个源文件中;将if-elseif-else结构中在elseif和else中插入块结束标识符,将if-elseif-else结构转换成if-else嵌套结构,将switch语句结构中case多分支结构进行转换成if-else多嵌套结构,降低代码抽象程度与控制流图实现难度。3.根据权利要求1所述的基于路径覆盖测试用例自动生成的单元测试方法,其特征在于:步骤(b)(c)中,对源代码进行词法分析与语法分析,生成源代码的对应的控制流图(CFG),通过循环、分支、顺序结构能表示任何可执行代码的结构,所以将顺序执行代码转化为控制流图中的顺序节点,其中包含着源代码中顺序结构代码的中间表示代码,用栈存储相关代码信息,将分支结构与循环结构通过构建图的分支节点与局部回路形式将分支与循环结构,在图中实例化。4.根据权利要求1所述的基于路径覆盖测试用例自动生成的单元测试方法,其特征在于:步骤(c)中,源代码中存在函数调用与递归函数,将函数视为一个模块,对函数进行分析,构建该函数代码对应的控制流图,在函数调用时,将函数对应的控制流图的第一个节点的指针传给调用函数,组合构建控制流图;对于简单的递归函数则将其构建为带有局部回路的控制流图子图,递归调用时将子图传给外部调用者构建总的控制流图。5.根据权利要求1所述的基于...

【专利技术属性】
技术研发人员:黄翰连木明刘方青杨忠明郝志峰
申请(专利权)人:华南理工大学
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1