静态分析工具PMD使用说明
中科软科技股份有限公司
2008年12月
目 录
目 录 2
1 前言 2
1.1编写目的 2
1.2修订历史 3
2 PMD简介 3
3 PMD的安装与运行 4
3.1安装并从命令行运行PMD 4
3.2 Eclipse中PMD插件的安装及使用 5
3.3 使用Ant进行PMD调用 7
4 关于PMD规则 8
4.1 PMD缺省规则 8
4.2 PMD推荐规则 10
4.3 PMD规则自定义 10
4.4 注意事项 11
5 PMD规则编写 11
5.1前提条件 11
5.2 PMD实现原理 12
5.3 PMD实现过程 12
5.4 JAVA代码编写规则 12
5.5 XPath语言编写规则 12
6 XPATH基础 13
6.1 XPATH作用 13
6.2 XPATH数据类型 13
6.3 XML文档结构 14
6.4 XPATH中节点匹配 15
7 参考资料 16
8 附件 17
附一 中科软推荐规则集 17
附二 PMD规则集详细说明 17
1 前言
1.1编写目的
质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤其是企业应用软件系统来说,除了软件运行质量、文档质量以外,代码的质量也是非常重要的。软件开发进行到编码阶段的时候,最大的风险就在于如何保证代码的易读性和一致性,从而使得软件的维护的代价不会很高。
在软件开发的过程中,以下几种情形随处可见:
● 软件维护时间长,而且维护人员的积极性不高
● 新的开发人员融入团队的时间比较长
提高代码的质量,除了要提高逻辑上的控制以及业务流程的理解外,代码本身也存在提高的空间,例如一些潜在的问题可以很早的就避免。类似于编码规范上的内容,如果全靠编码人员进行自行检查,那么无疑需要很大的工作量,如果可以使用代码的静态检查工具进行检查的话,那么将大大的提高编码的效率。
项目组目前代码检查的工作基本上都是通过人工的方式,实行起来比较困难,检查的效果也不是很明显。PMD正是这样一种工具,可以直接使用它自带的规则(当然也可以使用自己的规则)对Java源程序进行分析出程序存在的问题,可以很大程度上的减轻代码检查工作的繁琐,为项目组今后的维护和开发工作起到指导的作用。
本文主要介绍了如何使用pmd工具进行代码的自动化检查,以规避一些潜在的问题并出代码的逻辑错误。
1.2修订历史
修订章节 | 类型 | 日期 | 作者 | 说明 |
全部 | 创建 | 2008/12/ | 刘吉才 | PMD使用文档 |
2 PMD简介
PMD是一种分析Java代码错误的开源工具。与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以出Java源程序的许多问题,例如:
● 潜在的bug:确保资源(像连接、声明和记录集) 在使用后总是关闭
● 未使用的代码:未使用的局部变量、参数、私有方法等
● 可选的代码:String/StringBuffer的滥用
● 复杂的表达式:不必须的if语句,可用while循环完成的for循环
● 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs
● 不优化的代码:避免在循环语句中初始化新对象(new变量)
此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求PMD出所有创建Thread和Socket对象的操作。
3 PMD的安装与运行
3.1安装并从命令行运行PMD
你可以从PMD的网站下载PMD的二进制版本,或下载带源代码的版本,下载得到的都是ZIP文件。假设你下载了二进制版本,先把它解压缩到任意一个目录。接下来怎么做,就要看你准备怎么用它——最简单的,如果要在一个Java源代码目录中运行PMD,只需直接在命令行上运行下面的命令:
E:\SoftWare\pmd-bin-4.2.1\pmd-4.2.1\bin>java -jar ..\lib\pmd-4.2.1.jar D:\ebsser vice\ebsservice\src text l |
输出结果类如下:
D:\ebsservice\ebsservice\src\com\sinosoft\service\policy\ebs\SMPolicyInput.java: 51 Avoid unused private fields such as 'logger'. D:\ebsservice\ebsservice\src\com\sinosoft\service\policy\ebs\SMPolicyShow.java:2 5 Avoid unused private fields such as 'logger'. D:\ebsservice\ebsservice\src\com\sinosoft\service\policy\ebs\SMQueryPolicyByPoli cyNo.java:32 Avoid unused local variables such as 'visaStatus'. D:\ebsservice\ebsservice\src\com\sinosoft\service\policy\ebs\SMQueryPolicyByPoli cyNo.java:44 Avoid unused local variables such as 'temp'. D:\ebsservice\ebsservice\src\com\sinosoft\service\policy\ebs\erisk\ESMPolicyInpu t.java:28 Avoid unused private fields such as 'logger'. D:\ebsservice\ebsservice\src\com\sinosoft\service\policy\ebs\jrisk\JSMPolicyInpu t.java:22 Avoid unused private fields such as 'logger' |
一些可以加载必须参数前面或者后面的可选参数如下:
-debug: 打印debug日志信息
-targetjdk: 指定目标源代码的版本- 1.3, 1.4, 1.5, 1.6 or 1.7;默认是1.5
-cpus: 指定创建的线程数
-encoding: 指定PMD检查的代码的编码方式
-excludemarker: 指定PMD需要忽略的行的标记,默认为NOPMD
-shortnames: 在报告中显示缩短的文件名
-linkprefix: HTML源文件的路径,只是为了HTML显示
-lineprefix: 自定义的锚,用于影响源文件中的行,只是用于HTML显示
-minimumpriority: 规则的优先级限制,低于优先级的规则将不被使用
-nojava: 不检查java文件,默认是检查java文件
-jsp: 检查JSP/JSF文件,默认不检查
-reportfile: 将报告输出到文件,默认是打印在控制台
-benchmark: 输出一个基准清单,默认输出到控制台
-xslt: 覆盖默认的xslt
-auxclasspath: 指定源代码文件使用的类路径
例如在windows系统中,例子如下:
c:\> java -jar pmd-4.2.1.jar c:\my\source\code text unusedcode,imports -targetjd k 1.5 -debug c:\> java -jar pmd-4.2.1.jar c:\my\source\code xml basic,design -encoding UTF-8 java修改html文件c:\> java -jar pmd-4.2.1.jar c:\my\source\code html typeresolution -auxclasspath commons-collections.jar;derby.jar |
3.2 Eclipse中PMD插件的安装及使用
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论