文章目录
静态分析简介
- 中文名:程序静态分析
- 外文名:Program Static Analysis
- 目的:规范编码规则、提升代码质量
- 特点:不实际执行程序
什么是静态分析?
静态分析是指不运行代码的情况下,通过词法分析、语法分析、控制流分析、数据流分析等技术对代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
通过静态分析可检出出以下问题,包括但不限于:变量未定义、类型不匹配、变量操作域问题、数组下标越界、内存泄露、死锁、空指针、缓冲区溢出、安全漏斗等问题。
目前全世界最好的代码分析工具误报率在 5~10%之间,能够爆出的缺陷种类也仅有几百种。
为什么要做代码静态分析?
在一篇名为《 The Shift-Left Approach to Software Testing 》的文章中提及以下观点:
Bug 引入
绝大多数 Bug 在编码阶段引入的。
Bug 发现
绝大多数 Bug 在编码阶段之后发现的。
Bug 修复成本
假设在编码阶段发现缺陷只需 1 分钟修复,那么单元测试阶段需要 4 分钟、功能测试阶段需要 10 分钟、系统测试阶段需要 40 分钟、而发布之后可能需要 640 分钟。
测试左移
静态分析也称静态测试,是质量内建举措中测试左移的实践之一,在静态分析阶段即可发现缺陷问题的修复成本是很低的。
“缺陷发现得越早,修复的成本越低。”——戴明曾
静态分析特点
- 不实际执行程序静态分析不运行代码,只是通过对代码的静态扫描,从而对程序进行分析。> 动态分析是通过模拟环境或真实环境中执行程序进行分析的方法,多用于性能测试、功能测试、内存泄漏。
- 执行速率快、效率高成熟的静态分析工具每秒可扫描上万行代码。
- 误报率较高静态分析是通过对程序扫描找到匹配某种规则模式的代码,从而发现代码中存在的问题,所以有时会造成将一些正确代码识别为缺陷的问题。
常用的静态分析技术
- 词法分析
- 语法分析
- 语义分析
- 抽象语法树分析
- 控制流分析
- 数据流分析
- 污点分析
- 无效代码分析
版权归原作者 马上去睡zzZ 所有, 如有侵权,请联系我们删除。