关键词:
软件测试
单元测试
基于路径覆盖测试用例自动生成
自动化测试工具
摘要:
软件测试是通过人工或自动化手段来检验软件系统的过程,旨在确认系统是否符合规定的要求,并确定预期结果与实际结果的差异。测试用例自动生成(Automatic test case generation,ATCG)通过自动化生成测试用例来减少测试用例生成时间、降低测试成本、缩短软件开发周期。基于路径覆盖的测试用例自动生成(Automated test case generation based on path coverage,ATCG-PC)是一种结构化测试方法,能够生成覆盖程序中所有可能执行路径的测试用例,广泛应用于安全关键型系统。
基于符号执行的测试用例自动生成算法通过对程序静态分析生成符号执行路径,利用约束求解器分析程序的路径约束,问题规模较大时路径暴增、约束求解复杂。基于随机搜索的测试用例自动生成算法注重对生成测试用例问题的数学形式化求解,强调在问题规模较大时如何找到最优解,但算法收敛速度慢,无效搜索次数多。基于启发式搜索的测试用例自动生成算法通过启发式信息指导搜索过程,在合理的时间内找到最优解或接近最优解,减少无效搜索次数,实现目标的高覆盖率。通过对现有基于启发式搜索的测试用例自动生成算法研究,发现它们仍然存在不足,如:1、过于关注测试用例与覆盖目标路径之间的关联性,忽视了目标路径所包含的结构信息。2、侧重于加强算法的全局搜索和局部搜索能力,忽视了初始搜索空间与目标路径的关联性。3、随着维度变量的复杂化,搜索算法在其预设的搜索空间或找到的搜索空间不再适用。4、未能充分利用已生成的测试用例信息。
针对以上问题,本文以某公司项目“Io TDB Autotest”为背景,围绕基于路径覆盖的测试用例自动生成技术展开研究,在此基础上设计实现一个Io TDB自动化测试工具—“Io TDB Autotest”。主要工作如下:
(1)提出一种基于路径结构矩阵和流形启发式搜索的测试用例自动生成算法(Automated Test Case Generation based on Path structure Matrix and Manifold-Inspired Search,DNTSA),通过挖掘待测程序的路径结构信息和测试用例生成的关联性、充分利用已生成的测试用例信息提高搜索效率。(1)根据路径数目信息和路径结构信息构建路径表,从路径数目信息和路径结构信息两个角度寻找测试用例与覆盖目标路径的相关性。(2)设计一种路径结构矩阵(DNT矩阵)及其更新策略,在搜索算法迭代一次后代的过程中挖掘测试用例生成与覆盖目标路径的相关性,指导后续搜索过程。(3)设计目标路径选择策略和缩减搜索空间策略指导搜索算法的搜索进程,提高搜索算法的效率。在公开数据集上的对比实验结果表明,提出的算法DNTSA相比于各基线算法,表现出更好的性能。
(2)现有基于路径覆盖的测试用例自动生成算法建立在人工提取被测程序路径信息的基础上,为了在自动化测试工具“Io TDB Autotest”中实现被测程序路径信息自动提取,提出一种基于语法分析和控制流的路径信息提取方法(A path information extraction method based on syntactic analysis and control flow,PIEM)。(1)对被测程序使用语法分析器生成抽象语法树。(2)根据语法树建立程序控制流图(CFG),遍历程序控制流图。(3)通过全局信息搜索寻找循环函数,处理循环函数结构来优化路径集合,提取路径信息。在公开数据集上的对比实验结果表明,提出的方法能自动提取路径信息。
(3)以上述研究为基础,以某公司项目“Io TDB Autotest”为背景,按软件工程规范设计实现一个Io TDB自动化测试工具—“Io TDB Autotest”,通过需求分析明确系统拟解决的问题;采用分层架构和分模块的功能架构设计,使用前后端分离模式,前端负责用户界面的展示和交互,后端负责处理请求、执行业务逻辑,并返回数据给前端;采用上述研究提出的基于路径结构矩阵和流形启发式搜索的测试用例自动生成算法和基于语法分析和控制流的路径信息提取方法,实现基于路径覆盖的测试用例自动生成。系统通过测试,目前已在公司的线上服务器部署运行,系统运行正常,性能稳定。