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
源代码插桩
图形界面
谢谢