Eclipse+PMD插件分析代码规则(中文)
- 格式:xls
- 大小:171.50 KB
- 文档页数:20
Eclipse中文教程介绍Eclipse 是一款强大的集成开发环境(IDE),广泛用于Java开发和其他语言的开发。
它提供了丰富的功能和工具,可以帮助开发者更高效地编写、调试和测试代码。
本教程将介绍如何使用Eclipse进行Java开发,包括安装和配置Eclipse,项目管理,代码编辑,调试和测试等基本操作。
安装和配置Eclipse下载Eclipse首先,你需要从Eclipse官方网站上下载最新的Eclipse版本。
该网站提供了各种不同用途的Eclipse包,例如Java开发,C/C++开发和Web开发等。
选择适合你开发需求的版本,然后下载对应的压缩包文件。
解压缩Eclipse文件下载完成后,将压缩包解压缩到你喜欢的目录。
解压缩后,你将看到Eclipse的安装目录及其子目录。
启动Eclipse进入Eclipse的安装目录,找到eclipse.exe文件(在Windows系统中),双击运行。
如果是在Linux或Mac系统中,你需要在终端中导航到Eclipse目录,并运行./eclipse 命令启动Eclipse。
配置Eclipse在初始启动时,Eclipse会询问你要使用的工作空间目录。
工作空间是Eclipse用来存储项目和设置的目录。
你可以选择使用默认的工作空间目录,或者手动选择一个你喜欢的位置。
创建和管理项目创建新项目要创建新的Java项目,首先点击菜单栏上的“File”选项,然后选择“New” -> “Java Project”。
在弹出的对话框中输入项目的名称,并选择合适的JDK版本。
导入现有项目如果你已经有现有的Java项目,你可以将其导入到Eclipse 中。
点击菜单中的“File”选项,然后选择“Import” -> “ExistingProjects into Workspace”。
在弹出的对话框中选择项目所在的目录,并点击“Finish”按钮。
项目结构在Eclipse中,项目由源代码、配置文件和其他资源组成。
使用PMD检查代码BugPMD是一种开源分析Java代码错误的工具,他分析Java源代码并找出源代码潜在的Bug,例如发现不需要使用的变量、空的catch块和不需要创建的对象等。
它还包含一个CPD工具可以探测一块代码中相同的部分;PMD是通过规则的方式来进行检查的代码项。
PMD包含16个规则集,涵盖了Java 的各种常见问题。
●基本(rulesets/basic.xml)——规则的一个基本集合:catch不该为空,无论何时重写equals(),都要重写hashCodeI()等。
●命名(rulesets/naming.xml)——对标准的java命名规范的测试:变量名称不应太短;方法名不应过长;类名称应当以小写字母开头;方法和字段名应该以小写字母开头等。
●未使用的代码(rulesets/unusedcode.xml)——查找未使用的私有字段和本地变量、执行到的语句、从未调用的私有方法等。
●设计(rulesets/design.xml):检查各种设计良好的原则,例如switch语句应当有default块,应当避免深度嵌套的if块,不应当给参数重新赋值,不应该对double 值进行相等比较。
●导入语句(rulesets/imports.xml):检查import语句的问题,比如一个类被导入两次或者导入lang包中的类。
●JUnit测试(ruleset/junit.xml):查找测试用例和测试方法的特定问题,例如方法名称的正确拼写,以及suite()方法是不是static和public;●字符串(rulesets/string.xml):找出处理字符串时遇到的常见问题,例如重复的字符串标量,调用String构造函数,对String变量调用toString()方法。
●括号(rulesets/braces.xml):检查for、if、while和else语句是否使用了括号。
●代码尺寸(rulesets/codesize.xml):测试过长的方法、有太多方法的类,以及重构方面的类似问题。
代码静态分析工具使用一、各种Eclipse插件安装checkstyle插件的安装Help --> Install New Software --> Add(checkstyle更新URL:/update)findbugs插件的安装Help --> Install New Software --> Add(findbugs更新URL:/eclipse)pmd插件的安装Help --> Install New Software --> Add(pmd更新URL:/eclipse)二、各种Eclipse插件配置和使用checkstyle插件的配置和使用1、Windows --> Preferences --> checkstyle --> New (OK) --> set as defaultType:Project Relative ConconfigName:checkstyle-checkerLocation:/sample/codechecker/checkstyle-checker.xml2、选中工程 --> Projects --> CheckStyle --> Configure中选择checkstyle-checker - (Global)3、选中任意一个Java文件,右键CheckStyle-->check code with checkstylefindbugs插件的配置和使用1、Windows --> Preferences --> Java --> findbugs --> Filter files --> AddInclude Filter files:findbugs-include.xmlExclude Filter files:findbugs-exclude.xml2、选中任意一个Java文件,右键Find bugs --> Find bugspmd插件的配置和使用1、Windows --> Preferences --> PMD --> Rules configration --> import rule set/sample/codechecker/pmd-rules.xml2、选中任意一个Java文件,右键PMD --> check code with PMDedu/eclipse)(Global)。
pmd规则PMD规则是一种静态代码分析工具,用于在软件开发过程中帮助程序员检测和修复潜在的代码问题。
它是一种自动化的静态代码质量检查工具,可以帮助团队遵循统一的代码风格和最佳实践。
PMD规则覆盖了许多代码质量方面,包括代码复杂度、代码重复、代码安全性、代码风格等。
通过在项目中集成PMD,开发团队可以在代码编写阶段就能够找到和修复一些潜在的问题,从而提高代码质量和可维护性。
其中,代码复杂度是PMD规则中的一个重要方面。
PMD通过度量代码的复杂性,包括方法的圈复杂度、类的行数、代码块的嵌套深度等指标,来帮助开发者识别出可能存在的问题。
通过遵循PMD规则,团队可以减少复杂度过高的代码,提高代码的可读性和可维护性。
另外,PMD还可以检测和修复代码中的重复。
代码重复是一种常见的代码质量问题,会导致代码冗余和维护困难。
PMD可以通过比较代码片段的语法结构和语义,来自动识别重复的代码,并提供相应的建议和修复方案。
通过消除代码重复,团队可以提高代码的简洁性和可维护性。
此外,PMD还提供了一些安全性相关的规则,用于检测潜在的安全漏洞和风险。
例如,PMD可以检测未经验证的输入、潜在的SQL注入、敏感信息的泄露等安全问题。
通过使用PMD规则中的安全性规则,团队可以尽早发现和修复潜在的安全问题,从而降低系统被攻击的风险。
总结而言,PMD规则是一种有助于改善代码质量的静态代码分析工具。
它通过检测和修复代码复杂度、代码重复和安全性等问题,帮助开发团队提高代码的可读性、可维护性和安全性。
通过集成PMD规则,开发团队可以在代码编写阶段就发现和解决一些潜在的代码问题,提升代码质量和开发效率。
静态分析工具PMD使用说明中科软科技股份有限公司2008年12月目录目录 (2)1 前言 (3)1.1编写目的 (3)1.2修订历史 (3)2 PMD简介 (4)3PMD的安装与运行 (4)3.1安装并从命令行运行PMD (4)3.2 Eclipse中PMD插件的安装及使用 (5)3.3 使用Ant进行PMD调用 (8)4 关于PMD规则 (9)4.1 PMD缺省规则 (9)4.2 PMD推荐规则 (10)4.3 PMD规则自定义 (10)4.4 注意事项 (11)5PMD规则编写 (11)5.1前提条件 (11)5.2 PMD实现原理 (12)5.3 PMD实现过程 (12)5.4 JAVA代码编写规则 (12)5.5 XPath语言编写规则 (12)6XPATH基础 (14)6.1 XPATH作用 (14)6.2 XPATH数据类型 (14)6.3 XML文档结构 (15)6.4 XPATH中节点匹配 (15)7 参考资料 (17)8附件......................................................................................................... 错误!未定义书签。
附一中科软推荐规则集............................................................... 错误!未定义书签。
附二PMD规则集详细说明.......................................................... 错误!未定义书签。
1前言1.1编写目的质量是衡量一个软件是否成功的关键要素。
而对于商业软件系统,尤其是企业应用软件系统来说,除了软件运行质量、文档质量以外,代码的质量也是非常重要的。
软件开发进行到编码阶段的时候,最大的风险就在于如何保证代码的易读性和一致性,从而使得软件的维护的代价不会很高。
PMD安装和使用说明——for CPD 1简介PMD是一个针对Java语言的静态的代码分析器,它检查Java源文件中的潜在问题,也包含一些编码规范的问题。
另外,Eclipse 的 PMD 插件提供了一项叫做 CPD(或复制粘贴探测器)的功能,用于寻找重复的代码。
为在 Eclipse 中使用这项便利的工具,需要安装具有 PMD 的 Eclipse 插件,该插件具有 CPD 功能。
PMD的官方网站:官方的文档/products.html2安装安装PMD的eclipse插件版,最简单的方法是使用远程站点进行安装和更新。
步骤如下:1.打开Eclipse;2.在菜单中选择Help | Software Updates | Find and Install...3.选择“Search for new features to install”(如果是更新而不是新装,则选择“Search for updates of the currently install features”),点击Next;4.点击New Remote Site...;5.输入Nam e和URL,点击OK按钮;Name:PMDURL: /eclipse6." PMD "将出现在Sites to include in search页面中,选中PMD,点击Finish;7.In the Search Results页面,选中PMD,点击Next。
8.选中“I Accept the terms of the license agreements”,点击Next;9.确认安装路径正确,点击Finish;10.等待Eclipse下载需要的jar文件包,点击Install;11.根据提示,选择Yes重启Eclipse。
3CPD使用方法1.选中你的Java项目,右键=>PMD=>子菜单项里有“Find Suspect Cut And Paste”一项,如下图所示:2.点中“Find Suspect Cut And Paste”,出现如下对话框。
在eclipse中替换新的规则集的方法一、替换checkstyle规则集1、在eclipse中,”window preferences”,并在左侧树状列表中选中checkstyle选项,弹出如下窗口。
2、点击”new”按钮,弹出如下窗口:其中:Type:选择External Configuration File。
Name:可以自由为将要导入的规则集起一个名字。
Location:要导入的规则集的位置,在我们的eclipse软件中有一个MyRuleSet文件夹,里面有最新的规则集checkstyle_ruleset_minimal.xml,选中即可。
3、点击“OK”,则原来的preferences窗口的Globle Check Configuration框中会增加一个选项,如下图所示。
4、选中该规则集,并点击“set as Default”,在该规则集后的“default”选项中会有个对勾,说明该规则集已经变成默认规则集,如下图。
5、点击“OK”,结束。
二、替换PMD规则集1、在eclipse中,”window preferences”,弹出如下窗口。
2、在左侧树状列表中选中”PMD RulesConfiguration”选项卡,弹出如下窗口。
3、点击“clear all”,清空原有的规则,如下图所示。
4、并点击“import rule set”,弹出如下框,点击“browse”按钮,参考checkstyle的方法,在MyRuleSet文件夹中找到最新的PMD规则集pmd_ruleset_minimal.xml,如下图。
5、点击“OK”,导入规则集之后的窗口如下图所示。
6、点击“OK”,结束。
三、替换代码格式化模板(包括Formatter和Code Templates)1、Formatter和Code Templates 规则存放位置在eclipse/CodeFormat目录下2、Formatter3、CodeTemplates选中即可。
静态分析工具PMD使用说明邮保通组整理2008-9-5目录静态分析工具PMD使用说明 (1)目录 (2)1.编写目的 (3)2.PMD简介 (4)3.PMD的安装和运行 (4)3.1安装并从命令行运行PMD (4)3.2在Eclipse中安装PMD插件运行方式 (6)3.3 使用Ant进行调用 (8)4.关于PMD规则 (9)5.编写自定义的PMD规则 (14)6.结束语 (17)7.参考资料 (17)1.编写目的质量是衡量一个软件是否成功的关键要素。
而对于商业软件系统,尤其是企业应用软件系统来说,除了软件运行质量、文档质量以外,代码的质量也是非常重要的。
软件开发进行到编码阶段的时候,最大的风险就在于如何保证代码的易读性和一致性,从而使得软件的维护的代价不会很高。
在软件开发的过程中,以下几种情形随处可见:1) 软件维护时间长,而且维护人员的积极性不高:做过软件维护的开发人员,尤其是在接手不是自己开发产品的源码的时候,即使有良好的文档说明,仍然会对代码中冗长、没有注释的段落“叹为观止”。
理解尚且如此困难,何况要修改或者增加新的功能。
因此,很多开发人员不愿意进行软件维护的工作。
2)新的开发人员融入团队的时间比较长:除了没有良好的培训、文档等有效的机制以外,每个人一套的编码风格,也容易造成新成员对于已有代码的理解不够,甚至出现偏差。
提高代码的质量,除了要提高逻辑上的控制以及业务流程的理解外,代码本身也存在提高的空间,例如一些潜在的问题可以很早的就避免。
类似于编码规范上的内容,如果全靠编码人员进行自行检查,那么无疑需要很大的工作量,如果可以使用代码的静态检查工具进行检查的话,那么将大大的提高编码的效率。
项目组目前代码检查的工作基本上都是通过人工的方式,实行起来比较困难,检查的效果也不是很明显。
PMD正是这样一种工具,可以直接使用它自带的规则(当然也可以使用自己的规则)对Java源程序进行分析找出程序存在的问题,可以很大程度上的减轻代码检查工作的繁琐,为项目组今后的维护和开发工作起到指导的作用。
Java代码检测工具PMD规则集解决方案合集Basic Rules : The Basic Ruleset contains a collection of good practices which everyone should follow.∙Braces Rules : The Braces Ruleset contains a collection of braces rules. ∙Clone Implementation Rules : The Clone Implementation ruleset containsa collection of rules that find questionable usages of the clone() method. ∙Code Size Rules : The Code Size Ruleset contains a collection of rules that find code size related problems.∙Controversial Rules : The Controversial Ruleset contains rules that, for whatever reason, are considered controversial. They are separated out here to allow people to include as they see fit via custom rulesets. This ruleset was initially created in response to discussions overUnnecessaryConstructorRule which Tom likes but most people reallydislike :-)∙Coupling Rules : These are rules which find instances of high or inappropriate coupling between objects and packages.∙Design Rules : The Design Ruleset contains a collection of rules that find questionable designs.∙Finalizer Rules : These rules deal with different problems that can occur with finalizers.∙Import Statement Rules : These rules deal with different problems that can occur with a class' import statements.∙J2EE Rules : These are rules for J2EE∙JavaBean Rules : The JavaBeans Ruleset catches instances of bean rules not being followed.∙JUnit Rules : These rules deal with different problems that can occur with JUnit tests.∙Jakarta Commons Logging Rules : The Jakarta Commons Logging ruleset contains a collection of rules that find questionable usages of thatframework.∙Java Logging Rules : The Java Logging ruleset contains a collection of rules that find questionable usages of the logger.∙Migration Rules : Contains rules about migrating from one JDK version to another. Don't use these rules directly, rather, use a wrapper ruleset suchas migrating_to_13.xml.∙Naming Rules : The Naming Ruleset contains a collection of rules about names - too long, too short, and so forth.∙Optimization Rules : These rules deal with different optimizations that generally apply to performance best practices.∙Strict Exception Rules : These rules provide some strict guidelines about throwing and catching exceptions.∙String and StringBuffer Rules : These rules deal with different problems that can occur with manipulation of the class String or StringBuffer.∙Security Code Guidelines : These rules check the security guidelines from Sun, published at/security/seccodeguide.html#gcg∙Type Resolution Rules : These are rules which resolve java Class files for comparisson, as opposed to a String∙Unused Code Rules : The Unused Code Ruleset contains a collection of rules that find unused code.∙PMD规则之Basic Rules∙EmptyCatchBlock: Empty Catch Block finds instances where an exception is caught, but nothing is done. In most circumstances, this swallows an exception which should either be acted on or reported.解决方案空的catch块:发现空的catch块没做任何异常处理的事,在大多数情形下,这会吞噬一些应该被处理或报告的异常∙EmptyIfStmt: Empty If Statement finds instances where a condition is checked but nothing is done about it.解决方案空的if表达式:发现使用if进行了条件判断,但是判断之后没做任何处理∙EmptyWhileStmt: Empty While Statement finds all instances where a while statement does nothing. If it is a timing loop, then you should use Thread.sleep() for it; if it's a while loop that does a lot in the exit expression, rewrite it to make it clearer.解决方案空的while表达式:发现空的while表达式,如果是一个定时的循环,你应该在循环体内使用Thread.sleep();如果是对于退出处理做的一个处理大量事情的while循环,重写代码使它更清晰∙EmptyTryBlock: Avoid empty try blocks - what's the point?解决方案空的try块:避免空的try块∙EmptyFinallyBlock: Avoid empty finally blocks - these can be deleted.解决方案空的finally块:避免空的finally块-这些是可以删掉的∙EmptySwitchStatements: Avoid empty switch statements.解决方案空的switch表达式:避免空的switch表达式∙JumbledIncrementer: Avoid jumbled loop incrementers - it's usually a mistake, and it's confusing even if it's what's intended.解决方案避免混乱的循环增量-它常常是一个错误,而且容易让人迷惑错误代码示例:public class JumbledIncrementerRule1 {public void foo() {for (int i = 0; i < 10; i++) {for (int k = 0; k < 20; i++) {System.out.println("Hello");}}}}父子循环都用i++ForLoopShouldBeWhileLoop: Some for loops can be simplified to while loops - this makes them more concise.解决方案有些for循环可以简化为while循环-这样可以更加简明代码示例:public class Foo {void bar() {for (;true;) true; // 没有初始化块和变化块,相当于: while (true)}}∙UnnecessaryConversionTemporary: Avoid unnecessary temporaries when converting primitives to Strings解决方案将原始类型转换为字符串类型时不必要的临时转换代码示例:public String convert(int x) {// 多了一个创建对象环节String foo = new Integer(x).toString();// 下面这种写法就好了return Integer.toString(x);}∙OverrideBothEqualsAndHashcode: Override both public boolean Object.equals(Object other), and public int Object.hashCode(), or override neither. Even if you are inheriting a hashCode() from a parent class, consider implementing hashCode and explicitly delegating to your superclass.解决方案同时重写equals()和hashCode()方法:要么全部重写这两个方法,要么全部不重写∙DoubleCheckedLocking: Partially created objects can be returned by the Double Checked Locking pattern when used in Java. An optimizing JRE may assign a reference to the baz variable before it creates the object the reference is intended to point to. For more details see/javaworld/jw-02-2001/jw-0209-double.html.解决方案双重检查锁机制:在JAVA中有时候创建的对象是通过双重检查机制获取的,一个优化的JRE可能在真正创建对象之前先将指向这个对象的引用赋给一个变量,如baz,需要更多细节参考:/javaworld/jw-02-2001/jw-0209-double.html .示例代码:public class Foo {Object baz;Object bar() {/**这里当对象没创建完时也可能判断不为空,那么在多线程环境下,就可能导致某些线程使用bar()方法后直接返回一个未指向完整对象的baz引用,从而发生错误,也可以参考笔者博客:/jack0511/archive/2009/02/04/3862382.aspx*/ if(baz == null) {synchronized(this){if(baz == null){baz = new Object();}}}return baz;}}∙ReturnFromFinallyBlock: Avoid returning from a finally block - this can discard exceptions.解决方案从finally块中返回:避免从finally块中返回-这会导致异常捕获后又被抛弃.public class Bar {public String foo() {try {throw new Exception( "My Exception" );} catch (Exception e) {throw e;} finally {return "A. O. K."; //.这句导致catch到的异常直接被丢弃,强制返回“A.O.K”}}}∙EmptySynchronizedBlock: Avoid empty synchronized blocks - they're useless.解决方案空的Synchronized块:避免空的synchronized块-它们是无用的∙UnnecessaryReturn: Avoid unnecessary return statements 解决方案不必要的Return:避免不必要的return语句示例代码:public class Foo {public void bar() {int x = 42;return;}}∙EmptyStaticInitializer: An empty static initializer was found. 解决方案空的静态初始化块:发现一个空的静态初始化块示例代码:public class Foo {static {// empty}}∙UnconditionalIfStatement: Do not use "if" statements that are always true or always false.解决方案非条件化的if表达式:当表达式总是为真或总为假时,不要用ifpublic class Foo {public void close() {if (true) {// ...}}}∙EmptyStatementNotInLoop: An empty statement (aka a semicolon by itself) that is not used as the sole body of a for loop or while loop is probably a bug. It could also be a double semicolon, which is useless and should be removed.解决方案非循环中不要有空的表达式:在一个非for循环或非while循环体中使用的一个空的表达式(或者称为一个分号)可能是一个bug。
PMDEclipse-pmd插件下载:网上给出的url都无法使用,可以去http://sourceforge.jp/projects/sfnet_pmd/releases/ 手动下载插件,解压后复制到eclipse的plugin和features目录下。
重启eclipse后,windows —>preferences 下看到PMD选项则说明安装成功。
PMD使用:1.检查代码1)右键项目,PMD—>Check Code With PMD2)在PMD视图下,可以看到检查结果。
每个代码文件的违反规则的地方都被列出,右上角的五色圆形按钮,可以按照违规等级过滤列出的信息。
从左到右依次为error high, error, warning high, warning, information。
3)在package explorer和代码文件中都会有标记2.生成检查报告1)检查后,右键项目,PMD—>Generate Reports。
在项目目录下会生成reports文件夹,存放检查报告。
3.清除违规标记1)右键项目,PMD—>Clear PMD Violations4.编辑检查规则1)Window—>Preferences,左侧选择PMD—>Rules Configuration。
在Rules下已显示出PMD自带的检查规则。
点击右侧Add rule 按钮,进入规则制定界面,如下所示。
检查规则在XPath项配置。
2)Window—>preferences—>PMD,点击Rule Designer,可以设计自己的规则。
输入Source Code和XPath Query,点击Go,可以查看PMD根据源代码生成的抽象语法数(AST)和匹配结果。
PS:想要熟练配置自己的规则,需要对XPath和PMD工作原理有一定的了解。
可参考PMD 使用说明.doc中相关内容。
CheckStyleEclipse-CheckStyle插件下载:/projects/eclipse-cs/files/ 手动下载插件,解压后复制到eclipse的plugin和features目录下。
Eclipse PMD插件分析代码规则(中文)
括号
检查for、if、while和else 语句是否使用了括号。
的检验,其中包括把null赋值给变量、方法中有多个返回点,以及从 sun 包导入等。
查找类之间过度耦合的迹象,比如导入内容太多;在超类型或接口就已经够用的时候使用子类的类型;类中的字段、变量和返回类型过多等。
找出处理字符串时遇到的常见问题,例如重复的字符串标量,调用 String 构造函数,对String 变量调用 toString()方法。
该方法而抛出
ng.Exception 异常,不应当将异常用于流控制,不应该捕获 Throwable,等等。
分析代码规则(中文)。