TDDとソフトウェア開発のエコシステム

プログラムってかわいそうだと思った*1

ある日プログラマによって書かれシステムや製品の一部になるけど、引き継いだ保守担当者になにこのう×こコードなんて言われたりする。思えば生まれてこのかた、プログラマの勝手な好み(コーディングスタイルとか、設計とか)で書かれて、あるいはどこかからコピーされてきて、レビューやテストではあら捜しされて、そして直し方はアドホックだったりして、コメントは嘘ばっかりとか、重複だらけのスパゲティとか。

愛されてない。育まれていない。

ところで、レビューやインスペクションツールの適用によって品質を確保するという言いかたは、どこか冷たい響きがある気がする。プログラムはガラスケースのなかで生まれてきて、機械で計測され、薬剤を投与され、手術され、やがてある程度まで大きくなるとどこかへ連れ去られてしまうのか?

そこに、テスト駆動開発が光をさしかけた。プロダクトコードを、テストコードと共に育てていく、というモデル。テストクラスの内部クラスとしてプロダクトコードを書きはじめる、という手法を懸田さんが紹介されていた。僕はこの「インキュベーターパターン」が象徴的に好きだ。

今日ソフトウェアは継続的価値を提供していく。

プロダクトコードとテストコードを中心に、各種スクリプトやデーター、ビルドや課題管理や世代管理などのプロセスも含めて、生態系というべき世界が作られる。最初は小さくゼロ・フィーチャーから始める。要求という光が差し込み、世界は成長していく。やがて育ってきたプロダクトコードのコピーをこの世界から貰って、僕等はビジネスに用いる。

そんなモデル。

ところで、僕等はその世界の外側にいるのか?内側にいるのか?

*1:「TDDはコードに思い入れのある変わり者にも適している」ケント・ベックテスト駆動開発入門P197