`

使用PMD检查代码

 
阅读更多

以前不知道PMD,最近听说了PC Lint,才开始接触PMD,这么好的工具,如果善用了,真是可以帮助提高很多,对自己的代码习惯、规范等都有很大的帮助~

来看看他到底是怎么样的》。。。

    很多公司都在用的PC Lint是针对C/c++的一个静态代码审查工具,据说Microsoft把PC Lint审查无错误无警告作为代码要过的第一关;而PMD是个跟他功能类似的针对java的工具,PMD是开源的,可以下载到整个开源项目,其官网上有对其这样的简介(PMD):

简介

PMD scans Java source code and looks for potential problems like:

  • Possible bugs - empty try/catch/finally/switch statements
  • Dead code - unused local variables, parameters and private methods
  • Suboptimal code - wasteful String/StringBuffer usage
  • Overcomplicated expressions - unnecessary if statements, for loops that could be while loops
  • Duplicate code - copied/pasted code means copied/pasted bugs

译:

PMD扫描java代码并寻找潜在的如下问题:

     1.可能的bug - 空try/catch/finally/switch语句

     2.无效代码 -未使用的变量,参数和私有方法

     3.非最佳的代码 - 较耗费资源的String/StringBuffer用法

     4.过于复杂的表达式 - 不必要的if语句,或应该为while的for循环

     5.重复代码 - 复制/粘贴代码意味着复制/粘贴bug

下载

这里可以下载最新版本的PMD(pmd-4.2.5),里面有源代码和bin zip,下载bin的压缩包就可以了,如下图:

to_downlod_pmd_2_1

我下载的时候,速度超慢,10KB/s的跳~

使用

下载下来之后,随便解压到任意目录,然后根据自己的目录修改下面的这个脚本(.bat),放置到解压出来的目录的bin文件夹下即可;

@echo off

rem 要检查的文件和路径,也可以是代码目录
set filepath=E:\SRC\ComposeMessageActivity.java
rem 报告输出的路径
set reportpath=E:\

rem 获取当前年月日和时分秒
set nowTime=%DATE:~0,10%" "%TIME:~1,7%

rem 替换:为-
set nowTime=%nowtime::=-%

rem 合成报告文件路径名
set outfile=%reportpath%%nowtime%.html

rem 指定输出的格式
set xslt="../etc/xslt/corley-pmd-report.xslt"

rem 指定检查规则,这里包括了官方推出的java的所有规则,也可以自己指定其他规则
set ruleset="rulesets/internal/all-java.xml"

rem 执行检查并输出报告
pmd %filepath% nicehtml %ruleset% -xslt %xslt% -reportfile %outfile%

 

 

运行这个脚本文件就可以得到报告文件如下: 

Summary

Files Total QRank Level 1 QRank Level 2 QRank Level 3 QRank Level 4 QRank Level 5 QRank Level 6 QRank Level 7 QRank Level 8
1 18
0
0
18
0
0
0
0
0

E:\SRC\ConfirmRateLimitActivity

Prio Begin Line Method Description Total number of violations for this class: 18 (Click anywhere on this row to see/hide details)
 
3
42   Found non-transient, non-static member. Please mark as transient or provide accessors.
3
43   Found non-transient, non-static member. Please mark as transient or provide accessors.
3
44   Found non-transient, non-static member. Please mark as transient or provide accessors.
3
44   To be compliant to J2EE, a webapp should not use any thread.
3
47 onCreate Avoid excessively long variable names like savedInstanceState
3
47 onCreate Parameter 'savedInstanceState' is not assigned and could be declared final
3
55 onClick Avoid variables with short names like v
3
55 onClick Parameter 'v' is not assigned and could be declared final
3
62 onClick Avoid variables with short names like v
3
62 onClick Parameter 'v' is not assigned and could be declared final
3
68 onCreate To be compliant to J2EE, a webapp should not use any thread.
3
71 run Log.v calls should be protected by checking Config.LOGV first
3
84 onResume Local variable 'delay' could be declared final
3
99 onPause super should be called at the end of the method
3
105 onKeyDown Parameter 'event' is not assigned and could be declared final
3
105 onKeyDown Parameter 'keyCode' is not assigned and could be declared final
3
113 doAnswer Parameter 'answer' is not assigned and could be declared final
3
114 doAnswer Local variable 'intent' could be declared final


Generated by PMD 4.2.5 on 2011-09-09 - 14:49:43.

 

(1).生成的报告界面十分友好,每个类存在什么级别的多少个问题,一目了然。

(2).存在的每个问题,如何修改的建议也一一指出,比如

line: 84
方法: onResume
建议:Local variable 'delay' could be declared final
意思是说,这个函数里的变量delay最好加上final关键字~

     接下来便是按照提示一个个更改了,相信修改之后代码可以让自己慢慢欣赏了,因为里面检查的大多数规则,都是有着丰富经验的JAVA程序员提供的AST(抽象语义树,不用明白它具体什么意思,可以当做一条检查规则),它从程序容易出现的问题,和不规范的设计等等方面进行了检查。

    重要的是长期坚持,这样好的编程习惯应该会不自觉的形成,说实话,PMD真的很严格,苛刻,所以PMD和PC LInt这类工具不少公司在真正使用时都会对规则进行过滤,要不然搞出来的错误实在是太多了~~~

分享到:
评论

相关推荐

    代码分析工具使用PMD

    2. **使用PMD检查代码**:在Eclipse中,右键点击项目,选择`PMD->Check Code With PMD`,PMD会扫描项目并显示检查结果。在PMD视图中,可以按照错误等级过滤信息,例如错误、警告等。在`Package Explorer`和代码文件...

    pmd代码检查工具使用

    PMD 代码检查工具使用指南 PMD 是一个静态代码分析工具,主要用于检查 Java 代码的质量和可读性。下面是 PMD 的使用指南,包括安装、运行、规则配置和自定义规则等方面的内容。 安装和运行 PMD 可以通过命令行或...

    静态代码检查插件之pmd

    2. **代码规范检查**:PMD遵循一些常见的编程规范,如Sun编码规范,它能检查代码是否符合这些规范,例如命名约定、避免使用魔法数字、避免冗余的代码等。 3. **设计问题识别**:PMD能够检测出设计上的问题,如过长...

    pmd代码规范工具

    对于大型项目,推荐使用持续集成工具如Jenkins,设置PMD插件定期运行代码检查,确保每次代码提交前都能发现问题。 PMD的使用并不局限于Java,它也支持其他语言,如JavaScript、PL/SQL和XML。在Java环境中,PMD可以...

    Java代码检查工具PMD

    PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。该软件功能强大,扫描效率高,是Java程序员debug的好帮手。  ...

    PMD检查工具4.0

    PMD检查工具4.0是一款针对Java编程语言的静态代码分析工具,旨在帮助开发者发现并修复源代码中的潜在问题,如冗余代码、未使用的变量、空捕获块、复杂度过高的方法等。该工具在Java开发领域广泛应用,通过自定义规则...

    Java代码检查工具 PMD.zip

    PMD也常与持续集成工具如Jenkins、Travis CI等配合使用,确保每次代码提交都会经过PMD的检查,及时发现和修复问题,保持代码库的健康状态。 **总结** PMD作为一款强大的Java代码检查工具,其核心价值在于帮助...

    代码走查工具介绍

    在软件开发过程中,代码质量是决定项目成功与否的关键因素之一...在实际操作中,可以先运行CheckStyle来统一代码风格,然后使用PMD检查代码质量,最后通过FindBugs查找可能的运行时错误,形成一个完整的代码审查流程。

    eclipse代码检查工具PMD规则列表

    自己整理的PMD检查的各个规则说明,其中打○的是我自己用的规则,大家自己按实际需要选择吧,有不对的地方请多多指教。

    pmdJava程序代码检查工具

    PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。该软件功能强大,扫描效率高,是Java程序员debug的好帮手。 ...

    pmd-bin-6.19.0-代码重复性检查工具.zip

    pmd-bin 静态代码分析工具 ...PMD具有许多内置检查(以PMD术语,规则),在我们的“规则”参考中针对每种语言进行了记录。 我们还支持广泛的API来编写您自己的规则,您可以使用Java或作为独立的XPath查询来执行。

    PMD与CPD使用说明

    PMD与CPD使用说明,检查Java代码的重复度

    PMD集成myeclipse及PMD规则说明

    4. **运行PMD检查**:保存代码后,MyEclipse会自动运行PMD检查,并在问题视图中显示结果。 **PMD规则说明文档** 提供了详细的规则解释,帮助开发者理解每条规则的作用和意义。这些规则通常分为不同的类别,如设计、...

    检查代码规范插件 检查代码规范插件

    PMD是另一个强大的静态代码分析工具,除了检查代码规范外,它还专注于找出潜在的代码问题,如冗余代码、未使用的局部变量、复杂的表达式等。PMD支持多种构建工具,如Maven和Gradle,使得集成到持续集成(CI)流程中...

    Java程序代码检查工具PMD

    PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。该软件功能强大,扫描效率高,是Java程序员debug的好帮手。 ...

    pmd-4.2.5 Java代码检测

    **PMD 4.2.5 - Java代码检测详解** ...通过定期运行PMD检查,开发者可以及时发现并修复潜在问题,提升代码的健壮性和性能。无论是个人开发还是团队协作,PMD都是一个不可或缺的代码质量保障助手。

    Flex代码检查PMD

    Flex代码检查PMD是一种针对ActionScript 3(AS3)代码的质量分析工具,与Java中的PMD类似。PMD( Potion Memory Debugger)最初是为Java语言设计的源代码分析器,用于检测潜在的编程错误、代码异味(code smell)...

    PMD用于根据源代码分析查找不良的编程习惯

    4. **构建工具集成**:PMD可以与Maven、Gradle、Ant等构建工具无缝集成,使其成为持续集成流程的一部分,确保每次构建都进行代码质量检查。 5. **CPD(Copy-Paste Detector)**:PMD还包含了CPD模块,用于检测代码...

    PMD的规则文件

    这将使Eclipse使用自定义的规则集来检查代码。 3. **运行PMD检查** 在项目上右键单击,选择"Run As" -> "PMD"。PMD会分析源代码,并在Problems视图中显示任何违反规则的地方。 4. **查看和修复问题** 根据PMD...

    pmd插件使用文档

    通过使用 PMD 插件,开发人员可以自动发现可能的错误、无效的代码、低效的编程习惯以及重复的代码块。 在 Maven 项目中集成 PMD 插件的步骤如下: 1. **配置插件**: - 在 Maven 项目的 `pom.xml` 文件中,您需要...

Global site tag (gtag.js) - Google Analytics