程序分析入门


10

我正在寻找有关程序分析入门的资源。

我找到的关于该主题的唯一一本书是尼尔森与尼尔森的书。

除此之外,似乎只有“编译器”书中的“程序分析”将作为一章或类似内容。

人们是否还知道其他资源?


3
很难击败Nielson和Nielson上手。Google调查问卷。查看最近的静态分析研讨会(SAS)会议记录。那么谷歌,你有兴趣,特别分析。
戴夫·克拉克

请注意,我们不太喜欢列出问题。幸运的是,这似乎吸引了一个很好的答案,但是请不要提出这样的问题。用Google自己搜索,然后询问您找到的资源中的内容。
拉斐尔

Answers:


7

不幸的是,关于该主题的教科书很少。我认为当今学习程序分析的最好方法是调查可用的不同课程,尝试一些实现,然后查看一些满足您特定需求的研究论文。接下来是其中很小一部分的样本。由于您特别提到的面向编译器的分析很容易找到,因此我将在下面不介绍此类材料。

基于Web的资源 这些文章强调在编译上下文之外使用静态分析。

  1. 一个逆向工程reddit的讨论,对方案的分析有许多有用的链接。

  2. Mozilla Wiki上的抽象解释。

  3. 部署静态分析Flash Sheridan的Dr. Dobbs文章

  4. 后来的数十亿行代码:使用静态分析在现实世界中查找错误,Al Bessey,Ken Block,Ben Chelf,Andy Chou,Bryan Fulton,Seth Hallem,Charles Henri-Gros,Asya Kamsky,Scott McPeak,Dawson Engler在ACM的通讯中。

大学课程分析

  1. 安德斯·默勒在奥胡斯大学教授一门课程,涵盖面向对象和网络技术。
  2. 科罗拉多州博尔德大学的Bor-Yuh Evan Chang 开设了基础课程,其中涉及OCaml实施和研究生课程
  3. 加利福尼亚大学圣塔芭芭拉分校的Ben Hardekopf过去曾做过很多作业,但现在不再在线提供。一些参加过该课程的学生似乎已经提供了Python实现
  4. MarkusMüller-Olm开设了有关Android分析的研究生课程。
  5. 萨尔布吕肯大学(University of Sarbruecken)的Reinhard Wilhelm教授一门研究生课程,涵盖静态分析应用程序,例如时序分析,缓存行为预测和某些形状分析。
  6. 来自MSR的Sumit Gulwani俄勒冈州编程语言暑期学校教授了一门很好的课程,用于静态估计程序的资源消耗(时间/内存)。
  7. 加州大学伯克利分校的Koushik Sen 教授一门课程该课程侧重于错误查找,其主题包括概念执行和软件模型检查。
  8. 马里兰大学的Jeffrey Foster教授一门课程,内容涉及类型系统,模型检查,别名分析以及许多其他常用材料。
  9. 帕特里克·库索特(Patrick Cousot)在麻省理工学院度过了一年,并教授了有关抽象解释的全面基础课程。任务包括一个OCaml实现,该实现从具体的收集语义到一些算法上不平凡的想法。
  10. 一个研究生课程的一些领导在现场教抽象解释是一个很好的地方,追赶上更理论。
  11. 帕特里克·库索(Patrick Cousot)于2009年在俄勒冈州编程语言暑期学校教授了一门有关抽象解释的短期课程。

玩的工具

我在这里没有列出很多研究工具。其中有很多,但我尝试列出一些供您下载和使用的方法,以更好地了解该地区。

  1. Interproc是一个非常有教育意义的工具,可用来学习数值静态分析。

  2. 围裙数值抽象库,如果您真的喜欢数值分析。

  3. Slayer是Microsoft Research提供的形状分析工具。

  4. jStar是基于分离逻辑的Java分析器。

  5. Microsoft Research有许多小组开发许多工具,其中许多可供下载或使用网络演示。我无法在此处列出所有内容,建议您与他们一起玩。

还有很多,但这足以让您忙一阵子。


哇,这是一个全面的答案!非常感谢!
abeln

@Vijay谢谢您的回答!我想知道您是否可以为我添加一些用于编译器分析的指针?
AnneTheAgile 2013年

@AnneTheAgile,我认为扩展需要一个单独的问题和答案。因此,请提出问题,我们很乐意提供答案。
Vijay D


我的回复太慢,我的帖子被删除了。@VijayD也许您可以给我发消息或在此处添加?我感兴趣的是基础知识。我不确定如何最好地找到“容易发现”的“面向编译器的分析”?我是该领域的新手,并希望以正确的方式开始。ty!
AnneTheAgile 2013年

2

这个领域非常广泛...寻找程序正确性的证明(周围有一些工具,例如Klee)。然后有各种各样的“程序检查器”,它们的复杂程度各不相同(例如,对于夹板的范围,请参见夹板探伤仪),这些程序会检查“编程准则的符合性”。甚至Linux的匹配也属于此类。

对于动态工具,周围有各种各样的性能/测试覆盖率工具,以及诸如valgrind之类的用于内存检查的东西。

缩小兴趣范围,然后向下钻取。


谢谢。您提到的是工具,但是关于静态程序分析的书籍或调查呢?
abeln

1

程序分析有两个研究重点dynamicstatic程序分析。

如果您具有编译器的背景知识,那么我建议您先阅读Dragon书籍中的第4、6、9章,以初步了解程序分析。

或者,至少如果您了解基本图形,那么最好去攻读研究生课程,例如MIT 6.820CMU 17-355 / 17-665 / 17-819

以上是关于静态程序分析的内容。如果您更关心动态程序分析,则程序分析是一个不错的起点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.