人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

おせわになります。
CGI でのテスト駆動開発についての質問です。

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

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

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

●質問者: 大蘇 蓮風
●カテゴリ:インターネット ウェブ制作
✍キーワード:CGI dB Perl PHP xUnit
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● OTTii
●50ポイント

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

紹介ページ:

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

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

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

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

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

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

◎質問者からの返答

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

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


2 ● b-wind
●45ポイント

Test::WWW::Mechanize とかどうですか?

Test::WWW::Mechanize - Testing-specific WWW::Mechanize subclass - search.cpan.org

nDiki: Test::WWW::Mechanize - Test::WWW::Mechanize で Web アプリケーションをテ... (2006-09-13)

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