E2Eテスト(インテグレーションテスト)の利点と不利点


開発におけるテストの重要さが問われている今、E2Eテストをどのように扱うべきかまとめてみようと思います。

E2Eテストとは?

E2E(End to End)Testと呼ばれるテストとは、単体テストとは違いシステム全体を実稼働時に近い状況で動かしつつテストする手法です。

例えばwebアプリでE2Eテストをする場合、実際にサーバー、ブラウザを立ち上げた状態でブラウザの操作をしながらテストをします。
Railsのようなwebフレームワークを使用している場合、テストの裏側で自動的にサーバーなどを起動してテストをしています。

利点

  • 実際の稼働に近い動きをテストできるため、単機能だけの途切れ途切れのテストではない
  • 表示されているボタンをクリックすると言った細かい挙動まで再現できる
  • ブラウザに表示されている文言などもチェックすることができる

不利点

  • 実際にサーバーやブラウザを起動するため、単機能のテストとは比べ物にならない時間がかかる
  • 細かいUIのテストを実装すると、ちょっとした文言の変更で異常なほど落ちる
  • テストに時間がかかるため、テスト駆動開発などをするときにまともな開発ができない
  • テストが通るのを長い時間待った後に、テストが落ちた後のやる気の削がれ方が凄い

E2Eの使い所

面倒だ! 重い! 壊れた!
とは言ってもどんなサービスにも、往々にして絶対に落ちて欲しくないシステム箇所は存在すると思います。

例えば重要な登録作業やそのサービスの根幹をなす、これが落ちてはこのサービスに意味は無い! 危ない!といったような部分にはE2Eの導入を検討しましょう。

そして導入の仕方にも様々なパターンがあります。
ボタンをクリックして正常に登録ができることを確かめるだけであったり。
正常にある値が表示されていることを確かめるであったり。

多くの検知パターンのテストがありますが、重要な部分はちゃんと検査でき、なおかつ無駄に検査しすぎて変更に弱いテストにしないことを気をつけましょう。

まとめ

結局テストは使い所です。
皆さんが良いテストライフをおくれることを願っております......。

Webアプリケーションのテストについて大まかに全体をまとめた記事を書きましたのでそちらもご覧ください。

他に参考になりそうな記事