上周客户要求对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]

 <?xml version="1.0"?>

 <ruleset name="Favorites"
xmlns="http://pmd.sf.net/ruleset/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"> <description>
The Favorites ruleset contains links to rules that I like to use. Usually I
combine this ruleset with the unusedcode.xml, basic.xml, and import.xml rulesets for my projects.
This ruleset also serves as an example of how to do a custom ruleset.
</description>
<rule ref="rulesets/basic.xml"/>
<rule ref="rulesets/unusedcode.xml"/>
<rule ref="rulesets/braces.xml/IfStmtsMustUseBraces"/>
<rule ref="rulesets/braces.xml/WhileLoopsMustUseBraces"/>
<rule ref="rulesets/braces.xml/IfElseStmtsMustUseBraces"/>
<rule ref="rulesets/braces.xml/ForLoopsMustUseBraces"/>
<rule ref="rulesets/design.xml/CloseResource"/>
<rule ref="rulesets/design.xml/NonStaticInitializer"/>
<rule ref="rulesets/design.xml/NonCaseLabelInSwitchStatement"/>
<rule ref="rulesets/design.xml/OptimizableToArrayCall"/>
<rule ref="rulesets/design.xml/EqualsNull"/>
<rule ref="rulesets/design.xml/AbstractClassWithoutAbstractMethod"/>
<rule ref="rulesets/design.xml/UnnecessaryLocalBeforeReturn"/>
<rule ref="rulesets/design.xml/UncommentedEmptyMethod"/>
<rule ref="rulesets/design.xml/UseCollectionIsEmpty"/>
<rule ref="rulesets/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal"/>
<rule ref="rulesets/design.xml/EmptyMethodInAbstractClassShouldBeAbstract"/>
<rule ref="rulesets/design.xml/ReturnEmptyArrayRatherThanNull"/>
<rule ref="rulesets/design.xml/AbstractClassWithoutAnyMethod"/>
<rule ref="rulesets/basic.xml/EmptyCatchBlock"/>
<rule ref="rulesets/basic.xml/EmptyIfStmt"/>
<rule ref="rulesets/basic.xml/EmptyWhileStmt"/>
<rule ref="rulesets/basic.xml/EmptyTryBlock"/>
<rule ref="rulesets/basic.xml/EmptyFinallyBlock"/>
<rule ref="rulesets/basic.xml/EmptySwitchStatements"/>
<rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"/>
<rule ref="rulesets/basic.xml/BooleanInstantiation"/>
<rule ref="rulesets/basic.xml/UnnecessaryFinalModifier"/>
<rule ref="rulesets/strings.xml/StringToString"/>
<rule ref="rulesets/strings.xml/StringInstantiation"/>
<rule ref="rulesets/controversial.xml/UnnecessaryConstructor"/>
<rule ref="rulesets/controversial.xml/NullAssignment"/>
<rule ref="rulesets/controversial.xml/UnusedModifier"/> </ruleset>

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

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

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

