22 Sep 2013, 15:24

重複コードを撃退!DRY原則をC言語で実践するためのCPDを調べた

はじめに

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

DRY原則とは

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

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

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

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

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

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

Windowsの場合

<div class="outline-text-3" id="text-3-1">
  <p>
    zipファイルを解凍したら /bin配下に cpd.batというファイルがある。 これがコマンドラインから実行するためのコマンドになる。
  </p>

  <p>
    cpdの使い方は以下の通り。
  </p>

  <pre><code>cpd 

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

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

  <pre><code>“C:\Program Files (x86)\pmd-bin-5.0-alpha\bin\cpd”

–minimum-tokens 10 –files src –language c –format xml>cpd_result.xml

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

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

  <ul class="org-ul">
    <li>
      <i>CPDでsaxon9-dom.jarがないよと怒られ</i>
    </li>
  </ul>
</div>

Jenkins DRY Pluginを入れる

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

をJenkinsのプラグインで追加する。

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

image

出力結果

image

 

はじめに

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

DRY原則とは

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

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

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

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

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

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

Windowsの場合

<div class="outline-text-3" id="text-3-1">
  <p>
    zipファイルを解凍したら /bin配下に cpd.batというファイルがある。 これがコマンドラインから実行するためのコマンドになる。
  </p>

  <p>
    cpdの使い方は以下の通り。
  </p>

  <pre><code>cpd 

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

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

  <pre><code>“C:\Program Files (x86)\pmd-bin-5.0-alpha\bin\cpd”

–minimum-tokens 10 –files src –language c –format xml>cpd_result.xml

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

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

  <ul class="org-ul">
    <li>
      <i>CPDでsaxon9-dom.jarがないよと怒られ</i>
    </li>
  </ul>
</div></p>

Jenkins DRY Pluginを入れる

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

をJenkinsのプラグインで追加する。

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

image

出力結果

<div class="outline-text-2" id="text-5">
  <a href="http://hmi-me.ciao.jp/wordpress/wp-content/uploads/image27.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://hmi-me.ciao.jp/wordpress/wp-content/uploads/image_thumb27.png" alt="image" width="566" height="281" border="0" /></a> </p> 

  <p>
    Jenkinsさんと一緒に思わずニンマリ。
  </p></p>
</div></p>