静态分析工具pmd使用说明

上传人:子 文档编号:41837117 上传时间:2018-05-31 格式:DOC 页数:15 大小:41.50KB
返回 下载 相关 举报
静态分析工具pmd使用说明_第1页
第1页 / 共15页
静态分析工具pmd使用说明_第2页
第2页 / 共15页
静态分析工具pmd使用说明_第3页
第3页 / 共15页
静态分析工具pmd使用说明_第4页
第4页 / 共15页
静态分析工具pmd使用说明_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《静态分析工具pmd使用说明》由会员分享,可在线阅读,更多相关《静态分析工具pmd使用说明(15页珍藏版)》请在金锄头文库上搜索。

1、静态分析工具静态分析工具 PMDPMD 使用说明使用说明静态分析工具 PMD 使用说明目录静态分析工具 PMD 使用说明. 1目录. 21. 编写目的. 32. PMD 简介. 43. PMD 的安装和运行. 43.1 安装并从命令行运行 PMD. 43.2 在 Eclipse 中安装 PMD 插件运行方式. 63.3 使用 Ant 进行调用. 84. 关于 PMD 规则. 105. 编写自定义的 PMD 规则. 156. 结束语. 187. 参考资料. 181. 编写目的 质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤其是企业应用软件系统来说,除了软件运行质量、文档质量以外,代

2、码的质量也是非常重要的。软件开发进行到编码阶段的时候,最大的风险就在于如何保证代码的易读性和一致性,从而使得软件的维护的代价不会很高。在软件开发的过程中,以下几种情形随处可见: 1) 软件维护时间长,而且维护人员的积极性不高: 做过软件维护的开发人员,尤其是在接手不是自己开发产品的源码的时候,即使有良好的文档说明,仍然会对代码中冗长、没有注释的段落“叹为观止” 。理解尚且如此困难,何况要修改或者增加新的功能。因此,很多开发人员不愿意进行软件维护的工作。 2)新的开发人员融入团队的时间比较长: 除了没有良好的培训、文档等有效的机制以外,每个人一套的编码风格,也容易造成新成员对于已有代码的理解不够

3、,甚至出现偏差。提高代码的质量,除了要提高逻辑上的控制以及业务流程的理解外,代码本身也存在提高的空间,例如一些潜在的问题可以很早的就避免。类似于编码规范上的内容,如果全靠编码人员进行自行检查,那么无疑需要很大的工作量,如果可以使用代码的静态检查工具进行检查的话,那么将大大的提高编码的效率。项目组目前代码检查的工作基本上都是通过人工的方式,实行起来比较困难,检查的效果也不是很明显。PMD 正是这样一种工具,可以直接使用它自带的规则(当然也可以使用自己的规则)对 Java 源程序进行分析找出程序存在的问题,可以很大程度上的减轻代码检查工作的繁琐,为项目组今后的维护和开发工作起到指导的作用。本文主要

4、介绍了如何使用 pmd 工具进行代码的自动化检查,以规避一些潜在的问题并找出代码的逻辑错误。2. PMD 简介 PMD 是一种开源分析 Java 代码错误的工具。与其他分析工具不同的是,PMD 通过静态分析获知代码错误。也就是说,在不运行 Java 程序的情况下报告错误。PMD 附带了许多可以直接使用的规则,利用这些规则可以找出 Java 源程序的许多问题,例如:? 潜在的 bug:空的 try/catch/finally/switch 语句? 未使用的代码:未使用的局部变量、参数、私有方法等? 可选的代码:String/StringBuffer 的滥用? 复杂的表达式:不必须的 if 语句、

5、可以使用 while 循环完成的for 循环? 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴 bugs? 循环体创建新对象:尽量不要再 for 或 while 循环体内实例化一个新对象 资源关闭:Connect,Result,Statement 等使用之后确保关闭掉此外,用户还可以自己定义规则,检查 Java 代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求 PMD 找出所有创建Thread 和 Socket 对象的操作。3. 工作原理 PMD 的核心是 JavaCC 解析器生成器。PMD 结合运用 JavaCC 和EBNF(扩展巴科斯-诺尔范式,Extended Backus-N

6、aur Formal)语法,再加上 JJTree,把 Java 源代码解析成抽象语法树(AST,Abstract Syntax Tree) 。显然,这句话不那么好懂,且看下文具体说明。 从根本上看,Java 源代码只是一些普通的文本。不过,为了让解析器承认这些普通的文本是合法的 Java 代码,它们必须符合某种特定的结构要求。这种结构可以用一种称为 EBNF 的句法元语言表示,通常称为“语法” (Grammar) 。JavaCC 根据语法要求生成解析器,这个解析器就可以用于解析用 Java 编程语言编写的程序。 不过实际运行中的 PMD 还要经过 JJTree 的一次转换。JJTree是一个

