コードの安全性・安定性を高める開発サイクル ~テスト管理の効率を上げ、脆弱性診断を自動で行う~

第11回Tricentis Toscaを使ったテスト自動化でE2Eテストを最適化する(前編)

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%207システム全体のシナリオベースのGUIテスト
統合テスト20%51システム間や機能間の連携を確認するAPIレベルのテスト
モジュールテスト15%30.5プログラムモジュールが受け持つ特定の機能や振る舞いに対するテスト
単体テスト30%10.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がどのようなことを実行できるのかについては後編で紹介します。

米国Atlassianから、2年連続で
「Top new business APAC」を受賞。
Atlassianセールスパートナーとして
アジアパシフィックで1位の証
米国Atlassianから、2年連続で「Top new business APAC」を受賞。Atlassianセールスパートナーとしてアジアパシフィックで1位の証

日本だけでなく、アジア圏でもアトラシアン製品販売のトップエキスパートであるリックソフトのWebサイトでは、各アトラシアン製品の体験版を提供しているほか、アトラシアン製品専用のコミュニティも運営しています。まずはアクセスしてみては!

Software Design

本誌最新号をチェック!
Software Design 2022年9月号

2022年8月18日発売
B5判/192ページ
定価1,342円
(本体1,220円+税10%)

  • 第1特集
    MySQL アプリ開発者の必修5科目
    不意なトラブルに困らないためのRDB基礎知識
  • 第2特集
    「知りたい」「使いたい」「発信したい」をかなえる
    OSSソースコードリーディングのススメ
  • 特別企画
    企業のシステムを支えるOSとエコシステムの全貌
    [特別企画]Red Hat Enterprise Linux 9最新ガイド
  • 短期連載
    今さら聞けないSSH
    [前編]リモートログインとコマンドの実行
  • 短期連載
    MySQLで学ぶ文字コード
    [最終回]文字コードのハマりどころTips集
  • 短期連載
    新生「Ansible」徹底解説
    [4]Playbookの実行環境(基礎編)

おすすめ記事

記事・ニュース一覧