PMD-Javaコードは、静的解析ツールであります

       今日では、手動のコードレビューを置き換えるために使用コード分析ツールは、すでに傾向です。Javaコードをテストするためのツール、PMDの一つであり、最良の多くの多くは、あります。PMDは、独立して実行することができる、コマンドラインとして実行されてもよく、それはまた、Androidのメーカー本明細書での使用に基づいて、IDEプラグインで実質的PMDとして説明することができます。

 

A、PMDの紹介

       PMD名の意味については、興味深い現象があり、PMDは、正確な名前は、次のような非常に興味深い名前、見つけることができる公式サイトは存在しません:ほとんど完了し、プロジェクトがというように期限を満たしています。PMDはJavaソースファイルの静的解析によってコーディングエラーを学ぶために、(例えば、Javaへの複数の言語をサポートすることができます)、コードレビューツールで、ケースにあるJavaソース・ファイルがコンパイルされたJavaプログラムを実行しないで直接スキャンエラーを報告します。ソフトウェアは、強力な、高い走査効率は、Javaプログラマは良いヘルパーのデバッグです。多くのルールのようなJavaのソースコードの問題の多くを識別することができますこれらのルールを使用し、直接使用することができて、それが来ます:

  • バグの可能性:潜在的なコーディングエラーのチェックは、そのような空のtry / catch /最後に/ switch文など
  • コード(デッドコード)が使用されていない:未使用の変数、パラメータ、メソッドをチェック
  • 複雑な式:ループの間、文を交換することができれば、不必要なチェック
  • 繰り返しコード:コードの重複をチェックします
  • ループは、新しいオブジェクトを作成します:ループ本体の新しいオブジェクトインスタンスをチェックします
  • リソースは閉じて:離れて検査を接続し、結果、ステートメントおよびその他のリソースの後にクローズするかどうか

       また、ユーザーはチェックしたJavaコードは、特定のコーディング標準を満たしている、独自のルールを定義することができます。たとえば、PMDは、すべてのスレッドオブジェクトを作成、検索が必要なルールを記述することができます。

       JDeveloperでは、Eclipseの、jEditの、JBuilderの、BlueJの、CodeGuide、NetBeansの/のSun Java Studioのエンタープライズ/クリエーター、のIntelliJ IDEA(Androidのメーカーは、このエディタに基づいている)、TextPadの、Mavenの、アリ、ジェル、JCreatorとを:PMDは、エディタでサポートされていますemacsの。

 

二、PMDのインストール 

       ファイルによって> [設定]> [プラグイン]> [参照]リポジトリ、「PMDを」検索「PMDPlugin」このものを見つけ、インストールして再起動するように指示に従います。

 

第三に、PMD検出コード

  1、PMD検出を開始

    (1)[ツール]メニューからスタート

       ツールで>実行PMDは、次のインターフェイスを見ることができます。あなたがこの方法を開始した場合、ビューの業績の観点から、走査範囲は、ファイル内のプロジェクト全体です。

        定義PRE:、プラグイン検出ルールが付属している事前定義されたルールの表現。その後、問題のスキャンの種類のように、離れてクリックし、ルールのリストで、すべての列のリストを拡大しました。どこで「すべては」すべてのルールの使用を表しています。

        カスタムルール:カスタム検出ルール。プラグインは、彼らのニーズに応じてカスタマイズするユーザーは、デフォルトがクリックされないルールをチェックし、設定はカスタムルールファイル後方選択をインポートする必要ができます。

    (2)コンテキストメニューから開始

       エディタ上のファイルまたは右クリックで、あなたはまた、「ファイル名を指定して実行PMD」オプションを見ることができますし、同じメニューから「ツール」を起動し、ここではそれらを繰り返すありません。出発のこの方法によって、検出範囲は、マウスまたはカーソル現在選択された領域に依存します。

  2、業績

       次のようにパネルを実行した後に表示されます。

   

       左边工具栏,鼠标停留在上面会提示其功能,比较简单就不啰嗦了。右边显示了检测结果,这里显示的结果类别取决于我们运行的时候在“Pre Defined”中选择的规则类型,因为前面选择的“All”,所以所有的规则都显示了。当点击具体某一问题项时,会跳转到对应的源码中。

 

四、配置检测规则

       通过File > Settings > Other Settings > PMD可以打开检测规则的设置界面:

        在“RuleSets(规则设置)”界面可以管理自定义的检测规则。因为在实际工作中,可能有些团队需要根据实际情况自定义检测规则,就可以通过这里导入。如果要使用它,需要在启动PMD进行检测时选择该自定义规则。

       点击“Options”选项卡,在其中可以配置一些检测规则选项

其中重点需要留意的是“Skip TestSource”这一项,因为在项目中有不少Android Studio自动生成的测试代码,如下所示,选择上述选项后可以将其过滤掉。

 

五、PMD的高级使用

       本文主要介绍PMD的基本使用,同时限于笔者的水平有限,这里仅简单介绍一下它的高级使用。

       PMD功能非常强大,仅仅是针对Java的检测就附带了让人众多的规则,这里提供一份《PMD插件分析代码规则(中文).xls》文档,有兴趣的可以下载深入了解:

       链接:https://pan.baidu.com/s/189OTD_k-RbEX4ABJbAMlIg

       提取码:90f4

       对于自定义规则,这里提供一个自定义模板(pmd_custom_rule.xml,可以直接导入使用),可以通过这个模板学习一下PMD的规则定义:

 1 <?xml version="1.0"?>
 2 <ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Android Application Rules"
 3     xmlns="http://pmd.sf.net/ruleset/1.0.0"
 4     xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd"
 5     xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd">
 6  
 7     <description>Custom ruleset for ribot Android application</description>
 8  
 9     <exclude-pattern>.*/R.java</exclude-pattern>
10     <exclude-pattern>.*/gen/.*</exclude-pattern>
11  
12     <rule ref="rulesets/java/android.xml" />
13     <rule ref="rulesets/java/clone.xml" />
14     <rule ref="rulesets/java/finalizers.xml" />
15     <rule ref="rulesets/java/imports.xml">
16         <!-- Espresso is designed this way !-->
17         <exclude name="TooManyStaticImports" />
18     </rule>
19     <rule ref="rulesets/java/logging-java.xml">
20         <!-- This rule wasn't working properly and given errors in every var call info -->
21         <exclude name="GuardLogStatementJavaUtil" />
22     </rule>
23     <rule ref="rulesets/java/braces.xml">
24         <!-- We allow single line if's without braces -->
25         <exclude name="IfStmtsMustUseBraces" />
26     </rule>
27     <rule ref="rulesets/java/strings.xml" >
28         <!-- Exclude because causes problems with SQL Strings that usually require duplication -->
29         <exclude name="AvoidDuplicateLiterals"/>
30     </rule>
31     <rule ref="rulesets/java/basic.xml" />
32     <rule ref="rulesets/java/naming.xml">
33         <exclude name="AbstractNaming" />
34         <exclude name="LongVariable" />
35         <exclude name="ShortMethodName" />
36         <exclude name="ShortVariable" />
37         <exclude name="ShortClassName" />
38         <exclude name="VariableNamingConventions" />
39     </rule>
40 </ruleset>

 

友情链接:

       PMD Java rules官方文档介绍:https://pmd.github.io/pmd-6.19.0/pmd_rules_java.html

       PMD 官网:https://pmd.github.io

 

おすすめ

転載: www.cnblogs.com/andy-songwei/p/11830812.html