Java静态代码分析工具对比
来源:互联网 发布:少年派的奇幻漂流知乎 编辑:程序博客网 时间:2024/05/18 14:24
【背景】
静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
【收益】
1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。
2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。
3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。
【主要技术总结】
1. 缺陷模式匹配: 工具富集大量缺陷模式,通过将代码与缺陷模式进行匹配。要求富集大量共性缺陷模式,往往误报的情况比较多。
2. 类型推断:类型推断技术是指通过对代码中的运算对象类型进行推理,从而保证每条语句都针对正确的类型去计算。这种技术需要提前定义一套类型机制,包括类型等价、类型包含等推理关系,而后基于这些规则进行计算。此种技术可以检验代码中的类型错误。
3. 模型检查:模型检验是指将代码中每条语句产生的影响抽象成一个有限状态自动机的一个状态,而后通过分析有限状态机从而打到分析代码的目的。模型检验主要是用于检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。
4. 数据流分析:通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、传递以及引用等情况。
【常用的静态代码扫描工具分类】
- Javadoc 注释:检查类及方法的 Javadoc 注释
- 命名约定:检查命名是否符合命名规范
- 标题:检查文件是否以某些行开头
- Import 语句:检查 Import 语句是否符合定义规范
- 代码块大小,即检查类、方法等代码块的行数
- 空白:检查空白符,如 tab,回车符等
- 修饰符:修饰符号的检查,如修饰符的定义顺序
- 块:检查是否有空块或无效块
- 代码问题:检查重复代码,条件判断,模数等问题
- 类设计:检查类的定义是否符合规范,如构造函数的定义等问题
- Bad practice 坏的实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配
- Correctness 可能导致错误的代码,如空指针引用等
- 国际化相关问题:如错误的字符串转换
- 可能受到的恶意攻击,如访问权限修饰符的定义等
- 多线程的正确性:如多线程编程时常见的同步,线程调度问题。
- 运行时性能问题:如由于变量定义,方法调用导致的代码低效问题。
- 可能的 Bugs:检查潜在代码错误,如空 try/catch/finally/switch 语句
- 未使用代码(Dead code):检查未使用的变量,参数,方法
- 复杂的表达式:检查不必要的 if 语句,可被 while 替代的 for 循环
- 重复的代码:检查重复的代码
- 循环体创建新对象:检查在循环体内实例化新对象
- 资源关闭:检查 Connect,Result,Statement 等资源使用之后是否被关闭掉
- 可能的错误:如内存破坏、内存泄露、指针错误、库错误、逻辑错误和算法错误等
- 未使用代码:检查未使用的变量,参数,方法
- 初始化错误:内存分配错误、变量初始化错误、变量定义冲突
- 命名约定:检查命名是否符合命名规范
- Javadoc 注释:检查类及方法的 Javadoc 注释
- 线程和同步:检验多线程编程时常见的同步,线程调度问题
- 国际化问题:
- 垃圾回收:检查变量及 JDBC 资源是否存在内存泄露隐患
阅读全文
0 0
- Java静态代码分析工具对比
- JAVA 代码静态分析工具
- Java 静态代码分析工具
- PMD-java代码静态分析工具
- Java静态代码分析工具Infer
- java静态代码分析工具FindBugs
- 静态代码分析工具
- 静态代码分析工具
- 静态代码分析工具
- 静态代码检测工具对比(Java)
- 常用 Java 静态代码分析工具的分析与比较
- 常用 Java 静态代码分析工具的分析与比较
- 常用 Java 静态代码分析工具的分析与比较
- 常用 Java 静态代码分析工具的分析与比较
- 常用 Java 静态代码分析工具的分析与比较
- 常用 Java 静态代码分析工具的分析与比较
- 常用 Java 静态代码分析工具的分析与比较
- 常用 Java 静态代码分析工具的分析与比较
- 洛谷 P1712 区间
- Linux下搭建svn版本控制软件
- C和指针第六章笔记
- 先码后看 接前一篇jdk各版本变化详解 侵立删
- 基础学习(一)
- Java静态代码分析工具对比
- Python的几个内建函数
- Struts2 Part1
- Error creating bean with name 'entityManagerFactory' defined in class path resource
- 愿你走出半生,归来仍是少年
- C++ 命令行模式
- IO-3、文件分配块的三种方式
- KMP算法
- UVA 10285 Longest Run on a Snowboard(记忆化搜索|动态规划入门)