End-to-End(E2E)テスト
今回はTricentis社のテスト自動化ツールであるToscaの紹介を通して、End-to-Endテスト(E2Eテスト)の最適化と自動化の重要性を説明していきます。End-to-Endテストは端から端、すなわちテスト対象のシステム全体の“最初の操作”から“最後の結果”までの振る舞いを確認するテストのことを指します。もう少しわかりやすく言えば、実際にユーザーが使うときと同じ操作で期待する結果を得られることをテストすることです。E2Eテストはシステムの完成を確認するため、ユーザーシナリオに基づいてテストを進めます。そのため、実際のアプリケーションの画面といったGUIからテストを実施します。
E2Eテストのメリットと課題
開発者、ビジネスオーナー(ユーザー代表者)、テスト担当者(QA)のそれぞれの視点で表1のようなメリットがある反面、システムの評価をE2Eテストに依存しすぎると課題もあります。
表1 E2Eテストのメリットと課題
メリット | 課題 |
単体テストより上位のレベルでテストを行うため、開発者は自分以外の第三者にテストの実行を委ねることができる | テスト対象となるすべての機能およびすべてのアプリケーションをテスト可能な状態にしておかなければならない |
実際のシナリオと同等の内容でテストを行うため、ビジネスオーナーはより信頼できるテスト結果を得ることができる | シナリオテストのためのテストデータのメンテナンスがたいへんなため、テストの実行コストがかかる |
GUIで操作してテストを行うため、テスト担当者はより具体的でシンプルな方法でテストを行える | 開発後期のテストになるので、欠陥を発見したときの影響が大きい |
E2Eの最適化はテスト全体の最適化
表2はTricentis社の2018年の資料からの抜粋で、プロジェクト全体におけるテストレベル別の欠陥の検出割合とかかるコストを表しています。コストは単体テストを1とした相対的な値となります。
表2 テストレベル別の欠陥の検出割合とかかるコスト
| 欠陥の 検出割合 | 相対 コスト | 割合× コスト | 備考 |
E2Eテスト | 35% | 20 | 7 | システム全体のシナリオベースのGUIテスト |
統合テスト | 20% | 5 | 1 | システム間や機能間の連携を確認するAPIレベルのテスト |
モジュールテスト | 15% | 3 | 0.5 | プログラムモジュールが受け持つ特定の機能や振る舞いに対するテスト |
単体テスト | 30% | 1 | 0.3 | コードレベルの処理を確認するテスト |
合計 | 100% | | 8.8 | |
E2Eテストの実行コストは統合テスト以下と比べると非常に高いため、E2Eテストへの依存度が大きいほどテストの全体のコストも高くなり、E2Eテストで欠陥を多く発見した場合のリリース遅延やシステムの信頼性といったリスクも大きくなってしまいます。
この結果からは、テスト全体のコストを下げるには「E2Eテストでの検出割合を下げる」と「テストの実施コストを下げる」の2つの側面で改善することが求められるとも言えます。前者についてはE2Eレベルで行うテストケースを本当に必要なものにとどめ、下位レベルのテストケースを増やしていくことで、下位レベルでの欠陥の検出割合を大きくしていきます。これがいわゆる「テストピラミッド」の構造につながります。後者については、テストツールやテストフレームワークによるテストの自動化を進めることで実施コストを下げることが可能です。
Tricentis Toscaでの実現方法
Tricentis社および、そのテスト自動化ツールであるToscaではこれから説明する3つの戦略でテストの最適化を実現しています。
本当に必要なことをテストケースとして設計する
最大限のビジネスリスクカバレッジを最小のテストケースで導けるように最適化します。また、さまざまな組み合わせ方法からプロジェクトの特性に合った方法を選びテストデータを生成することで、テストデータの冗長化をなくし効率化を実現します。これらの最適化機能を利用して、テストケースを必要最小限にとどめることで、テストピラミッド全体の大きさを従来の半分程度に小さくできます。
複雑化するシステムを分離してE2Eテストを実行可能にする
E2Eテストを減らしても完全になくすことはできません。そしてE2Eテストではテスト対象システムは、複数のアプリケーションやサービスを組み合わせることで利用可能となることもあります。アプリケーションのバージョン互換を考慮したアプリケーションの組み合わせパターンも考えなければならない場合もあります。そのようなE2Eテストのためにたくさんのアプリケーションを常にテスト可能な状態に維持することは、それだけでもコストがかかってしまいます。そのためTricentis Toscaでは仮想化したアプリケーションを簡単に用意できるようにすることで、シナリオ上で必要なアプリケーションの物理的な統合をシミュレートできるようにします。
最適なテストレベルでのテスト実行を支援する
前述の仮想化アプリケーションをいわゆるモックのように利用すれば、特定のアプリケーションを独立させてテストすることも可能になります。つまりE2Eレベルから統合レベルに落とし込んでテストができるようになります。最近のアプリケーションでは、WebServices、REST/JSON、JMS(Java Message Service)などのインターフェースを介して通信できる多層のアーキテクチャを採用することも増えています。このインターフェースを利用したAPIテストはE2Eテストの非常に強力な代替手段となります。さらにAPIテストはE2Eテストよりもビジネスロジックに近いところで実行するので、安定したテストを実現し、パフォーマンスも高くなります。しかし、それゆえにAPIテストの自動化はスクリプトで書かれたテストを実行することが多くなるため、ToscaではAPIテストをビジネスで読みやすい方法で作成するよう支援し、APIテストを生産的に行えるようにします。
以上の戦略を具体化するために、Toscaがどのようなことを実行できるのかについては後編で紹介します。
日本だけでなく、アジア圏でもアトラシアン製品販売のトップエキスパートであるリックソフトのWebサイトでは、各アトラシアン製品の体験版を提供しているほか、アトラシアン製品専用のコミュニティも運営しています。まずはアクセスしてみては!
- 第1特集
MySQL アプリ開発者の必修5科目
不意なトラブルに困らないためのRDB基礎知識
- 第2特集
「知りたい」「使いたい」「発信したい」をかなえる
OSSソースコードリーディングのススメ
- 特別企画
企業のシステムを支えるOSとエコシステムの全貌
[特別企画]Red Hat Enterprise Linux 9最新ガイド
- 短期連載
今さら聞けないSSH
[前編]リモートログインとコマンドの実行
- 短期連載
MySQLで学ぶ文字コード
[最終回]文字コードのハマりどころTips集
- 短期連載
新生「Ansible」徹底解説
[4]Playbookの実行環境(基礎編)