プログラマが知るべき97のこと/テストは夜間と週末に
タイトルを見て「何を言っているんだ!」と怒った方がいるかもしれませんが、まあ落ち着いてください。私は何も、海外に開発を委託しろとか、週末や夜に出勤して働けとか、そういうことを言うつもりはありません。いま自分たちの持っているコンピュータのパワーをもっと有効に活かすことを考えるべきではと言いたいのです。素晴らしいコンピュータを手にしていながら、そのパワーを、プログラマである自分たちの仕事を楽にすることに十分活かせていないのではないでしょうか。もしかすると読者の中には、常にコンピュータのパワー不足を感じている、という人もいるかもしれません。ただ、それは平日の日中の話ではありませんか? そうだとして、では夜間や週末、テストサーバはどういう状態になっているでしょうか。夜間や週末にはテストサーバを動かしていないところも多いと思います。テストには是非、夜間や週末を利用すべきです。

 罪の意識は感じながらも、テストをすべて実行する前に変更をコミットしたことはありませんか?プログラマがテストスイートを実行したがらないのは、実行にどうしても長い時間がかかるからです。納期が近づき、ゆとりがなくなってくると、人間はどうしても細かいところで手を抜き始めます。大規模なテストスイートを2つ以上のプロファイルに分割する、というのも対策の1つでしょう。重要度の高い方のテストプロファイルを小さくし、短時間で実行できるようにすれば、コミット前に実行しやすくなります。そして、すべてのテストプロファイル(念のため、重要度の高いプロファイルも含めておく)を、夜間に自動的に実行できるようにしておくのです翌朝には、結果のレポートが見られます。
 製品の安定性をテストする機会が十分にない、ということも多いのではないでしょうか。メモリリークなど、安定性に関わる問題を検知するためには、長時間を要するテストの実行が必要になります。時間が必要な上に、リソースも占有してしまうことになるため、日中には滅多に実行できません。耐久テストは自動化して、夜間や週末に実行するようにするといいでしょう。週末には平日の夜間よりさらに長い時間が取れます。金曜日の午後6時から月曜日の午前6時までとすると、60時間あります。それだけの時間があれば、かなり価値のあるテストができるはずです。
 パフォーマンステストも、なかなか実施する時間の確保が難しいテストです。一方のチームはパフォーマンステストのために他の作業を控えたいと考えているのに、もう一方のチームは通常の作業を続行したい、ということで争いになることもよくあります。多くの場合、結局平日の日中にはうまく時間が確保できません。マシンがパフォーマンステストのできる状態にならないことも多いのです。しかし、実は、夜間や週末なら、パフォーマンステストのための環境が比較的簡単に整えられます。夜間や週末には、サーバやネットワークも平日の日中ほど活発には動かないからです。質の高いパフォーマンステストを行うためには理想の時間と言っていいでしょう。
 順列組み合わせを様々に変えてテストをする必要がある場合、あまりに煩雑で手作業では対応が難しいこともあるでしょう。たとえば、多数のプラットフォーム上で動かす製品をテストする場合などそうです。Linuxも、Solarisも、Windowsもそれぞれ32ビットと64ビットがありますが、そのすべてで動かす製品もあるでしょう。また同じOSでも、いくつものバージョンがあるので、それへの対応も必要です。さらに問題なのは、最近のアプリケーションには、多数のトランスポートメカニズム、プロトコル(HTIP、AMQP、SOAP、CORBA など)に対応するものが多いということです。OSやプロトコルなどを様々に変えたテストを手作業で実施しようとすれば、大変な時間を要します。しかもリソースの問題から、この種のテストの実施は、リリースの直前になってしまいがちです。そのタイミングだと、もし重大なバグが見つかっても、対策することは困難です。
夜間や週末に自動でテストをするようにすれば、順列組み合わせを変えたテストの実施回数を増やすことができます。それは、スクリプトの知識が少しあれば、さほど難しいことではないはずです。基本はcronを使ったスケジューリングです。多数提供されているテステイングツールも役立つでしょう。リソースを効率的に利用できるよう、サーバを複数の部署やチームにプールするサーバグリッドを構築している企業もあります。このサーバグリッドをうまく使えば、夜間と週末にテストをすることは十分に可能でしょう。