Java项目最枯燥的一部分也是程序员总是避而不谈的一部分就是检查代码为了区块括号代码缩进Javadoc注释以及命名约定而检查其他人的上千行代码的确是一件痛苦的事更糟糕的是通常代码的检查还受限于紧迫的项目进度没有足够的时间对代码的细节进行评估因此代码检查经常变成了对代码的美化练习不管检查者有多么好的意图优化和逻辑检查都退居次席
Java代码分析器减轻了这样的痛苦
在面对这种情况的时候Java代码分析器正是对症良药这些工具尽可能地将代码检查过程自动化留给人工来做的就只有检查类的缺陷以及核心逻辑并确定可能的优化方法优化(去除不必要的实例化对象检查数据库连接是否合理确保数据在可能的情况下被缓存)对于任何代码通常会带来性能上的极大改进
最近我接触了各种代码分析器我觉得一个基本的最重要的功能是与常用IDE(如NetBeansEclipsejEdit以及JDeveloper)的集成有一些代码检查工具在查找错误方面很有效但是它们需要你根据给出的错误行的行号手工来追蹤错误这样的工具使用起来太累人了与IDE环境集成了的工具可以大大简化这个过程因为代码检查的结果是由所使用的IDE显示的你只需在错误上双击就可以在Java编辑器中到达错误代码所在的行
我的试用心得
在我试用过的工具中我发现其中三个工具十分强大并合乎与IDE集成的标准它们是 PMD Checkstyle 和 Jalopy
PMD和Checkstyle
根据PMD的文档它会对代码中的如下部分进行检查
未使用的本地变量
空的catch块
未使用参数
空if语句
重复的import语句
未使用的私有方法
可能是Singletons的类
短/长变量及方法名字
Checkstyle检查如下部分
Javadoc注释
命名约定
标题
Import语句
体积大小
空白
修饰符
块
混合检查(包活一些有用的比如非必须的Systemout和printstackTrace)
它们的作用
不像PMDCheckstyle能够检查Javadoc注释但是PMD提供了一项叫作CPD的很有用的功能它检查代码的拷贝粘贴部分我使用PMD找到的最频繁的错误是未使用的import语句未使用的私有变量以及意外重复拼写Checkstyle可以发现更多的错误包括漏掉的Javadoc注释超过个字符的行不合约定的变量名用tab来代替空格等等两个工具都允许创建自定义的规则
如果想在你的组织中使用它们中的一个Checkstyle似乎更好一些它检查公司编码约定的大多数项目如果增强代码质量是主要目标那PMD是一个好的选择但是如果你想要更多的功能并真正使用工具来修改代码应该试试Jalopy
Jalopy
Jalopy是一个易于配置的源代码格式程序它能检测并修补Java代码中大量的习惯性缺陷Jalopy更像一个代码整理器而不是检查器Jalopy的插件现在已经支持大多数IDE而且多数是无缝集成我发现Jalopy特别强大能够干许多很酷的事情例如它可以修改代码缩进对齐括号使行宽符合某个字符长度插入相关的Javadoc注释以及对import语句排序Jalopy最好的地方是超级自定义功能一个简单的用户界面就可以让你选择Jalopy的所有功能的开关不需要XML配置文件
不要浪费资源
我建议大家使用这些工具来代替那些费时费力却收效甚微的人工代码检查工作一旦使用这些工具将代码检查变成了一个相对轻松的任务你就可以把代码检查作为一项普通工作而不是在项目结尾被进度逼得一团糟时做的事情这些工具也提供了与Apache Ant的集成因此你可以每天运行这些代码检查器在编译或执行单元测试它们也能工作得很好控制好你的代码并交付那些你真的认为是高质量的东西