Proj THUDBFuzz Paper Reading: Graph-Based Seed Object Synthesis for Search-Based Unit Testing

Abstract

  1. 解释Search-based software testing(SBST)(突出了衡量到coverage goal的距离度量的重要性)
  2. SBST的距离度量和搜索操作符(search operators)非常重要
    问题: 已有方法难以应付object inputs,因为此时很难再进行距离度量
    本文:EvoObj,基于EvoSuite
  3. 提出test seeds,即test code skeletons of legitimate objects
  4. 给定target branch后,静态分析目标函数,创建一个object construction graph,这张图中存有操作符的关系、相关object inputs的状态。
  5. 基于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

  1. 对于未被覆盖的branch,创建test template,留下SBST算法进行变异的slots.这里每个slot代表某个object的属性,一般是primitive type。
  2. 静态分析进程间数据流和控制流,建立object construction graph,这张图中会存储属性之间的关联信息,并根据这些信息构建object input
  3. 使用test template code来为slots赋予对应的值
  4. 将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: 基本步骤:

  1. 为目标函数构建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
  2. 根据construction graph生成test template code。generates test template code based on the graph
  3. 填充适当的值。searches appropriate valuation for instantiating the template

P5: Object Construction Graph:

posted @ 2021-11-21 04:33  雪溯  阅读(66)  评论(0编辑  收藏  举报