开始学习Static Program Analysis,跟着b站南京大学的《软件分析》开始,原来老师(有点帅)是西工大硕士毕业的呀。第一节课是Introduction。
背景
Program analysis是Programming Languages应用的一个分支,十分重要。近十年来,language cores很少有变化,由于需求,语用环境变了(语言没变,语言写的程序更大、更复杂)。保证大型、复杂软件的可靠性、安全性和其它性能,需要静态分析,静态分析就是程序运行之前,在编译时刻完成所有安全和可靠性的检验。
一些概念
1.Perfect static analysis(完美的静态分析)是要同时满足Sound&Complete的,Sound包含Truth,Truth包含Complete。
2.Useful static analysis,要么妥协soundness,即会产生漏 (false negatives);要么妥协completeness,即会产生误 (false positives)。
3.大多数情况下,会选择妥协completeness,可以产生误 ,但是要保证soundness。静态分析就是要在保证soundness的前提下,在分析的精度和速度上做一个有效的平衡。
4.从技术上讲,静态分析用2个词概括:Abstraction抽象和Over-approximation近似(Transfer functions+Control flows)。
- Abstraction即抽象,将具体域值转为抽象域值。
- Transfer functions即转换规则,针对程序上每个语句给抽象值作转换;根据分析目标和程序当中每个statement的语义(semantics)来设计转换规则。补充:top是unknown,bottom是undefined。
- Control Flows即控制流,flow merging是一种近似的方式,后面补充。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!