YAGNIとTDD

プログラム開発に以下の2つの単語があります。

1.YAGNI
「You Ain’t Gonna Need It 」の略で、意味は「機能は実際に必要となるまでは追加するな」ということです。
必要になるまで実装を遅延することで、無駄なリソース(工数・容量・速度など)を消費せずに済みます。

YAGNIは現実的な考えなので、この原則を守るようにしています。

2.TDD
「test-driven development」の略で、コードを実装する前に、ユニットテスト(プログラムをテストするためのプログラム)を作成し、
テストが成功するように実装をおこなうという手法です。

自分はTDDを以前は行っていたが、今はしていません。全てのコードに対して、ユニットテストを作成するコストや、ユニットテストの保守を行うコストが合わないからです。
理想的ではあるが、現実的では無かったです。但し、今でも社内ライブラリの作成時はTDDではないがユニットテストは書いています。

先日、あるかたのWEBサイトで、YAGNIとTDDが矛盾するという内容を見ました。そこには以下の文章が記載されてました。
「ユニットテストというのは変更に対してアジャイルに対応するために用意するものだ。その変更の必要がまだないうちから、すべてのコードに対してテストを用意するのはYAGNIの思想に反するのではないか。そのテストコードこそ You Ain’t Gonna Need It ではないのか。」
なるほど、その通り。

結局、YAGNIを守るとTDDが出来ません。

というか、職業プログラムとして限られた時間の中で成果を出そうとすると、理想主義では駄目で、
現実主義にならないといけないので、YAGNIな考えになり、TDDまで手が回らない。

コメントを残す