今天给大家推荐一个高级的开源的技术入门教程,是中文的,看起来无门槛。
这个开源项目就是:Static-Program-Analysis-Book,静态程序分析入门教程。
先解释一下,什么是静态程序分析?
静态程序分析是编程语言中应用层面下的一个细分领域,它是一个非常重要的核心内容。
在理论部分,考虑的是如何设计一个语言的语法和语义,如何设计语言的类型系统等等问题;有了语言的语法、语义和类型系统之后,我们需要支撑语言的运行。因此,在环境部分,需要考虑如何为运行中的程序提供运行时环境 —— 如何设计编译器,在运行时需要怎样的支持(如内存的分配管理)等等;应用部分则关注如何保证语言所写出程序的效率、安全性和可靠性,主要考虑如何对程序进行分析,验证和合成(如何自动合成一个程序)。
当今的计算机世界,面对这样一条恶龙:?
数十年来语言的核心没有变化,但软件的规模和复杂性增长迅速,如何保证程序的可靠性?
尽管新的语言和特性层出不穷,但现在编程语言无非三大类 (如果你对其中的某个语言不熟悉,可以到语言的官网或英文 Wiki 页面查看相关示例,也可以利用搜索引擎做初步的了解。本教程内容主要关注于针对命令式语言 JAVA 的分析。) :
-
命令式(C、C++、JAVA)
-
函数式(Scala、Haskell)
-
逻辑式(Prolog)
静态程序分析即是屠龙的宝刀之一,举例来说这一技术可以处理以下问题 (以下概念只需要了解,重要的应用在后文中会详细讲解。):
-
提高程序可靠性
-
Null pointer dereference, memory leak, etc.
-
空指针引用与内存泄漏等:几乎每个程序编写者都被这两个问题所困扰过
-
-
提高程序安全性
-
Private information leak, injection attack, etc.
-
隐私信息泄漏:这一问题在移动应用中较为普遍,如果你感兴趣,可以参考这篇论文。
-
注入攻击:这是网络安全中非常常见的议题。不熟悉的读者可以查看 W3School 或 Wiki 上关于 SQL 注入攻击的例子。
-
-
为编译优化提供基础技术
-
Dead code elimination, code motion, etc.
-
死代码消除:在编译器的机器无关优化环节,将不会对程序执行结果产生影响的代码(即死代码)删除。
-
循环不变量的代码移动:在编译器的机器无关优化环节,在保证不影响程序执行结果的情况下,将循环中的特定语句移动到循环外,使得程序运行时执行的语句数减少。更为详细的解释可以参考 StackOverFlow 上的回答。
-
-
有助于程序理解
-
IDE call hierarchy, type indication, etc.
-
为集成开发环境的功能提供帮助:当你使用 VS/Idea/Clion/Eclipse/Android Studio 等等 IDE 时,将鼠标悬停在代码上,IDE 能够动态地分析并提示你所悬停对象的相关信息,背后使用的技术就是静态程序分析。
-
此外,静态程序分析技术也可以分析多线程程序,这是一个有难度的研究领域。主要困难在于处理多线程间的 interleaving。
这一《静态程序分析》教程对谁有用?
学生,开发者,研究者…… 几乎所有当代生活者都能从中受益。
-
学习方向与程序有关的
学生。
-
计算机方向的学生可以通过深入学习这一领域知识而为自己建立独特的学术和就业优势,也能加深对编程的理解以降低自己写出 bug 的频率。
-
其他方向的学生既然已经开始阅读这一页面,想必对计算机方向的内容有一定兴趣。你可以通过了解这一技术,了解静态分析软件(包括其内置于编译器,集成开发环境的部分)能够为你提供怎样的功能和便利,以及如何更好地使用这些软件,以此保证你所关心的程序质量。
-
-
工作内容与程序有关的
开发者。
-
无论你希望更好地理解 Wiki 上众多的开源或是闭源的静态程序分析技术,还是希望自己开发一个适用于眼下工作内容的静态程序分析器以保证程序质量,了解静态程序分析都会有所帮助。
-
-
研究领域与程序相关的研究者。 或许你希望微调研究方向,却因没有合适的入门材料而苦恼;或许你希望了解计算机领域的相关知识以期获得启发…… 这一教程可以作为你的入门材料或是闲暇读物。
-
生活与程序相关的
每个人
-
软件质量是信息化时代的重要议题之一,在这个时代生活与工作,你一定会遇到相关的问题。
-
在大多数学校和企业中,没有开设该领域的课程。
-
所以,这门开源的技术课程,价值挺高的。
- 最新
- 最热
只看作者