Proj THUDBFuzz Paper Reading: Graph-Based Seed Object Synthesis for Search-Based Unit Testing
Abstract
- 解释Search-based software testing(SBST)(突出了衡量到coverage goal的距离度量的重要性)
- SBST的距离度量和搜索操作符(search operators)非常重要
问题: 已有方法难以应付object inputs,因为此时很难再进行距离度量
本文:EvoObj,基于EvoSuite - 提出test seeds,即test code skeletons of legitimate objects
- 给定target branch后,静态分析目标函数,创建一个object construction graph,这张图中存有操作符的关系、相关object inputs的状态。
- 基于object construction graph,合成test template code,此时每个slot都是一个潜在可变异位置(mutation point)
该方法能够与现有的SBST算法无缝结合使用。
效果:
对象:103个开源java项目中的2750个方法
效果:比EvoSuite更好
1. Intro
P1: 介绍SBST;有点:仅需要轻量级插桩;EvoSuite和Randoop;object oriented code challenges;无法生成和识别valid objects;object inputs常见
P2: 保障SBST有效的假设:在当前选用的fitness度量下搜索空间连续单调
首先介绍正常binary情况下的SBST:
以常规branch distance为例,给定要测试的函数example,要覆盖的分支:第3行
SBST会将输入的变量与目标branch condition的值联系起来成为黑盒,引导种子选择和变异。
此外,常常还会加点正则化。
P3: Object inputs却很可能导致假设不成立,即使得搜索空间不再连续或者单调
假设s.getSupervisor()返回null,那么就会直接抛出异常,使得分支b的条件b.cond既不被满足也无法计算branch distance,这导致该搜索无法被指导。
P4: 用Fig3讲述不连续
P5:
本文:seed tests
- 对于未被覆盖的branch,创建test template,留下SBST算法进行变异的slots.这里每个slot代表某个object的属性,一般是primitive type。
- 静态分析进程间数据流和控制流,建立object construction graph,这张图中会存储属性之间的关联信息,并根据这些信息构建object input
- 使用test template code来为slots赋予对应的值
- 将seed test方法用最小代价与现有的SBST算法整合
P6:
本文: 工具: EvoObj,基于EvoSuite
测试集: SF100中103个开源Java项目中的2750个方法。
overhead代价中等
2. Motivating Example
P1: 片段来自Gangup, SF100。EvoSuite在半小时内无法成功生成对应测试
P2: EvoSuite生成的testcase
P3: 从类定义上说明需要依赖id准确,还需要设置属性players,往里放数据
P4: 基本步骤:
- 为目标函数构建construction graph,并在图中表明object的状态关联builds its construction graph from the target method, depicting how to construct the
object input with states relevant to the target branch - 根据construction graph生成test template code。generates test template code based on the graph
- 填充适当的值。searches appropriate valuation for instantiating the template
P5: Object Construction Graph: