A Unifying View on SMT-Based Software Verification(论文简翻)

Abstract 大意:论文目标是提供对四种(基于SMT的验证方法的)简洁而易理解的表示,来帮助进行理论和实践上的学习。包括1、有限模型检测;2、k归纳;3、谓词抽象;4、基于插值的懒惰抽象。他们在CPAchecker中重新统一表示了这四种方法。在此基础上,我们就可以从配置参数的角度对不同的方法进行彻底比较。最后总结了效能上的区别并进行了讨论。

Introduction大意:操作系统代码验证有关的文章(5.8.24.56);谓词抽象有关的(47)通关反例引导的精炼抽象(CEGAR 34);懒惰抽象(51);基于插值的懒惰抽象(61);“大块”编码(11,21);辅助不变量的k归纳(13.41); SV-COMP中的许多文章都是关于上面这些技术的。对 惰性谓词抽象 和 带插值的惰性谓词抽象进行了模拟。同时将统一网络扩展到有界模型检测与k归纳,并且对这些方法进行了比较评价。

遗憾的是没有一个严格可用的算法比较成果。总的来说模型检测的理由和过程是存在的,但是没有一个常见的系统的比较算法。论文包含了四种广泛使用的SMT路径在一个统一的理论网络中并比价了他们的性能。

      有界模型检测:许多软件bug可以通过对程序状态空间的有界搜索来找到。有界模型检测(26)目的是为了编码所有的程序路径(在一个程序有界展开的SMT公式中,当公式编码了一个可行的程序路径从入口到错误情况那么SMT公式是可满足的(此时程序是有bug的))许多实例已经证明通过揭发程序bug可以成功的提高程序质量(尤其是在短路径上)。例如:各种各样的算法(35、37、69、64)。这种验证方法的特点是可以快速的验证多种程序的状态空间的庞大部分而不需要做庞大的基础验证工具抽象。

      无界的(无抽象的):有界模型检测的想法(编码部分的程序变为SMT公式,即使很大)也可以用在无界检测上通过归纳论证(68)例如检测安全性能是否可以被(所有从程序入口到循环入口的路径)接受之后就可以假设在循环入口的安全性能(归纳假设)将会通过所有路径通过循环体。由于安全性能通常是非归纳的,所以更加一般的k-归纳原则被使用。k-归纳的方法被应用在多种工具中。强化k-归纳的证明方法通过一代代强化不变量之后又被各自复制。

      无界的(通过抽象):一个完全不同的方法用来计算状态空间的过近似程度,使用来自数据流分析中的见解方法(1.57,63)。过近似是一个非常有用的技术来缓解状态空间爆炸,太过粗糙的抽象等级可能会导致错误警报。因此,状态空间抽象常常与反例指导的抽象细化(CEGAR方法34)与惰性抽象细化(51)结合在一起。有几款验证机完成了谓词抽象:例如SLAM,BLAST,CPA CHECKER。一个安全的归纳不变量是被反复迭代计算出的抽象状态,新的谓词都被发现在每一步CEGAR。插值法(38,60)是一个很成功的方法来获得有用的谓词从不可行的错误路径;路径不变量(17)可以被用于获得获取程序路径的循环不变量。          代替使用谓词抽象,也可以直接利用插值构建抽象的状态空间使用IMPACT算法。

      结构:在论文的剩余部分,我们首先介绍了一些必要的背景知识在第二部分。并且定义了结构化的程序分析作为综合SMT基础软件分析工具的底座在第三部分。在第四部分,我们表达了我们网络中的的四种方法并且解释了他们的核心概念和各自的不同。第五部分包含了一个实验研究关于有效性和效率的比较当现有的方法用于验证任务的大集合上。

2、背景

2.1 程序表示法

     在这部分我们提供一个基本定义。为了简化,我们将描述约束到一个简单必要的程序语言中,所有的操作不是运行就是假设,并且所有变量的范围都在实数内。这样一个程序可以使用(CFA)来表示,这是一个有向图程序操作附着在它的边上。 一个CFA由一系列的程序点集L,和一个(代表程序入口的)初始点,和一个点与点之间的边集构成,当控制流沿着边进行时每个标签代表的操作逐一执行。所有在CFA运行过程中的程序变量集都被表示为X。

【我们看一下图2的程序,定义了两个无符号整数,循环,自加,判断(可以看到是用来判断错误点的);看旁边的控制流图,初始点为start,每步程序都产生一个新的节点,节点间用线标识(为符号内容)】

(接下来有大量符号内容,只意会,不明确说明)。从程序变量集X到实数集Z的映射为一个 【具体的数据状态c】 。一系列这样的【状态】被称为region(域),我们使用一阶公式 \psi 来表示域覆盖X中的所有变量,那么【具体数据状态】用 \psi 来表示的话就是c满足于 \psi 。(c,l)表示数据状态与L 点集的关系对。

一个操作(操作集O中的)既可以是一个【任务】(任务的形式为一个变量x和一个作用自由的数学符号e组成)或者是一个【假设操作】(由判断谓词和变量构成)。语义学对一个操作(op)通过【最强壮的后置运算符SP】来定义。对于公式 \psi 和【任务】,被定义为:使用关于\psi 的符号和x组成一个【任务】,这个任务的SP(后置条件)为 存在后项x可通过公式从x转化且可用自由数学符号e来表示。同时对于【假设操作】p的SP为 \psi 且p。注意到在实现中,我们可以通过斯克伦范式(skolemization)来避免SP公式中的存在量词。

一条路径 \sigma 是图G中的一系列的连贯边。一条路径如果从初始位置【l 初始】开始就被称为是程序路径。路径的语义学定义由一系列迭代的操作的SP构成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值