代码审查工具之PMD操作指南

        上周客户要求对OA系统的代码质量进行了一个整体审查,并且要出一份报告给领导。

        为此花了半天时间把代码审查工具PMD琢磨了下,现将具体操作步骤描述如下,以供大家参考!

1 前言

        质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤其是企业应用软件系统来说,除了软件运行质量、文档质量以外,代码的质量也是非常重要的。软件开发进行到编码阶段的时候,最大的风险就在于如何保证代码的易读性和一致性,从而使得软件的维护的代价不会很高。

2 PMD简介

  PMD是一种分析Java代码错误的开源工具。与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题,例如:

  • 潜在的bug:确保资源(像连接、声明和记录集) 在使用后总是关闭
  • 未使用的代码:未使用的局部变量、参数、私有方法等
  • 可选的代码:String/StringBuffer的滥用
  • 复杂的表达式:不必须的if语句,可用while循环完成的for循环
  • 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs
  • 不优化的代码:避免在循环语句中初始化新对象(new变量)

此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求PMD找出所有创建Thread和Socket对象的操作。

3 环境准备

   1、首先需要下载ant-1.8.2及pmd-bin-4.2.1两个资源;

     2、ant环境变量配置:

4 修改build.xml文件

       目录:[../pmd-bin-4.2.1/pmd-4.2.1]

        其中运行完生成的(E:\Tool\PMD\imis_oa.html)文件便是审查结果报告!

5 替换favorites.xml文件内容

  目录:[../pmd-bin-4.2.1/pmd-4.2.1/rulesets]

 1 <?xml version="1.0"?>
 2 
 3 <ruleset name="Favorites"
 4     xmlns="http://pmd.sf.net/ruleset/1.0.0"
 5     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 6     xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
 7     xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
 8 
 9   <description>
10 The Favorites ruleset contains links to rules that I like to use.  Usually I
11 combine this ruleset with the unusedcode.xml, basic.xml, and import.xml rulesets for my projects.
12 This ruleset also serves as an example of how to do a custom ruleset.
13   </description>
14 <rule ref="rulesets/basic.xml"/>
15   <rule ref="rulesets/unusedcode.xml"/>
16 <rule ref="rulesets/braces.xml/IfStmtsMustUseBraces"/>
17 <rule ref="rulesets/braces.xml/WhileLoopsMustUseBraces"/>
18 <rule ref="rulesets/braces.xml/IfElseStmtsMustUseBraces"/>
19 <rule ref="rulesets/braces.xml/ForLoopsMustUseBraces"/>
20 <rule ref="rulesets/design.xml/CloseResource"/>
21 <rule ref="rulesets/design.xml/NonStaticInitializer"/>
22 <rule ref="rulesets/design.xml/NonCaseLabelInSwitchStatement"/>
23 <rule ref="rulesets/design.xml/OptimizableToArrayCall"/>
24 <rule ref="rulesets/design.xml/EqualsNull"/>
25 <rule ref="rulesets/design.xml/AbstractClassWithoutAbstractMethod"/>
26 <rule ref="rulesets/design.xml/UnnecessaryLocalBeforeReturn"/>
27 <rule ref="rulesets/design.xml/UncommentedEmptyMethod"/>
28 <rule ref="rulesets/design.xml/UseCollectionIsEmpty"/>
29 <rule ref="rulesets/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal"/>
30 <rule ref="rulesets/design.xml/EmptyMethodInAbstractClassShouldBeAbstract"/>
31 <rule ref="rulesets/design.xml/ReturnEmptyArrayRatherThanNull"/>
32 <rule ref="rulesets/design.xml/AbstractClassWithoutAnyMethod"/>
33 <rule ref="rulesets/basic.xml/EmptyCatchBlock"/>
34 <rule ref="rulesets/basic.xml/EmptyIfStmt"/>
35 <rule ref="rulesets/basic.xml/EmptyWhileStmt"/>
36 <rule ref="rulesets/basic.xml/EmptyTryBlock"/>
37 <rule ref="rulesets/basic.xml/EmptyFinallyBlock"/>
38 <rule ref="rulesets/basic.xml/EmptySwitchStatements"/>
39 <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"/>
40 <rule ref="rulesets/basic.xml/BooleanInstantiation"/>
41 <rule ref="rulesets/basic.xml/UnnecessaryFinalModifier"/>
42 <rule ref="rulesets/strings.xml/StringToString"/>
43 <rule ref="rulesets/strings.xml/StringInstantiation"/>
44 <rule ref="rulesets/controversial.xml/UnnecessaryConstructor"/>
45 <rule ref="rulesets/controversial.xml/NullAssignment"/>
46 <rule ref="rulesets/controversial.xml/UnusedModifier"/>
47 
48 
49 </ruleset>
View Code

经本人多次尝试不替换会报以下错误:

6 运行[执行检查.bat]程序

   若以上步骤都成功完成,你想要的代码审查报告也已生成!呈现形式如下:

 

posted @ 2013-10-24 22:17  跳动的音符^Web  阅读(1020)  评论(0编辑  收藏  举报