南大《软件分析》01 introduction
2022-10-26 15:45:28 0 举报
南大软件分析第一节课笔记
作者其他创作
大纲/内容
Introduction
一、 本节课总目录
二、PL(Programming Language) and Static Analysis
1. 在理论部分,考虑的是如何设计一个语言的语法和语义,如何设计语言的类型系统等等问题。在过去十年中,语言核心几乎没有变化
2. 有了语言的语法、语义和类型系统之后,我们需要支撑语言的运行。因此,在环境部分,需要考虑如何为运行中的程序提供运行时环境——如何设计编译器,在运行时需要怎样的支持(如内存的分配管理)等等。语言承载环境处于一个缓慢提升的阶段,主要集中在硬件设备以及高性能编程优化方面
3. 变化最大的是程序分析,因为随着IT、云计算、软件SaaS的快速发展,软件的规模变得更大、结构更复杂、数量更多。如何确保系统的可靠性、安全性和其他承诺,如何自动合成一个程度,成为了一个日趋热门的研究和工程化领域
2. 有了语言的语法、语义和类型系统之后,我们需要支撑语言的运行。因此,在环境部分,需要考虑如何为运行中的程序提供运行时环境——如何设计编译器,在运行时需要怎样的支持(如内存的分配管理)等等。语言承载环境处于一个缓慢提升的阶段,主要集中在硬件设备以及高性能编程优化方面
3. 变化最大的是程序分析,因为随着IT、云计算、软件SaaS的快速发展,软件的规模变得更大、结构更复杂、数量更多。如何确保系统的可靠性、安全性和其他承诺,如何自动合成一个程度,成为了一个日趋热门的研究和工程化领域
三、 Why We Learn Static Analysis?
静态分析在代码执行之前就可以检测出代码的错误
1. 程序的可靠性空指针解引用、内存泄漏等。
2. 项目安全私人信息泄露、注入攻击等。例子编译器优化死代码消除、代码移动等
3. 编译器优化死代码消除、代码移动等。
4.项目的理解IDE调用层次结构、类型指示等。
四 、 What is Static Analysis
RICE (莱斯)定理 : 不存在一个方法对一个程序判断其是正确还是错误的
Useful static analysis
1. Compromise Soundness (false negatives) 漏报
2. Compromise Completeness (false Positives ) 误报
越sound的越好 ---宁可错杀1000,也不能放过一个
1,2 都是正确的 ,但是第一个比较精确,所以代价就高,而 第二个不精确,上下文联系不强,则比较cheap 。 在确保正确的前提下soundness,提高精度和速度。当结论为0 ,1,2,3都是正确的是 因为都是sound的 ,但是当结论为-1,0时就不正确了,因为在这个时候不sound了。
两个词概括静态分析 Abstraction抽象 例如将代码抽象出符号0 就可以分析0不能做除数 ,抽象出数字就可以分析 ,能不能负数不能做索引等
Transfer Functions: 通过抽象进行转义 并不是简单的数字运算 而是根据Transfer Functions
并不是简单的数字运算 而是根据Transfer Functions 虽然静态分析有用,但是有时候会产生误报 如下图所示③
过近似 : 在合并点处,必须抽象 Control Flows
0 条评论
下一页