「テストしやすい」ことが、良い設計(EoT=Ease of Testing)
»
良い設計とはなにか、と問われて、凝集度と結合度に関する議論を思いつく人も多いだろう。しかし、この定義によりもっと具体性がある設計方針として、テストを考える。テストの視点によってオブジェクト指向を再定義したい。キーワードは、Eon(Ease of Testing)、テスト容易性だ。
ぼくは、
EoT(*1)の高い設計が、よいオブジェクト指向設計である。
と主張する。設計品質の中で「テスト容易性(EoT)」を最上位と見るのだ。オブジェクト指向のさまざまな機構、用語、考え方は、すべて EoT のため、と捕らえられる。例えば、
- 継承という言語機構は、Mockを作るためのもの
- 実装ではなくインターフェイスに対してプログラミングするのは、テストしやすくするため
- よいモジュール分割とは、テストしやすいモジュール分割である
- 循環依存性を排除するのは EoT のため
- DI(Dependency Injection)は、EoTのためのツール
ちょっと本末転倒に感じられるかもしれない。しかし、他の業界ではテスト容易性をもっと重視している例が多い。例えば、コンピュータのハードウェアは「テストが可能な設計」になっていることが普通だ。テスト用のジャンパーは設計に折り込み済みだし、メモリにはパターンの記録とチェックができる機能がある。
写真は、テレビ局が流す、朝の「テストパターン」。これは、テストが織り込まれたシステムデザインの例だ。テレビプログラムは、最初からテレビの受像機をテストする、という機能を折り込み済みなのである。テストが、最終的な顧客価値の検証になるのだから、テストができない設計など、意味がないのではないか。
他にも、ソフトウェア以外でテストを「折り込み済み」の設計を見つけたらぜひ教えて欲しい。
[1] EoT: Ease of Testing、テスト容易性。Testability に替わる平鍋の造語
(参考) アジャイル開発の奥義
SpecialPR