iDiscovery

  Feedback-Driven Dynamic Invariant Discovery

Posted by Xiaoran on February 26, 2018

这篇paper的完整题目是 Feedback-Driven Dynamic Invariant Discovery

下载链接

Motivation

  • 之前的工具找 specification 有一些问题
    • 获得错误的、不精确的 specification
    • 漏掉了本应有的 specification
  • 为了改进 specification,Daicon 需要优质的测试集,但是目前的技术难以获得

1、Intro

  • 用 Daicon 生成的 invariant 来合成 assertion
  • 这些 assertion 被 instrument 到程序里
    • 可以减少坏 specification,增加好 specification
  • 对新的程序进行符号执行,获得新的测试集
  • 循环这个 loop,达到一个定点停止
    • 定点:推断的 invariant 不再变化
    • 变化的原因:新的测试例违背了之前的 assertion

  • assertion separation(
  • violation restriction(
  • 对符号执行的过程进行剪枝
  • 简化 PC
  • 约束求解复用

2、例程

  • 初始 Daicon 生成了7个 invariants
  • 经过3次 iteration 后,选出了3个好的,剔除了4个不精确的

3、实现

  • 对于每个 assertion,符号执行都试图访问 false 的那个 branch
  • 用现成的约束求解器求解,生成新的测试例
  • iDiscovery 未必能找到所有的 invariant

  • 复杂度:iDiscovery 增加了 m 个 assertion,那么就会增加 m 个 PC
  • 优化算法:看不懂

5、实验

  • 只需4个 iteration 就能显著减少 invariant 的数量
  • 应用两种优化方法可以
    • 显著减少 iteration 的数量,从而减少运行时间
    • 可能会减少 invariant 的数量