渋川です。
ちょっぴり変則的なテスト駆動開発をしてみました。今回行ってみた実験の前提
条件は以下の2つです。
○移植である。
○エミュレーション層を作るという移植なので、アルゴリズム自体を考えたり
という作業は皆無。コードは複雑ではない。
○作る対象を使ったチュートリアル、サンプルコードが手に入る
今回はワンステップですべてのテストが行われるようにはしていません。ビルド
作業も実行もコマンドライン1行、あるいはキーボードでキーを2つ押すだけで
できてしまうぐらい規模の小さいものなので、凝ったことはしていません。
気付いた点は以下の通りです。
○ステップアップ式の簡単なチュートリアルがあると考えやすい。
○チュートリアルのサンプルコードの結果が書いてあると分かりやすい。
○C++での実験ですが、FreeBSDに含まれていたヘッダファイルがシンプルで
余計な依存性がないので、流用することですごい手間の節約になった。
ヘッダファイル自身に加えた変更は20行もないはず。Cでは宣言と実装
が必要だが、実装に専念できたのは楽だった。
○Cでのpimplイディオムの便利さを実感した。
○サンプルコードが触れていない細かい部分の実装がおろそかになる。YAGNI
のことを考慮に入れると、サンプルコードで触れていない部分は実装しなく
てもいいかも。
○手に入るチュートリアル、サンプルの質に左右される。
○サンプルコードさえ見ていれば、移植元のコードを読む必要はない。今回は。
○大規模開発をするとなるとやはりユニットテストと統合できると良いかも。
ちなみに作ったモノはこんなものです。
http://www.shibu.jp/wiki/PthreadForBeOS
こうしてみると、どのようなサンプルコードを書けばありがたいのか、というの
がちょっと理解できました。
以上から考えると、サンプルコードも、ドメインの理解ということも含めて、使
いようによってはかなり便利なので、通常のユニットテスト以外に、チュートリ
アル的サンプルコードの作成をうまく開発プロセスに含ませられないかなぁ、と
思いました。テストコードというのは開発をしていくステップに従って積み立て
ていきますが、チュートリアルというのは読む人の理解に合わせてレベルを上げ
ていきます。もちろん、チュートリアルの方は自然言語での説明も多分に必要に
なると思います。
XPでよく言われる「ドキュメント問題」ですが、コードを効率よく理解するため
の最小のドキュメントには何が必要か、というのはあまり議論されていない気が
します(気のせい?)。ユニットテストはドキュメントとしての価値は大だと思
いますが、概要を説明する、という役割まで持たせるのはやや荷が重いかな、と
思います。今回のようなライブラリ系の開発であれば、概要説明のためのドキュ
メントとしてのチュートリアルはかなり有効だと思います。
いつどこでだれがどのようにしてチュートリアルを書けば効率が良いのか、とい
うことに関してはまだ何も考えていませんが、例え通常のユニットテストと同じ
くTestCaseクラスを継承してその中に書くとしても、役割の違いをうまく活用し
ていける方法をちょっと考えてみようかな、と思います。
-----
東京工業大学 電気電子工学科
_/_/_/ しぶかわよしき JA6HFA/1 yoshiki@....jp
_/ http://www.shibu.jp http://www.unittest.org