E2Eテスト: 導入の必要性・何を導入するのか

はじめに

こんにちは、ラクマの@itinaoです。

E2Eテストについて、概要からお手軽に試す方法までを全5編で記載しています。

  1. E2Eテスト: 導入の必要性・何を導入するのか ← 今回はココ
  2. E2Eテスト: TestCafeを試す
  3. E2Eテスト: Github Actions上でTestCafeを試す(PCブラウザ編)
  4. E2Eテスト: Github Actions上でTestCafeを試す(モバイルブラウザ編)
  5. E2Eテスト: Selenium Gridを試す

真面目に導入すると、導入コストもかなり高く、複雑でハードルが高いです。

少しでも皆さんの参考になれば幸いです。

読書対象

  • E2Eテストというワードは知っているが、どんなものか知らない方
  • 技術刷新をしたいけど動作の確認コストが高い、、不安だ、、という方
  • 初めてプロジェクトにE2Eテストを取り入れようと考えている方
  • お手軽にE2Eテストを試してみたい方

E2Eテストとは

E2E(End to End)テストは、UI(User Interface)テストとも呼ばれ、システム全体を通してテストを行います。

Webサービスの場合は、ユーザと同じようにブラウザを操作し、挙動が期待通りになっているかを確認することができます。

特徴

下記のように、ユニットテストとは逆の特徴があります。

  • 自動化したテストでコードの振る舞いをシステム全体を通して確認できるようになる
  • 壊れやすく、メンテナンスが大変
  • 導入・運用コストが高い
  • 実行速度が遅い

よく語られるのが以下のようなピラミッドの図で、
上に行くほど、遅く・コストが高いと言われています。

メリット

  • 自動化したテストでコードの振る舞いをシステム全体を通して確認できるようになる
    • 機能改善やリファクタリングに対するハードルが下がる

デメリット

  • 壊れやすく、メンテナンスが大変
    • 細かいUIのテストを実装し、ちょっとした文言の変更等で落ちたりする
  • 導入・運用コストが高い
    • E2Eテストには様々な手法があり、どれを使うのか選定するのが大変
    • テスト用の環境を用意する必要があり、実行コストがかかる
      • ローカルでやる場合は別
    • 上記で挙げた壊れやすさ故、メンテナンスコストがかかる
  • 実行速度が遅い
    • 実際にサーバーやブラウザを起動するため、単機能のテストとは比べ物にならない時間がかかる
    • テストが通るのを長い時間待った後に、テストが落ちた場合はやる気が下がる…

E2Eテストのアンチパターン

Ice Cream Cones というアンチパターンで、
ユニットテストと比較して手動テストが大部分を占めると、コストが高くなります。

どこのチームが管理するのか

マイクロサービスだと、これらのテストの作成・保守は誰が担当するのか、という問題があります。
複数のサービスにまたがるので、E2Eテストを作成する責任を負う単一チームがいない状態です。

専属のテストチームがあるとベターです。

  • QA Tests
    • 手動テストを担当
  • DIT(Developer in Test) Tests
    • プロダクト・サービスの品質向上を目的としたエンジニアたち
    • 会社によって呼ばれ方が違うらしい
      • Google
        • SET: Software Engineer in Test
        • TE: Test Engineer
      • DeNA
        • SWET: Software Engineer in Test
          • Googleでいう、SET + TE
  • Developer Tests
    • 実装するエンジニアたち

E2Eテストを導入する

なぜ導入するのか

ラクマ(fril時代を含む)はリリースしてから8年以上経過しているプロダクトであり、いわゆるレガシーシステムです。

仕様や設計が複雑化しており、仕様を把握するのも、テストをするのも大変です。

現状はテストの自動化が行われていません。
個々のビジネスロジックに対するユニットテストはテストコード化されていますが、機能テストレベルのテストコードは存在していません。

そのような状況で、
大規模なリファクタリング・新しいアーキテクチャへの移行についても議論が常に行われています。

安心安全に移行していくのには、E2Eテストは必要なのでは。。
ということで導入に際して諸々調査を行いました。

E2Eツール選定

導入にあたってE2Eテストに詳しいメンバーもおらず、どのようなツールを使うかをまず検討しました。

選定する際に気にしたポイントは下記です。

  • 導入コストを低くしたい
    • 費用・セットアップ・学習コスト共に低くしたい
  • 対応ブラウザの種類
    • ブラウザのシェアを確認し、アクセス上位のブラウザは必須とする
  • 並列実行の容易さ
    • ラクマのページ数を考えると、並列実行ができないと後々破綻する

ブラウザのシェアを確認する

現在、アクセスが1%以上あるブラウザは下記でした。

これらを実行できるE2Eテストツールを選定したいです。

  • iPhone
    • Safari
  • Android
    • Chrome
  • Windows
    • Chrome
    • Edge
    • IE 11(サポート切りたい…)
  • Mac
    • Chrome
    • Safari

ツールを比較する

下記の結果からTestCafeにフォーカスを当て、検証を進めていきます。
(TestCafeは上記に記載したブラウザ全てに対してテスト実行が可能でした。)

おわりに

ここまでで、なぜ導入するのか、なにを導入するのかを説明していきました。

次の記事では、ローカルの環境でTestCafeを試す方法をご紹介していきます。