PMD 安装
PMD 是一款采用 BSD 开源协议(BSD 开源协议是一个给予使用者很大自由的协议) 发布的 Java 程序代码检查工具,可以检查 Java 代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。打开 Eclipse,在工具栏的 Help 菜单中选择 Install New Software,在 Install 窗口中单击Add 按钮,并在 Location 中输入:
http://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site/
并为其取一个名字进行添加:
![703da11fca4595a3b77d40523b93dac3.png](https://i-blog.csdnimg.cn/blog_migrate/0574d0670850aac76a11352a60c66020.jpeg)
CPD 的使用
CPD 是用来检查重复代码的(例如通过复制粘贴得到的代码),其使用很简单。 以如下代码为例:
public class Number {
public void arrayAdds(int[][] a) {
int sum = 0;
for (int row = 0;row < 100; row++)
for ( int col = 0; col<5;col++)
sum = sum + a[row][col];
for (int row = 0;row < 100; row++)
for ( int col = 0; col<5;col++)
sum = sum + a[row][col];
}
}
右键单击项目工程文件夹,选择 PMD->Find Suspect Cut And Paste 菜单:
![f8a985a4c637d25c152c9ca7de1034cf.png](https://i-blog.csdnimg.cn/blog_migrate/f439df99aaa07e330002e22e15a51f86.jpeg)
然后选择相应的语言和格式,这里选择 Java:
![8a45a7ac4d9ee867dc1b2cf062b0f1a4.png](https://i-blog.csdnimg.cn/blog_migrate/34cb2544e3461bf61bc4d0a96e40f0f7.jpeg)
单击 OK 按钮,在 CPD View 中就可以看到 CPD 的报告了,这里指出了代码重复:
![0a491ba386a43743d5ec70faa7d24f18.png](https://i-blog.csdnimg.cn/blog_migrate/09415b7bcff859fa8f517ec9d72329b3.jpeg)
还可以发现包资源管理器的项目下多了一个目录 reports,打开可以发现以 cpd-开头的文件,这个就是 CPD 检查重复代码后的报告文件,其扩展名取决于上一步指定的报告类型,可以是 txt、XML 和 CSV 三种格式之一。刚才我们默认设置的是 txt 是格式,如下图所示,打开就可以看到具体的代码重复情况,包括出现的行号和具体重复的代码段:
![c3ff59421f07fccd3a83bc14a5a8dd5c.png](https://i-blog.csdnimg.cn/blog_migrate/1512f5dbcaaebebf10b021ccfe9abdd7.jpeg)
PMD 的使用
PMD 是静态代码检查工具,用来检查代码是否规范,它定义了一组检查规则。查 看 PMD 自 带 的 一 组 代 码 规 则 , 选 择 菜 单 Window->Preferences->PMD->Rules Configuration 即可。
在这里可以自定义规则或对已有规则进行添加、删除和修改,也可以导入已经做好的规则文件。团队的代码开发可以利用导入和导出功能,实现统一的代码规范,方便代码检查、优化和管理。
PMD 附带了许多可以直接使用的规则:
潜在的 bug:空的 try/catch/finally/switch 语句
未使用的代码:未使用的局部变量、参数、私有方法等
可选的代码:String/StringBuffer 的滥用
复杂的表达式:不必须的 if 语句、可以使用 while 循环完成的 for 循环
重复的代码:拷贝/粘贴代码意味着拷贝/粘贴 bugs
循环体创建新对象:尽量不要再 for 或 while 循环体内实例化一个新对象
资源关闭:Connect,Result,Statement 等使用之后确保关闭掉
此外,还可以自定义规则,检查 Java 代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求 PMD 找出所有创建 Thread 和 Socket 对象的操作。也可以根据实际情况更改自带规则的检查内容。
选择一个规则,可查看规则的细节。
在项目上单击右键,选择菜单 PMD->Check Code,即可执行 PMD 检查菜单:
![0be0304e02e14e2c127ae7aae6968bf5.png](https://i-blog.csdnimg.cn/blog_migrate/693cea710a79ac113fa0f6eaa377a284.jpeg)
按照设置好的规则,PMD 检查相应的可能缺陷。在 Violations Outline 里还会对千代码行和每个方法中的缺陷率进行统计:
![d8b676e70f786b4a117eccb1459c46fa.png](https://i-blog.csdnimg.cn/blog_migrate/28a2478a6a054ee7e61f7ad25ac91d7c.jpeg)
在项目上右击,选择 PMD->Generate reports 即可生成 PMD 报告:
![b0eed0888565d8bb91fa8447a7da6931.png](https://i-blog.csdnimg.cn/blog_migrate/4f173dc9a2c3203ca4f9b049cc8eedaf.jpeg)
![a844c1ffbef274e493b1e27e32957dc2.png](https://i-blog.csdnimg.cn/blog_migrate/c6f7885d8c89c90e43b3fbd42c148f53.jpeg)
在包资源管理器的 reports 文件夹中可以生成各种形式的报告,通过 PMD 检查结果发现找到了这段代码中的许多问题,如类名首字母没有大写、有太短的变量、操作数在判定表达式里赋值、catch 代码段为空等。