タグ

ブックマーク / www.ryuzee.com (48)

  • Hudson+phpcpdで継続的に重複コードをチェックする

    Hudson等を使った継続的インテグレーションでは、テストの自動実行の他にも、ドキュメントの自動作成、コーディング規約の自動チェック、重複コードのチェック(DRY原則のチェック)等を行うことができるし、実行するべきである。 今回は、PHP+Hudsonの環境でコードの重複を継続的にチェックできるようにしてみた。 phpcpdPHPでコードの重複を検査するには、phpcpdというツールを使うのが定番である。 phpcpdはpearコマンドでインストール可能だ。 なお、phpcpdを利用するためには、pearが1.9.1以上である必要がある。 インストール手順 pear upgrade pear pear channel-discover pear.phpunit.de pear channel-discover components.ez.no pear install phpunit/ph

    Hudson+phpcpdで継続的に重複コードをチェックする
  • PHPでもHudson使うべし

    今までもPHP案件でCIはしているんだけど、環境にはCruiseControl+phpUnderControlという構成で、これももう古いなぁと思ったのでHudsonに移行してみた。 感触としては、PHP案件でもHudson使うべし、でいいんじゃないかな。 導入 今回導入した環境はCentOS5.3なので、rpmを使ってインストールできる。 sudo rpm --import http://hudson-ci.org/redhat/hudson-ci.org.key wget http://hudson-ci.org/latest/redhat/hudson.rpm rpm -Uvh hudson.rpm なお、当然のことだが、Hudsonを動作させるためにはJDKのインストールが必要なので、先にインストールしておく。 インストールが完了したら自動起動の設定をして、起動する。 /sbin/

    PHPでもHudson使うべし
  • 自動テストのfixtureを効率的に管理する方法

    みなさんこんにちは。@ryuzeeです。 僕がやっている案件(PHP)はもともとテストコードのないレガシーなプロジェクトで、それを改善するためにずっと動作を確認するための結合レベルの自動テストを増やしてきました。 そんな中で、僕のところではどうやってテスト用のfixtureを管理しているか事例として紹介したいと思います。 最初にコアとなるfixtureを用意するみんながたくさんテストを作る前にコアとなるテスト用のfixtureは用意しておきます。 さもないと、みんなが好き勝手にfixtureを作ってしまい、あっという間に混乱に陥ります。 プログラム体と同様に、DRYの原則で、同じようなテストデータを繰り返し作ってしまうようなことは避けるべきです。 最悪なパターンは、開発機や番機のデータを引っこ抜いてきて、それをそのままテストデータとしてごっそり使う方法です。 流石に居ないと思いたいです

    自動テストのfixtureを効率的に管理する方法
  • cakephp Schemaを使って初期データも突っ込む方法

    cakephpではSchema機能を使ってテーブルを作成することが出来る。 で、ついでにマスター系データもまとめて登録する方法が【CakePHP】お手軽便利なCakeSchemaに載っている。 ただ載っている方法には若干問題がある。 そもそもcakephpでは、テーブルを使わないモデルでは$useTable=falseに設定しないといけなくて、それ以外の場合は、モデルへのアクセス時にテーブルが存在しないとエラーが発生する。 従って、初期データを保存するためのモデルがアソシエーションが設定されているモデルだと、関連モデルのテーブルがまだ作成されていない場合にアクセスすると、その時点でエラーになってしまう。作成する順番だけを変えれば良いケースもあるだろうけど、相互参照しているようなモデルでは無理。 つまり、アソシエーションがある場合は先にテーブルを生成しなければならず、schema.phpのa

    cakephp Schemaを使って初期データも突っ込む方法
  • CakePHP RailsのようなMigrationを行う方法

    CakePHP標準だとRailsのような差分情報を含めたスキーマの管理ができず、不特定多数に配布するアプリケーションでの更新が困難だったり、開発現場でも人によってスキーマが異なってしまったり、といった問題が起こりやすかった。 このような問題を解決するのがCakePHP Migrations Pluginだ。 CakePHP Migrations Pluginは、CakeDCがMITライセンスで配布するオープンソースのCakePHPのプラグインで、これを利用するとRailsのMigrationと同じことが出来る! 詳細については http://cakedc.com/downloads/view/cakephp_migrations_plugin 入手は最新版をgithubから。 http://github.com/CakeDC/Migrations なお、動作検証はCakePHP1.3で行っ

    CakePHP RailsのようなMigrationを行う方法
  • CakePHP 一括でカバレージを取得する方法!!

    7/8にcoverage_reporter.phpの修正について若干追記 前提 XAMPP1.6.6 CakePHP1.2 環境準備 SimpleTestの開発レポジトリにあるカバレージ測定ツールを使う。 標準のアーカイブには含まれていないので、svnから取得する。 svn co https://simpletest.svn.sourceforge.net/svnroot/simpletest/simpletest/trunk 取得したモジュールを適当な場所に配置する。今回はC:/dev/simpletestに配置した。 次に、php.iniを修正する。 上記で取得したモジュールの中にある、extensions/coverageをincludepathに追加する。 autoprepend_fileにautocoverage.phpを指定する ※この設定が難しければPHPのコマンドラインパラ

    CakePHP 一括でカバレージを取得する方法!!
  • CakePHPでコードカバレージを測定する

    タイトルに深い意味は無いんだけど、CakePHPSimpleTestでコードカバレージを真面目に取得してみたので、そのメモとか。 使っている環境 XAMPP1.7.0 PHP5.2.8 MySQL 5.1.30 Apache 2.2.10 Xdebugの入手 このバージョンのXAMPPに含まれているXdebug2.0.3ではカバレージが取得できず、Apacheごと死んでしまう問題があるので、Xdebug2.0.0を利用する。 http://www.xdebug.org/download.phpにアクセスして、環境にあったモジュールを取得する。 僕の環境の場合は、XAMPPのPHP5.2.8だから、図の赤枠で囲んだリンクをクリックしてファイルを保存する。 phpxdebug-2.0.0-5.2.2.dllをphpxdebug.dllにリネームしてphp\ext\の中に上書き保存する。 Xd

    CakePHPでコードカバレージを測定する
  • CakePHPでユニットテストする際に気をつけること

    今やっている案件ではCakePHPを使ったアジャイル開発で、当然テストも自動化している。 テストの自動化を徹底的にやったので楽なんだけど、次回の案件のためにどういう観点でテストを組んでおくと良いか、またどこに嵌りがあるかメモとして残しておく。 CakePHPに限らない話 テストしやすい実装にする。例えばメソッドに複数の異なる役割を持たせない。引数と戻り値が明確。適切な行数など MVCの複数レイヤーにまたがる処理を書かない。例えばコントローラの中でSQLじゃぶじゃぶ投げたり、バリデーションチェックをぐちゃぐちゃやったりしない 自動でテスト実行できる仕掛け作り。例えばPHPならphpUnderControl。JAVAならCruiseControlとかHudson。 基に返って、テストを先に書くという意識付け テストがいっぱいありすぎたら今度はテストのリファクタリング。似たようなテストがコピペ

    CakePHPでユニットテストする際に気をつけること