t.sayama の投稿一覧

s-24

9月も早いものですね!2013年も終わりそうで寂しいs-24です。
7年ぶりに草野球を欠席してしまいました。皆さんも体調管理に気を付けて下さい。

前回記事 では PHPMD の使い方を簡単にご紹介しましたが、今回は続編ということで PHPMD と Jenkins を組み合わせて typo などによる未定義変数の検出を自動化しちゃいます。設定方法と、普段どう使ってるかを紹介しますね!

目次

  1. プラグインのインストール
  2. プロジェクトの作成と設定
  3. 普段の運用

プラグインのインストール

以下では Jenkins のセットアップ自体は完了している前提で話を進めます。

まず、プラグインマネージャーから以下の 2 つのプラグインをインストールします。「Jenkinsの管理」→「プラグインの管理」をクリックすると、プラグイン管理画面に移りますので、そちらからインストールできます。(アップデートがあれば、アップデートありますって表示が出てくれますよ!)

  • Phing Plugin
  • PMD Plugin

01

 

プロジェクトの作成と設定

さて、それでは新規ジョブを作成します。「新規ジョブ作成」を選択し、ジョブ名の入力とプロジェクトの種類の選択を行い、「OK」をクリックします。今回はジョブ名を Product-PHPMD-UnUsedCodeCheck としてみます。

01

次に設定画面が出てくるので、各項目設定していきます。

  1. 「説明」にプロジェクトの概要を記載します。
  2. 01

  3. 「ソースコード管理システム」でソースコードのリポジトリ置き場を指定します。
  4. 01

  5. 日次で実行する場合は、「ビルド・トリガ」の項目で「定期的に実行」をクリックして、スケジュールに設定を記載します。ここでは早朝 4 時 10 分にセットしています。書式に関しては右側のクエスチョンマークをクリックするとヘルプが出ますのでそちらを参照ください。
  6. 01

  7. 「ビルド」の「ビルド手順の追加▼」をクリックして追加する処理の一覧を表示し、その中から「Phing の呼び出し」を選択します。「使用するPhing」、「ターゲット」については空欄でOKです。
  8. 01

    01

  9. 最後に、ビルド後の処理に PHPMD を追加します。「ビルド後の処理」の「ビルド後の処理の追加▼」をクリックして追加する処理の一覧を表示し、その中から「PMD警告の集計」を選択します。「集計するファイル」については空欄でOKです。
  10. 01

    01

ここまで設定が完了したら「保存」をクリックして設定を保存します。

さて、次はビルドファイルの作成と設置ですが、置き場であるワークスペースを作成する必要があるので、「ビルド実行」をクリックして一度ビルドを実行します。

01

この時点でのビルドは失敗しますが OK です。

01

次はビルドファイルの作成と設置です。こちらは Jenkins を実行しているサーバにログインして作業を行います。

Jenkins のプロジェクト関連ファイルの置き場は /var/lib/jenkins/jobs/ とします。

上記のビルドで /var/lib/jenkins/jobs/<プロジェクト名>/workspace/ というディレクトリが作成されているはずなので、そのディレクトリに以下の内容のファイルを build.xml として設置して下さい。なお、①「project name=」に記載するプロジェクト名、②「fileset dir=」に設定するディレクトリパス、③「include name=」、「exclude name=」に記載するチェック対象プログラム、検査から除外するプログラムについては適宜変更して下さい。

ちなみに今回のルールセットは unusedcode のみにしています。他にも codesize、design、naming なども指定できますが (詳しくは 前回記事 参照) 、今回の目的では unusedcode で十分なので敢えてそれだけにしています。

<?xml version="1.0" encoding="utf-8" ?>
<project name= "Product-PHPMD-UnUsedCodeCheck" basedir= "." default= "main">

    <target name="main" depends="phpmd"></target>

    <!-- PHPMD -->
    <target name="phpmd" >
         <phpmd rulesets= "unusedcode" >
             <fileset dir= "/var/lib/jenkins/jobs/Product-PHPMD-UnUsedCodeCheck/workspace/include/product/" >
                 <include name= "**/*.php" />
                 <exclude name= "**/*Test.php" />
             </fileset>
             <formatter type= "xml" outfile= "reports/pmd.xml"/>
         </phpmd>
    </target>
</project>

上記の build.xml ではレポートファイルの置き場所を reports ディレクトリとしているため、そのディレクトリを作成しておく必要があります。

$ mkdir /var/lib/jenkins/jobs/Product-PHPMD-UnUsedCodeCheck/workspace/reports/

設定は以上です。では、改めてビルドを実行してみましょう。

01

ビルド履歴にビルドの進捗がゲージで表示されます。このゲージをクリックするとビルド中なら進捗状況が、ビルド後 (失敗) であればどこで止まったかを参照できます。

01

実行後、ビルド履歴のビルド日時をクリックすると以下のように表示されます。これで未使用コードの一覧を参照することができます。リンクを手繰るとどのファイルにどの程度の未使用コードがあるか、実際にコードのどの部分かを追っていくことができます (その画面は後述の「普段の運用」の部分でお見せしますね)。

