【背景】
静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
【收益】
1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。
2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。
3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。
【主要技术总结】
1. 缺陷模式匹配: 工具富集大量缺陷模式,通过将代码与缺陷模式进行匹配。要求富集大量共性缺陷模式,往往误报的情况比较多。
2. 类型推断:类型推断技术是指通过对代码中的运算对象类型进行推理,从而保证每条语句都针对正确的类型去计算。这种技术需要提前定义一套类型机制,包括类型等价、类型包含等推理关系,而后基于这些规则进行计算。此种技术可以检验代码中的类型错误。
3. 模型检查:模型检验是指将代码中每条语句产生的影响抽象成一个有限状态自动机的一个状态,而后通过分析有限状态机从而打到分析代码的目的。模型检验主要是用于检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。
4. 数据流分析:通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、传递以及引用等情况。
【常用的静态代码扫描工具分类】
Java静态分析工具 | 分析对象 | 应用技术 | 原理描述 | 内置编码规范 |
---|---|---|---|---|
CheckStyle | Java源代码 | 缺陷模式匹配 | 是 SourceForge 的开源项目,通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查 |
|
FindBugs | 字节码 | 缺陷模式匹配;数据流分析 | FindBugs 通过检查类文件或 JAR 文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。 |
|
PMD | Java源代码 | 缺陷模式匹配 | PMD 通过其内置的编码规则对 Java 代码进行静态检查,主要包括对潜在的 bug,未使用的代码,重复的代码,循环体创建新对象等问题的检验。 |
|
Jtest | Java源代码 | 缺陷模式匹配;数据流分析 | Jtest 的静态代码分析功能能够按照其内置的超过 800 条的 Java 编码规范自动检查并纠正这些隐蔽且难以修复的编码错误。 |
|