テストを実施する際には、どこまでするかでコストや品質などが大きく変わってくる。
しかし、もちろんシステム開発には納期や予算というものがあり、どれだけ時間やコストをかけてもいいものではありません。
では、どのテストを重視すれば、費用対効果がよいのでしょうか。
このようなことを前提にまとめてみました。
【テストピラミッド(提供:CoderPad)】
有名なマーティン・ファウラーさんのテストピラミッドである。
この図は、コストが上がるとテストのスピードが落ちる傾向があることを示しており、そのために多くの開発者がエンドツーエンド(E2E)テストを最小限に抑え、単体テストを最も行っています。
では、単体テストが一番重要なのでしょうか?
焦らずに次の情報をみてみましょう。
CoderPadは2022年3月29日(米国時間)、エンドツーエンドテスト、統合テスト、単体テスト、静的テストを比較し、統合テストの重要性を解説したブログ記事には、各テストにおいてのコストと品質における効果(信頼性)を数値として出しています。
テスト方法 | コスト | 信頼性 |
---|---|---|
単体テスト | 2 | 2 |
静的テスト | 2 | 2 |
統合テスト | 3 | 3 |
エンドツーエンド(E2E)テスト | 4 | 4 |
これを見る限りでは、単体テストと静的テスト、統合テスト、エンドツーエンド(E2E)テストの順で効果が高くなっています。
同時にコストも効果と同様に高くなっていますね。
こちらの情報から考えるとどうも単体テストが一番ではないようですね。
【テストトロフィー(提供:CoderPad)】
次は有名なKent C. Doddsさんのテストトロフィーである。
Kent C. Doddsさんいわく、
「一般的な考え方は、静的解析ツールと統合テストによって、かけたコストに対して素晴らしい価値が得られる。
そして単体テストとE2Eテストによって、良い価値が得られる。」
とのことです。
統合テストは、E2Eテストと同じようにユーザーの行動をテストできる。
そして統合テストは、特定のロジックの入力と出力をテストするだけの単体テストと比べて、テスト結果の信頼性が高く、素晴らしい価値が得られる。
Kent C. Doddsさんも、
「統合テストは、信頼性とスピード/コストを素晴らしく両立させている。
このため、大部分の労力をそこに費やすことが推奨される」
結論としては、費用対効果が一番高い『 統合テスト 』を一番重視することである。
テストフレームワークとしても、全体の一部として統合テストを重視するのが現在のトレンドでもあるほど統合テストが重視されている。
さらに品質を高めたいのであれば、4種類のテストを組み合わせて使用することを検討することをお勧めします。