代码审查工具之PMD操作指南的更多相关文章

  1. 静态代码审查工具FxCop插件开发(c#)

    FxCop是一款微软官方提供的.net平台代码审查工具,目的是检查我们编写的程序集的代码是否符合规范.FxCop默认提供的是微软默认的审查规则,而且该规则符合<Framework DesignG ...

  2. [转载] Jupiter代码审查工具使用参考

    转载自http://blog.csdn.net/jemlee2002/article/details/5715355 一.       Jupiter 是什么? 这里的 Jupiter 是一个开源的代 ...

  3. 代码审查工具Sonarqube安装

    前言:在项目开发当中,完成需求并上线是一件很开心的事情,但为了能按时上线功能不得不为了完成功能而写代码,写的时候觉得先把功能上了以后再回头优化此处代码,但真正上线之后你就会发现你再也不想去修改之前遗留 ...

  4. Jupiter Code Review Reference -- Jupiter代码审查工具使用参考

    Jupiter Code Review Reference -- Jupiter代码审查工具使用参考 (修改版) 原创 2010年07月06日 10:43:00 标签: 审查 / reference  ...

  5. Phabricator是什么,代码审查工具

    Phabricator是什么? Phabricator支持两种代码审查工作流:"review"(提交前审查)和 "audit"(提交后审查). Phabrica ...

  6. 代码审查工具StyleCop

    “代码审查”或是“代码评审”(Code Review),这是一个流程,当开发人员写好代码后,需要让别人来review一下他的代码,这是一种有效发现BUG的方法.由此,我们可以审查代码的风格.逻辑.思路 ...

  7. Review Board——在线代码审查工具

    代码审查(Code Review)不但可以提高质量,而且还是一个知识共享和指导的极好的手段.不幸的是,准备工作的辛苦和工具支持的缺乏让代码审查很容易被延至“稍后再议”.Review Board的目标便 ...

  8. 白盒静态自动化测试工具:PMD使用指南

    参考文献:http://www.oschina.net/p/pmd/http://www.cnblogs.com/flyme/archive/2011/09/09/2172548.htmlhttp:/ ...

  9. docker运行gerrit(代码审查工具)

    gerrit是什么? Gerrit,一种免费.开放源代码的代码审查软件,使用网页界面. gerrit背景 Gerrit,一种免费.开放源代码的代码审查软件,使用网页界面.利用网页浏览器,同一个团队的软 ...

随机推荐

  1. Iterator<Entry<String,String>> iter=map.entrySet().iterator(); 是什么意思

    //获得map的迭代器,用作遍历map中的每一个键值对Iterator是迭代器,map之前应该定义过,姑且认为是HashMap.<Entry<String,String>>表示 ...

  2. Axiom3D学习日记 2.介绍SceneManager,SceneNode,Entity

    SceneManager(场景管理类) 所有出现在屏幕里的东西都受SceneManager管理(最好是这样),当你放置对象在场景里,SceneManager就会跟踪他们的位置,当你为场景创建一个相机, ...

  3. Intellij Idea 13 vmoptions (Mac版本)

    -ea -server -Xms1g -Xmx1g -Xss16m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DoEscapeAnalysis -XX:+ ...

  4. PHP代码批量加密

    <?php error_reporting(E_ALL); ini_set('display_errors','1'); //批量加密码当前目录 $dirnow = getcwd(); $dir ...

  5. NSCondition的用法,NSCondication实现线程同步,生产者消费问题实现(转载)

    NSCondition的用法 使用NSCondition,实现多线程的同步,即,可实现生产者消费者问题. 基本思路是,首先要创建公用的NSCondition实例.然后: 消费者取得锁,取产品,如果没有 ...

  6. Linux通配符

    * 任意字符 ?任意单个字符 [] 匹配指定 字符范围内的字符 [^] 指定范围之外的单个字符 常规字符集合 [a-z] a到z的所有小写字母 [A-Z] a到z的所有大写字母 [0-9] 0到9的所 ...

  7. POJ 1734.Sightseeing trip (Floyd 最小环)

    Floyd 最小环模板题 code /* floyd最小环,记录路径,时间复杂度O(n^3) 不能处理负环 */ #include <iostream> #include <cstr ...

  8. hold

    嘿嘿,很久没写博客了.一懒一拖一浮躁就不行了. 果然烦心事太多,一直懒得编程.结果还是编程才能平复我啊! 明天那什么,别担心,平常心嘛! 还好,看了几部电影,不算没收获.自己有意思就看看电影,别瞎想啥 ...

  9. javascript 函数声明问题

    (function(){ //运行正常 test1(); function test1() { console.log('123'); }; })() (function(){ //出错,test2未 ...

  10. c# winform 设置winform进入窗口后在文本框里的默认焦点

    c# winform 设置winform进入窗口后在文本框里的默认焦点 进入窗口后默认聚焦到某个文本框,两种方法: ①设置tabindex 把该文本框属性里的tabIndex设为0,焦点就默认在这个文 ...