交叉验证代码_浅谈“用于自动程序验证”的程序分析

程序静态分析是一种不通过运行程序本身而获取其信息的技术。“程序的信息”是很宽泛的概念,比如可以是:

  • 函数、变量个数(基础特征)
  • 是否可能有运行时错误(代码安全)
  • 是否存在死代码/不可达代码(编译优化)
  • 时间空间复杂度
  • ...

例1,Pagai静态分析器可以得到“数值变量的关系“信息。图中注释均由PAGAI在分析后自动插入。

463e4b469f6717ab2ba50309a927b6e2.png

静态分析怎么用于程序验证?

程序验证的目标属性可以有很多,比如内存安全(程序不存在整数溢出、空指针解引用等),逻辑功能(如“某排序算法是否真的实现了排序“),等等。

而对于某些属性,静态分析的结果就可以用来验证。

例2. 给定一个大小为n的数组A[n],假如对于任意下标变量k,静态分析都能得到数值关系x < n,那我们就能成功验证“该程序不存在数组越界访问“。

例3. 通过分析数值属性,来验证神经网络:AI2: Safety and Robustness Certification of Neural Networks with Abstract Interpretation

例4. 通过"Shape Analysis"(分析内存、数据结构相关的属性),验证DSW垃圾回收算法 Automated Verification of the Deutsch-Schorr-Waite Tree-Traversal Algorithm,SAS'06

静态分析用于自动验证“多”么?

和静态分析相关的研究方向有很多

程序分析可以看成是一个交叉的研究方向,因为你会在PL以外的其它不同计算机领域的会议上看到程序分析的topic。例如,软件工程如FSE, ICSE, ISSTA, ASE等;系统领域如 OSDI, SOSP, ASPLOS, EuroSys, ATC等;安全领域如Oakland, CCS, NDSS, Usenix Security等等。造成这种交叉性质的原因不难理解:程序分析是一种方法技术,目的是分析出程序在可靠性、安全性、性能等各种方面的表现和问题,而各领域的程序都是用编程语言写的,且都或多或少地有上述方面的分析需求,因此不同领域对于程序分析的广泛兴趣便不足为奇。
作者:啥玩应啊
链接: https:// zhuanlan.zhihu.com/p/45 208498

以上这些会议,也或多或少会有和“形式验证“相关的文章。另外补充一些“形式化方法”方向的会议CAV、LICS、TACAS、FM、VMCAI、FMCAD.

总体来说有相当一大部分静态分析研究人员不怎么做验证。而形式化方法本身也有很多特有的问题和技术。但是,“静态分析”(尤其是抽象解释)对于验证社区还是有深远影响的(尤其是近二十多年来),包括思想上和技术上。比如

  • Astree (Astrée Runtime Error Analyzer), 数值域抽象解释经典之作,可以完全自动地验证内存安全等属性。
  • Shape analysis。不再”受限“于传统的pointer/alias analysis,可以用来验证关于数据结构的、复杂的逻辑属性,如例4的DSW算法。 曾经对验证圈子的人很有冲击力,反而做静态分析的很多人不怎么能跟进(follow)。
  • Predicate abstraction。 “software model checking"开山之作SLAM项目,借鉴了抽象解释的框架来formalize [1]

[1] Tom Ball讲的小故事 https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tball-tball_30yai_text.pdf

待续。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值