おせわになります。

CGI でのテスト駆動開発についての質問です。

現在、Perl や PHP での DB にアクセスする CGI 開発に従事しています。しかし、機能追加や仕様変更のたびにエンバグしてしまうことがあるのです。こんなときに早期に対処できるよう、テスト駆動開発を導入したいと思っています。改修ごとに自動で単体テストを実行してエンバグしていないかチェックしたいのです。

CGI の内部の処理は関数化してやることによってある程度 xUnit のような単体テストに対応させることができますが、CGI 全体にわたって、各イヴェントごとに単体テストをする手法が思いつきません。

どなたか良いお知恵や経験をお持ちの方はいらっしゃらないでしょうか? ポイントは傾斜配分させていただくことになるかと思います。ぜひ宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/03/01 00:09:57
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:OTTii No.1

回答回数28ベストアンサー獲得回数4

ポイント50pt

単体テストとは少し違いますが、テストの自動化としてSeleniumをお勧めします。

紹介ページ:

http://journal.mycom.co.jp/articles/2006/09/29/selenium/

というのも、単体テストをキチッとやるためには各層の抽象化が必須ですが、Perl や PHPではそのあたりが難しいと私は思っているからです。

各層の抽象化ってなんのことかと言うと、例えばDBを使っているスクリプトの単体テストをするためにはDBを使わずにやるのが便利ですよね?

でないともし不具合が出たときに当のスクリプトが悪いのかDBのデータが悪いのか区別がつきません。

そのためにもデータの状態が一定のニセのDBをテスト対象のスクリプトに使わせればよいのですが、ニセのDBを使うために一々スクリプトを編集するわけにもいけません。(戻し忘れたりすると悲惨です。)

ということで、あらかじめDBをスクリプトから直接使わないようにDB関連の関数に一枚、皮をかぶせて(これを抽象化といっています)テスト対象のスクリプトに気づかれないように(要は編集なしで)こっそりと皮の向こうのDBをニセのDBにすりかえられるようにしておくといいのですが、PerlやPHPでは難しいんじゃないかなという事です。

id:renpoo

アドヴァイス、ありがとうございます。

なるほど、抽象レイヤーをかませてから DB にアクセスしてやるのなら、テストの実行が楽になりますよね。現在、会社ではインハウスの DB ライブラリを使っているのですが、ここで工夫すれば Perl や PHP でもラッピングできそうです。

2007/02/24 04:46:42
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

id:renpoo

これは大変便利そうなものを教えていただきました。ぜひ導入を検討したいところです。

2007/02/24 04:48:54
  • id:b-wind
    > PerlやPHPでは難しいんじゃないかなという事です。
    PHP はともかく Perl はそういうの得意だよ。
  • id:renpoo
    大蘇 蓮風 2007/03/01 00:23:18
    お二方ともありがとうございます。
    事情があって、サーヴァーに無闇にインストールすることができず、かといって個人環境にインストールすることも難しく、一部のものしか実際に試せていません。

    しかし Selenium IDE はかなりこちらの要求に見合ったものでした。JavaScript で作られた GUI へのアクセスが記録できませんでしたが、それでも一連のテストのうち、多くの部分を自動化できます。現在、クライアント別カスタマイズやエンジン本体の改修に伴うアップデートで、リグレッション・テストをする頻度が多く困っていたところですが、おかげで楽ができそうです。

    Test::WWW::Mechanize についても環境が整い次第使ってみたいと思います。

    日々勉強です。TDDに移行して、もっと効率的に開発できるようがんばります。ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません