常用 Java 静态代码分析工具:
Checkstyle,FindBugs,PMD,Jtest
检查范围:
Checkstyle:
Javadoc 注释:检查类及方法的
Javadoc 注释
命名约定:检查命名是否符合命名规范
标题:检查文件是否以某些行开头
Import 语句:检查 Import 语句是否符合定义规范
代码块大小,即检查类、方法等代码块的行数
空白:检查空白符,如 tab,回车符等
修饰符:修饰符号的检查,如修饰符的定义顺序
块:检查是否有空块或无效块
代码问题:检查重复代码,条件判断,魔数等问题
类
设计:检查类的定义是否符合规范,如构造函数的定义等问题
FindBugs:
Bad practice 坏的实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配
Correctness 可能导致错误的代码,如空指针引用等
国际化相关问题:如错误的字符串转换
可能受到的恶意攻击,如访问权限修饰符的定义等
多线程的正确性:如多线程编程时常见的同步,线程调度
问题。
运行时性能问题:如由变量定义,方法调用导致的代码低效问题。
PMD:
可能的 Bugs:检查潜在代码错误,如空 try/catch/finally/switch 语句
未使用代码(Dead code):检查未使用的变量,参数,方法
复杂的表达式:检查不必要的 if 语句,可被 while 替代的 for 循环
重复的代码:检查重复的代码
循环体创建新对象:检查在循环体内实例化新对象
资源关闭:检查 Connect,Result,Statement 等资源使用之后是否被关闭掉
Jtest
可能的错误:如内存破坏、内存泄露、指针错误、库错误、逻辑错误和算法错误等
未使用代码:检查未使用的变量,参数,方法
初始化错误:内存分配错误、变量初始化错误、变量定义冲突
命名约定:检查命名是否符合命名规范
Javadoc 注释:检查类及方法的 Javadoc 注释
线程和同步:检验多线程编程时常见的同步,线程调度问题
国际化问题:
垃圾回收:检查变量及 JDBC 资源是否存在内存泄露隐患