私はテスト・ファーストが嫌いだ。

 君はテスト・ファーストを知っているか? 知らないなら簡単に説明しておこう。テスト・ファーストというのは,XP(エクストリーム・プログラミング[用語解説] )というソフトウエア開発手法で紹介されている実践項目(プラクティス)だ。プログラムを作る前にテストを作れ,と説く。

 テスト・ファーストで言うテストは,ソフトウエア全体のテストではないんだ。ソフトウエアを構成する単体プログラムのテスト,すなわち「単体(ユニット)テスト」を意味する。これまでテストと言えば,ソフトウエアがある程度完成してからのテストがメインで,テスト担当者(テスター)が行う作業,という意味合いが強かっただろう?

 しかしテスト・ファーストでは,単体テストをテストの中心に置くんだ。

 まず最初にテスト・プログラムを作る。それもテスターではなく,プログラマ自らが作る。それからテスト・プログラムが成功するように(テストがパスするように)単体プログラムをコーディングする。最後にテストを実行して正しくコーディングできたかどうかを確認する。以上でワン・セットだ。後は,この一連の作業を何度も繰り返し,徐々に全体のプログラムを作っていく。これを,テスト駆動開発(test-driven development)と言うのだそうだ。

 どうだろう。面倒だと思わないか? 私なんか説明するだけで疲れてしまった。

 ところが驚くべきことに,最近テスト・ファースト信者というものが(少しずつだが)増えているらしいんだ。彼らは,一度でもテスト・ファーストを実行すれば,病み付きになるという。どんなにテスト・ファーストが面倒そうに見えても,彼らは次のようなメリットがそれを上回ると主張する。

・事前にテストの設計を行うので,自分がどんなプログラムを作るべきかがよく分かる
 やめてくれ。どんなプログラムを作るべきか分からないから,プログラミングは楽しいのだ。そのだいご味を奪うな。

・単体テストを頻繁に繰り返すことで早期にバグが見つかる
 何を言っているんだ。誰もが自分のプログラムの中にバグがないことを願っているのだ。バグなんて見つからないほうがいい。余計な仕事が増えるだけだから。

・早期に問題が解決することで,後工程からの手戻りが減って開発スケジュールが円滑に進む
 おいおい,手戻りが減ったら開発が予定より早く終わっちゃうかもしれないじゃないか。人月計算でやっている限り,少しでも開発期間を延長して開発費をいただかないと赤字になるぞ。それに,開発途中の品質の低さが,ハラハラドキドキしてたまらないのに。

・テスト・プログラムを先に作っておけば,本体のプログラムを変更(リファクタリング)しやすい
 リファクタリングだって? なんでわざわざ動くプログラムを修正する必要があるんだ。動いてるものには触るな,と習わなかったのか? プログラムなんて動けばいい。中身がスパゲッティでも構わない。メンテナンス? どうせそのプログラムを修正するのは私じゃないさ。

・テスト・ファーストを行えば,品質に対する安心感とテストをパスする達成感が得られる
 安心? 達成感? 何を寝ぼけたことを言っている。劣悪な環境で不安を抱えながら仕事をするのがソフトウエア開発じゃないか。私なんかもう1週間も家に帰っていないぞ。いつもニコニコしてプログラミングするような奴と一緒に仕事をするのは願い下げだ。

 どうだろう。分かっただろ? テスト・ファーストが流行ったら,従来のやり方はすっかり変わってしまうかもしれないんだ。冗談じゃない。今さら新しいことをやるのはゴメンだ。今のままが一番。君もそう思うだろ?

(真島 馨=日経ソフトウエア編集)