はじめに
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のプラグインで追加する。 プラグインをインストールすると、[ビルド後の処理の追加]で重複コード分析の集計が現れるので、さきほど出力したファイルを追加。