ETP
ETPとはEasy Test Principleの略でテスト容易性の原則です。
バグがないプログラムのつくり方で提唱されています。
さて、テスト容易性(テストが簡単にできる)とはどういうことでしょうか?
1.テストをする際に特殊な環境が必要ない。
2.テストが繰り返し行える
3.テストコードが簡単である
の3つを満たしていれば、テスト容易性は保たれていると考えてよいでしょう。
まず、1ですが、これはDBやファイルに依存しないことが絶対条件となります。
これにより、特殊な環境下(Strutsなどもそうです)でないとテストができないという状況を打破できます。
欲をいえば、何も設定していなくとも、(javaが動くだけとかの最低限の実行環境)動作可能が望ましいですね。
次に2です。 これは1を満たせば、まず問題にならないでしょう。外部に依存していると、外的要因でテストが失敗することがあります。これはダメの典型です。
最後に3。どんなに上の条件を満たしていてもこれをクリアしていなければテスト容易性は保たれているとはいえないでしょう。
まず、テスト自体が複雑ではない事が絶対条件です。
複雑過ぎるテストはクラス分割を示唆していると考えた方が良いです。
次に、結果を簡単にvalidateできること。
私は最高に面倒なvalidateでもXML解析が限度だと考えています。
テスト容易性についてはこんなところで、
TDDについて少し。
TDDはテスト容易性を前提に実施されるべき技術です。
TDDの利点は大きく2つあると思っています。
まず、デグレを防ぐということ。安心してリファクタリングができるのはこの要因が大きいです。
2つ目は、ユーザの観点での設計が強要されること。
これにより、より洗練されたインターフェイスを簡単に作れます。
とは言うものの、IFを考えることは非常に難しいです。
支援する程度と考えるべきでしょう。
私が携わったプロジェクトで一定時間毎にデータのスナップショットをとり、それを元に処理をしていくという処理がありました。
TDDで作ることで、はじめから非常に良い設計指針ができます。
一定時間待つテストはどう考えても容易性には結び付きません。
そこで、収集部と処理部を完全に分離することにしました。
これにより、テストは簡単に。処理も簡単にできるようになりました。
こういうのがTDDの良いところですね。
TDD開発の入門書としてはGood
非常に読みやすいTDDの解説書