Happy Testing Perl
第5回 継続的テスト
継続的なテストの重要性について
松野です。こんにちは。
今回は継続的なテストという話題についてお話したいと思います。本稿では,少人数のチームによるWebサイト開発というケースにフォーカスして論じていきます。
本稿で取り上げる継続的テストとは,端的にいえば「自動でテストを定時実行させる」ということです。 make testするのをうっかり忘れたりしていませんか? テストを動かすのを面倒がってテスト動かさずにコミットしていませんか? そして,そのままデプロイしたりしていませんか?
割れ窓理論というのがあります。これは「建物の窓が壊れているのを放置すると,誰も注意を払っていないという象徴になり,やがて他の窓もまもなくすべて壊される」(引用:Wikipedia)という理論です。
これは,テストスィーツにも言えることです。1つのテストがこけていると,make testする気力が失せます。あるいはテストがこけているようなテストスィーツでは,テストをあらたに書いたとしてもすぐに全部のテストが通る状態にならないので,新しいテストを書く気力も失われます。そういうことにならないようにするためには,やはり継続的なテストが欠かせません。 人間は怠惰な生き物ですから,テストを動かすのを億劫がります。ましてや,それが人間の中でも一際怠惰なPerl Mongerという生き物に至ってはいうまでもありません。
チームによる開発においては,1人でもテストを動かさない人がいると,他の人がケツを拭くはめになります。ぜひ自動でやるようにしましょう。
継続的なテストを行う方法
Perlの世界では継続的なテストを支援するツールがいくつかありますので,紹介します。
- cron
- 最もシンプルな方法はcronで定時にmake testするように設定するという方法でしょう。cronのMAILTOを適切なMLに向けておくだけでOKです。Subversionを利用している場合には,hookを使ってmake testを自動で行うのも良いでしょう。
- 重要なのは「commitする人がmake testを自分で手動で実行しなくても自動で実行される仕組みを構築する」というところにあります。
- trunk1本でbranchがないようなプロジェクトの場合にはこれで十分でしょう。実際弊社でもcron+αで運用しています。
- buildbot
- buildbotは,Pythonで書かれた継続的テストのためのソフトウェアです。IRCとの連携などもあって,使いやすいのではないかと思います。筆者は試したことはないです。
- 図のように,綺麗なWebページも表示できます。
- Pythonで書かれてはいますが,Perlにも対応しているので容易に試すことができます。綺麗な画面が必要な場合には,buildbotを採用するのも1つの選択肢になってくると思います。
- Perlでのbuildbotの使い方は,id:dannさんの日記が詳しいですので,そちらをご欄ください。
- Test::Chimps
- Test::Chimpsというツールは,継続的テストサーバとそのクライアントを提供します。Plaggerの継続的テストで採用されていたので,ご存知の方も多いでしょう。Perlで書かれているのですが,依存モジュールが多いのと,インストールが面倒なのでオススメしません。
- そもそも,Test::Chimpsの最新バージョンはテストすら通りません。もし気が向いた方がいらっしゃいましたら,直してください。
モバイルファクトリーでの継続的なテスト
弊社ではYappo氏が開発したClass::Componentを使い,Test Toolsという名前のPluggableな継続テスト環境構築用ソフトウェアを開発し,運用しています(弊社業務に密結合しているため公開されていません)。
社内に配置した継続的テスト用サーバにて,常時ガリガリとテストを動かしています。テストがこけると携帯電話にメールで通知されるようになっているので,テストがこわれるとすぐに気付くようになっています。
もう1つの継続的テスト
継続的なテストという言葉には他にも定義があって,それはgugodさんのTest::Continuousというモジュールでいうところの継続的テストです。 これは,「開発時にプログラムが変更されたタイミングでテストを走らせること」を指す言葉です。本稿で扱っている継続的テストとはまったく関係がありませんが,混乱する方がいらっしゃるといけませんので,念のため補足しておきます。
まとめ
今回は継続的なテストについて解説いたしました。テストを走らせるのが億劫な貴方も,これで安心ですね。
Happy Continuous Testing!