01

このように 1 度目のビルドでは未使用のコードについて網羅的に検出を行ってくれます。その後のビルドでは、前回ビルドとの差 (新しく出てきたもの、修正されたもの) についての情報も表示してくれます。

01

 

普段の運用

私の場合、1 度目の結果をざっと確認した後の 2 度目以降の確認では新しい警告についてのみ確認を行い、未定義変数などが無いかをチェックしています。今の運用では未使用コードをゼロにすることが目的ではなく、変更が加わった部分に未定義変数など問題があるコードがないかを早期に発見することが目的なので、毎日のチェックの流れは以下のようにしています。

  1. 早朝に Jenkins 側で自動ビルドとレポートの作成 (上記設定で自動化)
  2. 出社後にビルド結果のレポートを確認 (主に新しい警告の有無)
  3. 01

  4. 新しい警告が出ている場合はコードをチェック
    • 上記画面の「XXX 個の新しい警告」をクリックすると、警告が生じたプログラムの一覧が表示されます。
    • 01

    • 更にそのプログラムをクリックすると、実際に未使用コードが検出された場所をハイライト表示してくれます。
    • 01

  5. 未定義変数など問題があるコードを見つけたら開発チームに共有

こんな感じで日々のコードチェックを効率化しています。だいぶいい感じでチェックできてますが、もっと効率が良い方法あれば是非教えて下さい!

参考サイトやオススメ本

参考サイト: PHPMD(PHP Mess Detector)をjenkinsで利用してみる

オススメ本: 「Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術」

Tags: , , ,

s-24

もうすっかり暑くなりましたが、1日中半袖でいることができない男、s-24です。(改名しました!)
ずっと見てきた海外ドラマ、CSI-NYがシーズン9で終了してしまい残念すぎます。
マイアミも終わってしまったので、とってもさみしいです。。
そのかわり、24が復活するらしいですが、今更ジャックについていけるか心配で寝れません!

さて、今回は PHPMD – PHP Mess Detector についてです。PHPMD は PHP のコードの中から、コードレベルでバグになりそうな箇所を検出してくれるツールです。早めにバグを発見するために導入してみました。

インストールは簡単です。CentOS であれば root 権限で以下を実行していけば OK!

# yum -y install php-pear
 
# pear channel-discover pear.pdepend.org
# pear install pdepend/PHP_Depend-beta
 
# pear channel-discover pear.phpmd.org
# pear install --alldeps phpmd/PHP_PMD-alpha

これでインストールできます。

実行コマンドはこのように。

# phpmd [ファイル名] [レポート形式] [ルール]

ファイル名は解析したいファイル名、レポートは出力したいファイル名で、text と xml で出力できるみたいです。ルールは5つあるようですが、今回は unusedcode をセットしてみました。これは使われていないコードを検出してくれます。クラス内で定義はされてるけど参照されてない変数、パラメータなどを抽出してくれます。typo とかこれで発見できるかなあと思って導入しています。ちなみにその他のルールはこんな感じです。

  • controversial: キャメルケースなどを検出する
  • codesize: コードサイズ関連部分を検出する
  • design: 設計の問題を検出する
  • naming: 名前が短い、長い箇所を検出する

実際に実行してみるとこんな感じになります。

$ phpmd hogehoge.php text unusedcode
 
hogehoge.php:1225 Avoid unused local variables such as '$session'.
hogehoge.php:1674 Avoid unused parameters such as '$html'.
                  :
                  : (こんな感じでずらずらと…)

うん。かなり出てきました!コードをじっくり確認しないと発見できないような部分も発見!

これを開発側に投げて、確認して修正して貰うようにしています。これでもう少し早くバグが見つかると思います!

初回は全部1つずつ確認しましたが、問題ない部分はルールのカスタマイズをしたりすれば検出されなくなるらしいです。自分はルールのカスタマイズをするのが面倒だったので、確認した次の日からは新規に検出された部分だけ確認するようにしています。また、このチェックは日次で自動化して実行しないと手間かかっちゃいますので、自分は Jenkins にプロジェクトを作成して実行させるようにしています。

この ①PHPMD の Jenkins へ導入、②新規に検出された部分だけ確認するような運用方法については次回の投稿で紹介します!

参考サイト: CentOS6.3で静的解析ツールPHPMDを動かしてみる(PHP用)

Tags: , ,

s-24

Tricorn品質管理チームテスト手法

Posted Date: 2010-04-27 10:25
Author: / No Comments

先週の土日にバスケ合宿に行ったのですが、背の順で並んだら前から4番目だったことにショックを受けたt.sayamaです。筋トレしているのですが、体重が減る一方で体の悩みが多すぎる今日この頃です。

今回は、Tricorn品質管理チームテスト手法をご紹介したいと思います。

限られた時間で要領よくテストを行うことを日々の目標としております。

KREISELは定期的に機能追加があり、その都度テストが発生します。

開発が終わってからのテストでは間に合わないので、Tricorn品質管理チームでは開発期間からのテストを試みています。 続きを見る >>>