7、JavaCC 的插件,通过 AST 扩充 JavaCC 生成的解析器。AST是一个 Java 符号流之上的语义层。有了 JJTree,语法分析的结果不再是“System, ., out, ., . println”之类的符号序列,而是一个由对象构成的树型层次结构。例如,下面是一段简单的 Java 代码以及与之对应的 AST。 Java 源代码:public class Foo public void bar() System.out.println(“hello world“);对应的抽象语法树CompilationUnitTypeDeclarationClassDeclarationUnmo

8、difiedClassDeclarationClassBodyClassBodyDeclarationMethodDeclarationResultTypeMethodDeclaratorFormalParametersBlockBlockStatementStatementStatementEXPressionPrimaryExpressionPrimaryPrefixNamePrimarySuffixArgumentsArgumentListExpressionPrimaryExpressionPrimaryPrefixLiteral4. PMD 的安装和运行 4.1 安装并从命令行运行

9、PMD 你可以从 PMD 的网站下载 PMD 的二进制版本,或下载带源代码的版本,下载得到的都是 ZIP 文件。假设你下载了二进制版本,先把它解压缩到任意一个目录。接下来怎么做,就要看你准备怎么用它最简单的,如果要在一个 Java 源代码目录中运行 PMD,只需直接在命令行上运行下面的命令: E:SoftWarepmd-bin-4.2.1pmd-4.2.1binjava -jar .libpmd-4.2.1.jar D:ebsserviceebsservicesrc text rulesets/unusedcode.xml输出结果类如: D:ebsserviceebsservicesrccom

10、sinosoftservicepolicyebsSMPolicyInput.java:51 Avoid unused private fields such as logger.D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMPolicyShow.java:25 Avoid unused private fields such as logger.D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMQueryPolicyByPolicyNo.java:32 Avoid unuse

11、d local variables such as visaStatus.D:ebsserviceebsservicesrccomsinosoftservicepolicyebsSMQueryPolicyByPolicyNo.java:44 Avoid unused local variables such as temp.D:ebsserviceebsservicesrccomsinosoftservicepolicyebseriskESMPolicyInput.java:28 Avoid unused private fields such as logger.D:ebsserviceeb

12、sservicesrccomsinosoftservicepolicyebsjriskJSMPolicyInput.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-sho

13、rtnames: 在报告中显示缩短的文件名-linkprefix: HTML 源文件的路径,只是为了 HTML 显示-lineprefix: 自定义的锚,用于影响源文件中的行,只是用于HTML 显示-minimumpriority: 规则的优先级限制,低于优先级的规则将不被使用-nojava: 不检查 java 文件,默认是检查 java 文件-jsp: 检查 JSP/JSF 文件,默认不检查-reportfile: 将报告输出到文件,默认是打印在控制台-benchmark: 输出一个基准清单,默认输出到控制台-xslt: 覆盖默认的 xslt-auxclasspath: 指定源代码文件使用的

14、类路径例如在 windows 系统中,例子如下:c: java -jar pmd-4.2.1.jar c:mysourcecode text unusedcode,imports -targetjdk 1.5 -debugc: java -jar pmd-4.2.1.jar c:mysourcecode xml basic,design -encoding UTF-8c: java -jar pmd-4.2.1.jar c:mysourcecode html typeresolution -auxclasspathcommons-collections.jar;derby.jar4.2 在 E

15、clipse 中安装 PMD 插件运行方式 PMD 可以作为插件集成到很多流行的 IDE 中,很多的插件中都包含了 PMD 的 jar 文件,这个 jar 文件中包含了规则集。所以虽然一些插件中使用 rulesets/unusedcode.xml 来作为参数引用规则集,但是实际上是使用 getResourceAsStream()方法来从 PMD 的 jar 文件中加载。由于 Eclipse 是比较流行的开源 Java/J2EE 开发 IDE,所以本文主要介绍如何在 Eclipse 中使用 PMD 工具进行代码的检查。4.2.1 安装基于 Eclipse IDE 的插件安装 Eclipse 的 PMD 插件的过程如下:? 启动 Eclipse? 选择 HelpSoftware UpdatesFind and Install? 选择 Next,选择 New remote site? 在 Name 框中输入 PMD,URL 框中输入http:/ 在之后的对话框中一直点击下一步或者接受协议,完成 Eclipse的 PMD 插件的安装也可以通过下载最新的 zip 文件按,然后执行上述过程,只是使用New locale site 来代替 New remote site,并使用下载的 zip 文件。可以通过 WindowsPreferences 来

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号