はじめに

TDDが好きなので、コードの重複を計測するツール PMDについて調べてみた。

DRY原則とは

DRY原則とは、”Don’t Repeat YourSelf”の略。

簡単に言ってしまえば、コピペするな、ということだ。

重複なコードを書くならば、リファクタリングして、共通部分は共通化しようという考え方。

CPDで重複コードを計測する

このコードの重複さを計測するツールが PMDだ。PMD公式サイトから最新版をダウンロードする。

PMDはJAVA用のツールだが、それに付随するCPDというコマンドで、オプションにJAVA以外の言語を指定すると、他の言語でも使える。(C言語, C++, PHPとか)

Windowsの場合

zipファイルを解凍したら /bin配下に cpd.batというファイルがある。 これがコマンドラインから実行するためのコマンドになる。

cpdの使い方は以下の通り。

cpd 
–minimum-tokens xxx  重複差を指定する。xxxを50にすれば50行以上の重複を報告
–files xxx                    ファイルのパス
[--language xxx]              言語。自分はC言語を使いたいので –language c みたいな
[--encoding xxx]              エンコード指定
[--format (xml|text|csv|vs)]  出力フォーマット指定

例えば、重複度10でC言語でXML出力ならば、こんな感じ。

“C:\Program Files (x86)\pmd-bin-5.0-alpha\bin\cpd”
 –minimum-tokens 10 –files src –language c –format xml>cpd_result.xml

最後にリダイレクトでファイルに出力してやる。

現在の最新版 pmd 5.0だとエラーして苦労した。

Jenkins DRY Pluginを入れる

XML形式で出力した結果をJenkinsで表示してみる。

*Duplicate Code Scanner Plug-in(DRY Plugin)

をJenkinsのプラグインで追加する。 プラグインをインストールすると、[ビルド後の処理の追加]で重複コード分析の集計が現れるので、さきほど出力したファイルを追加。