`
sisi111111
  • 浏览: 24990 次
文章分类
社区版块
存档分类
最新评论

pmd使用说明以及生成的报告

pmd 
阅读更多
使用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的压缩包就可以了,如下图:


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

使用

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

@echo off

rem 要检查的文件和路径,也可以是代码目录set filepath=E:\SRC\ComposeMessageActivity.javarem 报告输出的路径
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使用说明(内含Jar包)

    3. **查看报告**: PMD会生成报告,列出所有违反规则的地方,包括问题的严重程度、所在文件及行号、以及违反的规则描述。 4. **修复问题**: 根据报告,开发者可以逐个定位并修复代码问题,优化代码质量。 5. **持续...

    PMD-CTI100电缆测试仪说明书.rar

    《PMD-CTI100电缆测试仪与...通过阅读并理解《PMD-CTI100电缆测试仪说明书》以及配合LabVIEW的运用,无论是专业电工还是电缆维护人员,都能熟练掌握这款测试仪的使用技巧,提高工作效率,保障电缆系统的稳定运行。

    pmd-bin-5.5.2.zip

    这些文档对于理解和使用PMD至关重要,它们解释了如何配置PMD、如何自定义规则以及如何解读分析结果。 4. **rulesets** 目录:PMD预定义了一系列的规则集,比如"basic"、"controversial"、"design"、"errorprone"和...

    Gitlab+P3C-PMD(Aliyun)标准化你团队的代码1

    文章将从服务端 Gitlab 校验原理简要说明、P3C-PMD 插件的使用、Gitlab + P3C-PMD 配合使用三个方面对代码标准化进行详细的讲解。 服务端 Gitlab 校验原理 Gitlab 服务端会有三个主要钩子:pre-receive、update、...

    pmd-src-6.39.0.zip

    1. **源代码**:包括.java文件,这些是PMD的核心组件,如规则引擎、AST(抽象语法树)解析器、报告生成器等的实现。 2. **构建脚本**:可能包含Gradle或Maven的配置文件,用于构建、测试和打包PMD。这些脚本可以...

    Maven安装和使用说明文档

    Maven是一个优秀的构建工具,可以清除、编译、打包、测试、部署等...还可以生成项目各种分析报告,如Maven项目分析报告、测试报告、测试覆盖率、PMD静态代码分析等。 http://u.download.csdn.net/images/btn_submit.png

    IntelliJ IDEA使用说明书.7z

    这份"IntelliJ IDEA使用说明书"将涵盖以下关键知识点: 1. **安装与启动**:首先,用户需要从官方网站下载对应操作系统的安装包,然后按照提示进行安装。启动IntelliJ IDEA后,可以选择新建项目或打开已有项目。 2...

    maven项目使用的环境很好用

    此外,Maven还提供了丰富的插件,用于代码质量检查、代码覆盖率报告、生成项目文档等,如Checkstyle、PMD、JaCoCo和Javadoc插件。 总的来说,Maven项目使用的环境对于Java开发者来说是不可或缺的。它提供了标准化的...

    JAVA代码检查工具(开源)

    7. **Javadoc**: Javadoc是一种生成Java API文档的工具,通过检查代码中的注释,确保所有公共API都有清晰的文档说明。 这些工具在使用时通常会集成到开发环境(如IDE)或构建流程(如Maven、Gradle)中,以便在开发...

    eclipse代码/注释规范

    - 方法的Javadoc应说明输入参数、返回值、可能抛出的异常以及任何注意事项。 - 使用`@see`、`@link`标签引用其他类或方法,增强文档关联性。 5. **命名约定**: - 类名使用驼峰式命名,首字母大写,如`ClassName...

    一些Java编码规范(仅供参考)

    - Javadoc是Java特有的文档生成工具,可以自动生成API文档,方便其他开发者理解和使用代码。 12. **单元测试** - 编写单元测试,确保代码的功能正确,如使用JUnit或TestNG框架。 - 测试覆盖率应尽可能高,涵盖...

    Verilog编码规范1

    - 使用Coregen生成的乘法电路。 - 基于名字的调用优于基于顺序的调用。 - 时钟事件表达式应明确指定边缘,如`negedge clk_name`或`posedge clock_name`。 - 异步复位时,高电平有效用`if(as_reset==1'b1)`,低...

    实验7 Java源代码分析程序

    在提供的文件列表中,README.TXT可能是包含关于实验的指导信息、注意事项或者代码分析程序的使用说明。阅读此文件将帮助理解实验的目标、要求以及如何运行和测试JavaCodeAnalyzer。 总结 通过这个实验,初级Java...

    MMD弱音婚纱

    此外,压缩包可能还包括README文本文件,提供关于如何导入和使用模型的说明,以及创作者的版权信息和使用许可条款。 总的来说,"MMD弱音婚纱"是一个MikuMikuDance社区中的资源,允许用户为弱音哈库创建优雅的婚礼...

    洛天依官方mmd模型

    1. **3D模型文件**:通常以.pmd或.pmxB格式存在,这是MMD软件所使用的模型文件格式,包含了角色的基本形状、结构和初始姿势。 2. **纹理贴图**:以.png或.jpg格式提供,用于给模型上色和添加细节,如皮肤、服装、...

    IHub Plugins是一套为Gradle项目提供基础设施的插件集,可以极大简化项目配置

    9. **日志管理和报告**:生成详细的构建报告,便于开发者追踪问题,以及优化构建过程。 10. **自动化测试**:集成JUnit或其他测试框架,方便进行单元测试和集成测试,确保代码的正确性。 在"plugins-main"这个...

    java小工具

    Java小工具,通常指的是用Java编程语言开发的一系列实用程序,它们主要服务于...在"freejava"这个压缩包中,每一个子文件都可能是一个独立的工具或库,具体的功能和使用方法,需要解压后根据文件说明进行学习和探索。

    SpringSide 项目源码

    SpringSide 提供详尽的文档,包括项目结构、配置说明、使用教程等,帮助开发者快速理解和使用项目。同时,源码中的示例代码能够帮助开发者更好地学习 Spring 相关技术。 总的来说,SpringSide 项目源码是一个全面...

    安全性测试工具及教程打包

    4. **教程内容**:可能涵盖如何使用上述工具进行实战演练,例如设置测试环境,配置和运行工具,识别和解释测试结果,以及如何修复发现的问题。教程也可能包括案例研究,让学习者更直观地理解安全测试的实际应用场景...

    人脸识别之表情识别项目相关源码

    使用经典的卷积神经网络,模型的构建主要参考2018年CVPR几篇论文以及谷歌的Going Deeper设计如下网络结构,输入层后加入(1,1)卷积层增加非线性表示且模型层次较浅,参数较少(大量参数集中在全连接层)。 模型训练 ...

Global site tag (gtag.js) - Google Analytics