PMD (ソフトウェア)

PMD (英語のProgramming Mistake Detectorの頭文字)は、Javaソースコードをするための静的なルールセットで、以下のような潜在的問題を識別する:

 バグの可能性 —空のトライ/キャッチ/フィナリー/スイッチブロック
 デッドコード —使われていないローカル変数、パラメータ、プライベートメソッド
 空のif/whileステートメント
 複雑な式 —whileループを可能にしたforループのステートメントが必要ない場合
 準最適コード —無駄な文字列/ストリングバッファの使用
 高い循環的複雑度測定を使ったクラス
 重複コード —コピー・アンド・ペーストされたコードはバグもコピー・アンド・ペーストされていると解釈でき、保守性が低下してしまう。

PMDには正式名称が無く、いくつかの非公式名があり、おそらく最も適切な名称は「Programming Mistake Detector」とされる。

通常PMDのエラーは真のエラーにはならないが、むしろ非効率なコードで例えば未だに修正されないとしてもアプリケーションは適切な動作が出来る事になる。

ルールセット
PMDにはカスタムルールを書くことが出来る内蔵のルールやサポートが含まれる。カスタムルールは以下2通りの方法で書くことになる:

 XPathの使用
 Javaクラスの使用

Copy/Paste Detector (CPD)
Copy/Paste Detector (CPD)とはPMDに対応したアドオンでラビン-カープ文字列検索アルゴリズムを使って重複コードを検索する。Java、JSP、C言語、C++、Fortran、PHP、C#のコードを使って動作している。

プラグイン
PMDはJDeveloper、Eclipse、jEdit、JBuilder、Omnicore's CodeGuide、NetBeans/Sun Studio、IntelliJ IDEA、TextPad、Maven、Ant、Gel、JCreator、Hudson、Jenkins、、Emacsのプラグインにもなっている。

参考文献
 Rutar, Almazan, Foster (2004), "A Comparison of Bug Finding Tools for Java". ISSRE '04 Proceedings of the 15th International Symposium on Software Reliability Engineering, IEEE, DOI: 10.1109/ISSRE.2004.1

外部リンク
 Home page at SourceForge.net.
 CPD at SourceForge.net.
 Book: "PMD Applied". Written by the lead developer, Tom Copeland (http://tomcopeland.blogs.com/).
 Sonar (Quality platform) code quality platform uses PMD and CPD
 Redsauce PMD Parser Small utility that parses PMD output in HTML syntax

Java開発ツール
オープンソースソフトウェア