2021.9.2
【第2回】:テスト自動化の実現方法
今日のシステムは複雑化を続けており、そのテストに費やす工数も増大しつつあります。システムのテストを迅速かつ正確に実施し、現代の短い開発サイクルに対応するためには「テスト自動化」が欠かせません。
テスト自動化を実現するにあたり、その方法について把握することが重要です。そこで第2回となる本記事では、テスト自動化の実現方法についてご紹介します。なお、テスト自動化の定義やメリットについては、第1回の記事をご一読ください。
開発・QA現場向け「テスト自動化」のススメ 【第1回】:テスト自動化の定義とメリット
テスト自動化の実現方法
テスト自動化には、大きく分けると2つの実現方法があります。テスト対象システムや開発現場の状況により、最適な方法やツールの選定が必要です。ここでは手動およびテスト自動化ツールによる実現方法に関して、それぞれの進め方やメリット・デメリットなどを解説します。
実現方法1:エンジニアの人手による自動化
1点目は、エンジニアがOSSやフリーのテストツールなどを使用して独自にテストプログラムを実装し、自動化する方法です。テストプログラムの実装は、一般的には専任のテスト自動化エンジニアが担当します。ただし現代の開発現場では、テスト工程に専念できる人的リソースが限られるケースも少なくありません。この場合、プログラマーなどがテスト自動化を担当することとなります。
エンジニアの人手によりテスト自動化する場合、下記のようなプロセスで進めることが通例です。開発現場によってはプロセスの一部を簡略化したり、プロセスを並行して実施したりするケースもあります。
1. テスト自動化計画
2. テスト自動化設計
3. テスト自動化プログラムの実装
4. テスト自動化プログラムの動作検証
まず、テスト自動化を進める上での計画を策定します。テスト自動化の目的やスケジュール、担当者、使用する言語といった一通りの基本事項の検討が必要です。以降のプロセスでは、策定したスケジュールにしたがってプロセスを実施します。
計画完了後に実施するのは、テスト自動化プログラムを実装するための設計プロセスです。モジュール構成やテストケース入力・テスト結果出力のインタフェースなど、実装における必要事項を明確化します。
その後、設計内容にしたがってテスト自動化プログラムの実装を行います。とはいえ、実装したテスト自動化プログラムが適切に動作しないのでは意味がありません。実装後には、テスト自動化プログラムが想定通りに動作することを検証します。
メリット
比較的単純な機能ユニットのプログラムテスト (単体テスト) などでスムーズにプロセスを実施できた場合は、テスト自動化ツール導入よりもコストを抑えられる場合があります。また、設計が適切であれば、開発現場のニーズに合わせた細かいカスタマイズが容易となります。
デメリット
テスト自動化を人手により行うためには、前述の通り様々なプロセス・作業項目の実施が必要です。問題が発生すると工数は増大し、テスト自動化ツールの導入コストよりも人件費が膨らむケースも少なくありません。そのため、テスト対象システムが小規模で自動化しやすい場合や、プロジェクトの人員に余裕がある場合に適しています。
またテスト自動化プログラムの設計や実装には、テスト対象システム自体のテストケースが必要不可欠です。言い換えれば、テスト対象システムのテスト設計 (テストケースの定義) が未完了の場合、テスト自動化を進められないこととなります。
したがって、テスト実行自動化の前段階として仕様への深い理解や、具体的なテスト手順の作成などが必要です。さらに、作成したテストケースに不備が判明し、修正と再実行を繰り返す事態となることも珍しくありません。テストケース作成は大きな労力を要する作業であり、作成者にも高いスキルが求められます。
開発サイクルが短い今日の開発現場では、進行中の開発プロジェクトに対して、人手によるテスト自動化プロセスの適用は困難です。よって、独立したテスト自動化のプロジェクトを立ち上げ、開発プロジェクトと並行して進めていくことが現実的といえます。
実現方法2:テスト自動化ツールの利用による自動化
前述のように、人手によるテスト自動化には多くのデメリットが存在します。そのため、今日の開発現場ではテスト自動化ツールを活用するケースが増えています。ただしテスト自動化ツールによって、自動化可能なテストの種類 (詳細は次回解説) や自動化の範囲などは様々です。
テスト自動化の進め方もツールにより変わりますが、大まかな流れは下記のとおりです。
1. テスト自動化ツールの選定
2. テスト自動化ツールの導入・環境構築
3. テストケースの定義・生成
4. テスト自動化ツールの実行・結果分析
前述の通り、テストの種類や開発現場の状況によって最適なテスト自動化ツールは異なります。まずは、状況に応じたテスト自動化ツールの選定が必要です。次に、テスト自動化ツールの導入・環境構築を行います。
環境構築では、各種パラメータの設定やデバイス間通信の確立など、テスト自動化ツールの実行に必須となる作業の実施が必要です。その後、テスト自動化ツールのインプットとなるテストケースの定義および生成を行います。
プログラミング言語により操作内容を実装するもの、画面操作をテスト手順として記録するものなど、テストケースの作成方法は様々です。テスト実行とテストケース作成を同時並行で行う「探索的テスト」を自動化可能なツールの場合は、テストケースを自動生成でき、このプロセス自体も自動化されます。探索的テストに関する詳細は、次の記事をご一読ください。
今こそ求められる探索的テストとは? 【第1回】:探索的テストの基礎知識
そして、作成したテストケースを用いてテスト自動化ツールを実行します。設定内容などに不備があるとテストが正しく行われない恐れもあるので、実行結果の妥当性確認や分析も必要不可欠です。一部のテストケースを試験的に実行して自動化の成否を判断するケースもあれば、進行中のプロジェクトに対してテスト自動化を適用するケースもあります。
メリット
テスト自動化ツールを導入することで、人手によるテスト自動化と比べて大幅な人件費削減が期待できます。結果としてテスト自動化に費やすトータルコストも、人手の場合よりも低く抑えやすいといえます。テスト対象システムが大規模なケースや、テスト人員の確保が難しいケースで特に有効です。
また、前述の探索的テスト自動化ツールであれば、手作業によるテストケースのスクリプト作成も不要です。人手での自動化における作業負荷・人的ミスの減少による品質向上が期待でき、進行中の開発プロジェクトにテスト自動化を適用することも比較的容易となります。
探索的テスト自動化サービスの一例として、『ADOC Testing Service (ATS) for Eggplant』が挙げられます。AIやモデルベーステストの適用により探索的テストを自動化する『Eggplant』を採用した、有力なサービスです。テスト自動化の実行だけでなく、テストケース自動生成やバグの自動抽出、監視・レポートを含むテストサイクル全体のQCDを劇的に改善します。
デメリット
当然ながらテスト自動化ツールの導入には、教育を含む環境の整備やツールのライセンス、維持管理費などそれなりのコストが発生します。人手による自動化の難易度が低いようなケースでは、テスト自動化ツールの導入による費用対効果がそれほど高まらない場合もあります。
またテスト自動化ツールの多くは、テスト実行しか自動化できません。このようなツールを導入する場合、テスト設計やテスト結果の分析、フィードバックなどは人手で行うこととなります。費用対効果を高める上で、テスト自動化ツールの選定が重要な要素です。
手動およびテスト自動化ツールの併用について
テスト対象や機能によっては、従来のテスト自動化ツールでは自動化が難しいケースも考えられます。そのため複数の自動化ツールやGUIツールの併用に加えて、人手による自動化も組み合わせたアプローチが採用されることも少なくありません。
ツールにより自動化できる範囲を明確にした上で、可能な部分についてはテスト自動化ツールのプロセスに沿って進めます。その一方で、自動化が難しい部分は人手による自動化プロセスの併用を検討します。
人手およびツールの兼ね合いを適切にコントロールできれば、テスト自動化ツールにより工数の増大を抑えつつ、テストのカバレッジ (網羅率) を担保できます。また人員に余裕がある場合は、両者のプロセスを並行することで余剰人員の活用・コスト増大の抑止も可能です。
しかしながら、テスト自動化ツールの導入コスト自体は削減できないため、トータルコストは増大しやすくなります。また、複数ツールの併用や人手による自動化に多くの工数を費やすと、テスト自動化の適用も遅れてしまいます。
工数・コストの増大を抑えソフトウェア品質を向上するためには、広範囲のテスト領域をカバーし、近年注目される「DevOps」の実現に向けてテストサイクル全体を効率化できるテスト自動化ツールの選定が重要です。
テストの種類と自動化の対応は?
今回はテスト自動化の実現方法について解説しました。開発現場の状況やテスト対象システムに応じて適切な方法を検討し、最適なテスト自動化ツールや導入検証・支援などのサービスを選択することが重要です。
コストだけでは測れない自動化のメリットとして、「手動テストでは実施が難しいテストを実施できる」という点があります。このメリットを享受するために、導入時には「テストカバレッジを拡大し、品質向上の実現につながるか」という着眼点でも検討すべきです。
またテストは、単体テスト・結合テスト・システムテスト (総合テスト) といったテスト範囲や、機能テスト・非機能テスト (負荷、ユーザビリティ、セキュリティなど) といった機能要件などにより分類されます。それぞれのテストの種類によって、自動化に適した実現方法は異なります。次回は自動化可能なテストの種類についてご紹介しますので、ぜひご覧ください。
■ ADOC Testing Service for Eggplantの概要へ
■ ADOC Testing Service for Eggplantの資料請求へ
- 2021.11.10
- 【第6回】:ATS for Eggplantによるテストプロセスとは