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

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

この記事を読むのに必要な時間:およそ 2 分

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 2020年6月号

2020年5月18日発売
B5判/176ページ
定価(本体1,220円+税)

  • 第1特集
    入門! Rust
    メモリ安全とパフォーマンスを両立するしくみとは?
  • 第2特集
    プロフェッショナルに訊く
    テストコードの流儀
  • 第3特集
    低レイヤソフトウェア開発入門(後編)
    Linuxカーネルを読み解く,OS・ベアメタルアプリを創る
  • 短期連載
    はじめよう,高速E2Eテスト
    【1】Seleniumで体験するE2Eテスト――速度の課題と並列化による対策
  • 短期連載
    スタートアップのためのAWSテクノロジー講座
    【2】コンテナ導入に向けた現実的な方法を知る

著者プロフィール

奥村和彦(おくむらかずひこ)

価値のある高品質なサービスを素早く提供する」を目的に,要件分析・テスト・CI/CDからの視点でソフトウェア開発のカイゼンを日々考えています。