Transcript Document
基于覆盖分析和符号执行的自 动化测试用例生成方法研究 庄元 指导教师:陈道蓄 教授,顾庆 教授 南京大学计算机科学与技术系 提纲 引言 自动化测试用例生成 基于符号执行的测试用例生成 基于覆盖分析和符号执行的测试用例生成方法 Jabolic 的设计与实现 实证研究 总结与展望 提纲 引言 自动化测试用例生成 基于符号执行的测试用例生成 基于覆盖分析和符号执行的测试用例生成方法 Jabolic 的设计与实现 实证研究 总结与展望 引言 软件测试 测试用例设计 根据指定的测试用例进行符号执行 根据执行结果判断可靠性 自动化 可行性 成本 提纲 引言 自动化测试用例生成 基于符号执行的测试用例生成 基于覆盖分析和符号执行的测试用例生成方法 Jabolic 的设计与实现 实证研究 总结与展望 自动化测试用例生成 系统构成 程序分析器 路径选择器 测试数据生成 方法 随机测试 基于搜索的测试 符号执行 提纲 引言 自动化测试用例生成 基于符号执行的测试用例生成 基于覆盖分析和符号执行的测试用例生成方法 Jabolic 的设计与实现 实证研究 总结与展望 符号执行 使用符号变量,而不是实际的程序变量,来执行程 序,程序的输出结果往往是由符号变量构成的符号 函数,程序的中间状态也是由符号变量来进行表示。 相关定义 程序的状态 程序变量的符号值,路径条件和程序计数器 路径条件 一个基于符号变量输入的布尔表达式 程序计数器 下一个要执行的语句标号 符号执行树 描述在符号执行过程中走过的所有的路径 符号执行树 经典符号执行 组件 代码插桩 在给定的被测代码中插桩额外的代码用于收集信息, 例如程序的状态 程序执行 对被测代码进行符号模拟执行,就是对符号执行树的 搜索遍历 约束解决 解决工具对符号执行过程中采集到的约束进行求解 动态符号执行 例子 拓展符号执行 抽象 指通过约减程序的数据域,从而降低针对程序分析的 复杂度 组合符号执行 归纳函数的输入输出上下文,将嵌套函数的分析转为 单一函数的分析 路径归并 引入归并点,同抽象进行结合进一步减少复杂度 一些成果 JPF-SE 和 Symbolic (Java) PathFinder DART Directed automated random testing CUTE 和 jCUTE Concolic Testing CREST PEX Microsoft 其他应用 测试序列生成 运行时错误的静态检测 修复程序和数据结构 并行程序分析 并行程序 转为 串行程序 Differential 符号执行 计算版本变更,用于回归测试的测试用例集维护 提纲 引言 自动化测试用例生成 基于符号执行的测试用例生成 基于覆盖分析和符号执行的测试用例生成方法 Jabolic 的设计与实现 实证研究 总结与展望 框架 模块 覆盖信息生成 通过输入的测试用例集和源代码生成覆盖矩阵 覆盖信息分析 根据代码覆盖信息,生成符号执行所必须的代码以及 配置信息 符号执行 符号执行给定代码,按照配置要求求解路径约束条件, 生成新的测试用例 提纲 引言 自动化测试用例生成 基于符号执行的测试用例生成 基于覆盖分析和符号执行的测试用例生成方法 Jabolic 的设计与实现 实证研究 总结与展望 Jabolic 架构 一些组件 Symbolic PathFinder Cobertura Junit CoverageAnalyzer 输入:xml格式的覆盖信息 输出:Java Path Finder友好的配置信息 CoverageAnalyzer 提纲 引言 自动化测试用例生成 基于符号执行的测试用例生成 基于覆盖分析和符号执行的测试用例生成方法 Jabolic 的设计与实现 实证研究 总结与展望 实验设计 代码样本 随机测试 Randoop 符号执行 SPF 基于覆盖分析和符号执行的方法 Jabolic 实验结果 随机测试 符号执行 Jabolic 讨论 初始测试用例选取对实验结果的影响 随机测试时间的选择对实验结果的影响 影响实验的其他因素 提纲 引言 自动化测试用例生成 基于符号执行的测试用例生成 基于覆盖分析和符号执行的测试用例生成方法 Jabolic 的设计与实现 实证研究 总结与展望 总结展望 考虑规模更大的实验对象 开源代码 大规模 完善 Jabolic 源代码插桩 图形界面 谢谢