ユニットテストの無かった頃

今のプロジェクトは納期的に少々無茶です。次のリリースはα版という位置づけなので多少のバグバグーっも構わないというのもあってか、先日「ユニットテストをきっちり書くと時間がかかるから、ある程度そこらへん端折ってね」と言われました。

確かにユニットテストを作ると作らないでは、実装工程の工数が倍くらい違ってしまうものですが、そこは急がば回れといいますか。ユニットテストを作っておくとデバッグでほとんど苦労しないでスルスルっといけるし、修正でバグを出した瞬間にバグの存在に気がつくので「どれどれ?」と見るコードの量も大変少なくて楽ちんですし、かえって早く出来上がるのは間違いないところです。ユニットテストは品質の話だけでなくって、わたしにとってはすっかり開発効率の話なんですよね..。


さて、そんなこんなでユニットテストにすっかり馴染んでしまったわたしは、もうユニットテストを作らない開発がすっかり出来ない体になってしまいました。

こんな話をきっかけに「そういえばユニットテストをつくらない開発ってどうやってたんだっけ?」と考えても、するするっと出てこない。・・・と、年ですか!?いあいあ 単にずいぶん昔のことになってしまっただけで。うーんと、うーんと。

...そうでした、新人の頃「作ったら、一度すべてのコードをステップ実行してみろ」って教わりましたっけ。


* * *

まずは当時の情景。少々不足気味とはいえ、基本的には一人に一台の開発マシンはあって、OS は Windows で、GUIデバッガは当たり前でした(結構最近ですね..といいたい、最近年が微妙に気になるわたし)

で、その頃の実装の仕方は、チョコチョコっと一つの機能だけをコーディングして、コンパイル。でちょっとしたコーディングミスをコンパイラの指摘で直しつつ、コンパイルが通ったら、デバッガでステップ実行してみて、目論見どおりに動いていることを確認する。そうして、問題がないことを確認しつつ次の機能の実装に進む・・みたいな感じでした。

そんなスタイルを、あの当時の古参のエンジニアに「贅沢になったね」と言われまして、それであのころのわたしは「GUIデバッガ無しの開発なんて考えられないよ〜」と思っていました。──今では滅多にデバッガを機動しないのだから、そのスタイルの変化はちょっとおもしろいかも。


* * *


じゃあ デバッガとか自由に使えるマシンが無い場合の実装方法はどうだったかというと、わたしが組み込み屋さんで、プアな開発環境に出会うことが多かったからせいで、実はちょっとだけ経験があります。

組み込みの開発でも、普通は ICE(In-Circuit Emulator)とかを使って デバッガを使えるのですが、その時は書き換え回数の制限された マイコンをいくつかポンと渡されて、それで開発するという条件でした。「うーん、開発完了までにあと○○回の実行しかできない!」みたいな、だんだんと伸びる書き込み時間を見て、「やばい、コイツもそろそろ寿命ね..。あと残りは○個か」みたいな、そんな、ちょっと燃える環境です。

そうなので、コンパイルはともかく、とても「とりあえず書いたらデバッガで動かしてみる」みたいなリッチなことは出来ません。で、どうやってたかというと、コーディングした後、じっくりコードを読むのです。

読むといっても漫然によむのではなく、メモ用紙(変数の現在の値をメモリつつ追うため)片手に 紙に印刷したコードを一行一行人力でステップ実行してました。

あと、画面だと気がつかないミスもなぜだか印刷すると気がつきやすいのですよね。なんともある意味資源をリッチに使った開発でした。


* * *


わたしが知っているのはこれくらい。もっと前ですとか、もっと違う環境とかですと、どんなやり方をしてた(してる)んでしょうか。ちょっと興味津々です。

例えば、先のペーパーデバッキングも、最近マイブームな Unix本の 「UNIXという考え方」では、否定的に語られています。

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

ある日、私が厚さ5インチのパルプ加工品を抱え、よろよろと廊下を歩いていると、UNIXグルの上司が私を呼び止めて「そんなにたくさんの紙で何をやっているんだ」と尋ねてきた。私は、「私のプログラムです」と答え、どうです?一生懸命仕事をしてるでしょ、とイワンばかりに上司の顔の前にその紙束を突きつけた。
上司は顔をしかめた。

「データを紙に印刷してしまったら、もうそれ以上操作出来ないんだぞ」と上司は言った。紙に印刷されたデータは、並べ替えも、移動も、フィルタ処理も変形も、修正も出来ない。少なくとも、コンピュータ上でやるように簡単には出来ない。瞬時に取り出せるように、巨大なディスクファームにアーカイブ保存することも出来ない。キー一つで検索することも出来ない。保護したい機密情報なのに暗号化も出来ない。

紙には気をつけることだ。それはデータの死亡証明書といっていい。

なので、コーディング/デバッグの仕方は、時代的なだけでなく、文化的な背景でもいろいろ違うんだろうなー、とかとか。