テストコードから実装を検索

先日matz日記からトラックバックを貰って*1しまった。matzはいったいどこからこの日記に辿りついたのだろう。TypingRuby経由?
まあ、そんなわけで、びびりまくっているわけだが、すこし気を良くしたことも確かなので、今度は妄想話を書いてしまおう。

最近は、やれXPだ、やれテストファーストだ、とテストコードを書くのが流行りのようで、自分でもちろっとテストファーストしてみると確かに具合はよい。テストに合格するのが、目にみえる明らかな基準になるので、実装を書きかえるときにも大胆にやりやすいし、テストコードは使い方のサンプルそのものなので、自動的にドキュメント相当ができるともいえる。
でも、コーディング量が少ないにこしたことはない。テストコードを書くと、実装だけを書く時と比較して、当然テストコードの分だけ余計なコーディング量は増えてる。だからといって、コーディング量を減らすためにテストコードを削るのは進歩がないので、実装コードを削れないかと考えてみた。
テストコードにProbe Object(id:sshi:20050223#p2)を通してみると、テストしているオブジェクト、つまり実装すべきオブジェクトが持つべきメソッドはまずわかる。別にProbe Objectじゃなくても、ちょっとなにか仕掛けすればわかりそう。さらに、テストコードが書いてあるんだから、具体的な戻り値の条件も抽出できる(はず)。
それらの情報を元に、実装クラスをどこからか検索してくることはできないだろうか?
どこかにライブラリプール、というかクラスデータベースを用意して、Duck Typing的に同じ型のクラスを検索して、あとは問答無用でテストに通してみる。合格したらめっけもの、あなたはテストコードを書くだけで望みの実装を手にいれることができるわけだ。
合格しなくても、同じTypeを持つクラスのソースは何かと参考になるに違いない。ちょっとの改造で使えるものになるかもしれない。
まあ、実際にどこかの人のコードを手元で走らせちゃうわけだから、なんらかのサンドボックスは絶対に必要だし、いったいいくつくらいクラスが蓄えられてたら上手く動作するようになるのかもよくわからない。
でも、上手くいけばテストコード、つまり自分が求める仕様を(テストとして)書くだけで実際に動作するコードが手にはいる世の中になりますよ。ひとつ、どうですか?
rubyだと野良ライブラリがばんばん生産されているような気がするので、そういうコードも共有しちゃえば、もしかすると結構検索にヒットしてくれるんじゃないかな、、だといいな、、そうならないかな…


ちなみに、この妄想は「ハッカーと画家」の「百年の言語」あたりに影響されました。言語設計の話じゃなくなってるけど。

*1:なぜかここには表示されてないけど、はてなからはトラックバック通知のメールが来た。謎だ