検索
連載

5分で分かるテスト自動化テスト自動化をざっくり解説

現在のソフトウェア開発に欠かせない「テスト自動化」について、およそ5分でざっくり解説します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 近年、「テスト自動化」というキーワードを目にする機会が増えてきています。本稿では、テスト自動化の基本的な考え方と注意点について、5分で理解できるよう、ざっくりと解説していきます。

「テスト自動化」とはテストの何を自動化するのか

 そもそも、テスト自動化とは何をすることなのでしょうか。ソフトウェアテストは下図のプロセスから成り立ちます。


テストプロセスと自動化の範囲(JSTQB「テスト技術者資格制度 Foundation Level シラバス」を基に作成)

 各項目を簡単に解説します。

  • テスト計画:テストの目的とリソースに応じたアプローチを定義する
  • テスト分析:テスト対象を分析し、何をテストするのかを定める
  • テスト設計:テスト条件を具体化し、どうテストするのかを定める
  • テスト実装:テストデータやテスト環境、テストケースなどを作成する
  • テスト実行:テストを実施し、テスト結果や欠陥を記録する
  • テスト完了:テスト結果の考察や報告を行う
  • テストのモニタリングとコントロール:テストプロセスを円滑に進められるように管理する

 テスト自動化は、このテストプロセスのうち、「テスト実行」の一部を自動化することを指します。他のプロセスについても将来的には自動化が可能になるかもしれませんが、現状では「テスト自動化」という表現を用いる場合は「テスト実行の自動化」という意味であることが一般的です。

テスト自動化の種類とテスト自動化ツール

 テスト自動化には、その目的や適用箇所によって幾つかの種類があります。また、使用するツールもさまざまな種類があります。代表的なものを紹介します。

ユニットテスト

 テスト対象のソースコードに対してテストコードを作成し、それを実行することで自動的にテストを実施します。テスト対象のプログラムを直接実行できるため、特にホワイトボックステストの実行に向いています。使用するツールとしては、テスト用のフレームワークがプログラム言語ごとに提供されていることが一般的です。

APIテスト

 アプリケーションやモジュール間のインタフェースをテストします。主に結合テストの実行に使用します。具体的なツールとしてはWebアプリケーションのAPIに使用されるRESTやSOAPなどのプロトコルに従ってデータやパラメーターのやりとりを行うものなどがあります。

UIテスト

 ユーザーが実際に操作するように、画面の要素を操作するテストです。テキストボックスへの入力や、ボタン押下などの操作をシミュレートします。その名の通り、ユーザーインタフェース(UI)の確認の他、エンドツーテスト(E2Eテスト)と呼ばれる、システム全体をユーザーサイドから一通り操作するテストを行う際に必要となります。

 他にも、ソースコードの静的解析ツールや、性能テスト用の実行ツールなどをテスト自動化ツールに含む場合もあります。

テスト自動化のメリットとデメリット

 テスト自動化を行うことのメリットは、以下のようなものがあります。

  • テスト実行の工数を削減できる
  • バグの見落としなどの人為的ミスを防止できる
  • 実行速度が手動テストと比べて高速であるため、多くのテストを実行できる
  • 夜間や休日など、人間が休んでいる間もテストを実行できる

 これだけを見ると良いことばかりですが、もちろん以下のようなデメリットもあります。

  • 事前に設定した操作手順、期待結果だけを検証するため、柔軟なバグ検出はできない
  • テストスクリプトの作成や環境の構築のために初期コストがかかる
  • テスト対象の変更やツールのバージョンアップなどに合わせた適切なメンテナンスを続ける必要がある
  • 実行可能なテストケースがツールの動作条件などに依存する

 これらのメリット、デメリットを考慮し、効果的に導入することが必要となります。

テスト自動化の進め方

 ここでは、テスト自動化を導入、実施する場合の一般的な流れを解説します。


テスト自動化の流れ

1.自動化の方針を定める

 どのような自動化を行うのかを検討し、使用するツールや自動化の適用範囲を決めます。

2.環境を構築する

 ツールが実際に使えるかどうかの調査やテスト自動化環境の整備を行います。パイロットプロジェクトを実施し、効果的にテスト自動化が導入できるかどうかを検証することも重要です。

3.テストケースを作成する

 自動化のためのスクリプトを作成する前に、手動テストと同様にテストの前提条件、操作手順、期待値をまとめます。つまり、そのために必要なテスト分析、テスト設計、テスト実装のプロセスは自動テストでも手動テストでも同様に実施する必要があります。ただし、自動テストの場合はスクリプトで操作するため、手動テストよりも詳細にテストケースを作成する必要があります。

4.テストスクリプトを作成する

 テストケースをプログラムに変換し、ツールで実行できるようにします。テストスクリプトの作成やメンテナンスは大変なことが多く、それを効率的に行うための工夫が重要です。キーワード駆動テストといった手法が代表的なものとなります。

5.テストを実行する

 テストスクリプトを実行します。実行のタイミングや頻度はテスト自動化の効果に大きく影響するため、しっかりと考慮する必要があります。なるべく早い段階で、頻繁に実施するように心掛けましょう。

6.テスト結果を確認する

 自動テストでは結果の検証までをテストスクリプトに組み込むことが一般的です。結果がNGのテストケースについては、手動テストと同様に原因を調査し、不具合を修正します。自動テストの場合、テストスクリプトやテスト環境の誤りもNGの原因となり得るため、特に導入初期には注意深く調査することが必要です。

7.テスト環境をメンテナンスする

 テストするシステムの仕様変更や、テストツールのバージョンアップに合わせて、テスト環境やスクリプトをメンテナンスします。最新の状況に合わせて不断のメンテナンスを行うことがテスト自動化成功の必須条件となります。

テスト自動化導入のポイント

 最後にテスト自動化導入の注意点を2点紹介します。

テスト自動化に向く部分、向かない部分を見極める

 現在のツールでは、システムのテストの全てを自動化するというのは大変困難であると言えます。特に初めてテストを自動化する場合は、どこから自動化するのかを慎重に見極めて、導入しやすく、かつ効果の高い部分から段階的に実施していくことが重要です。例えば、下図で示す通りユニットテストであれば比較的導入しやすく、UIテストは導入できる部分が限られています。フィージビリティスタディ(実現可能性検証)をしっかりと行うことがポイントです。


テスト自動化のピラミッド(『テスターとアジャイルチームのための実践ガイド 実践アジャイルテスト』 を基に作成)

コストを重視する

 テスト自動化には初期コストがかかります。手動テストと比べて、効果が出る(テストの効率が上がりコスト削減につながる)のは、導入直後ではなく、何度か実行を繰り返した後であることが一般的です。そのため、「元を取る」ためにどうすればいいのか、工夫を重ねることがポイントです。

 例えば、スクリプトの保守性を上げてメンテナンス工数を削減する、何度も実行するリグレッションテスト(回帰テスト)の自動化から取り掛かる、などの戦略が必要となります。


自動テストと手動テストのコスト比較

 どちらのポイントも導入時にしっかりと戦略を立て、そして継続していくことが必要となります。逆に「取りあえず」「なんとなく」といった考えで行うテスト自動化は失敗する可能性が高いと言えるでしょう。

参考文献

筆者紹介

江添 智之

バルテス株式会社

クロス・ファンクショナル事業部 R&C部 マネージャー

Web系、エンタープライズ系、医療系などさまざまな開発業務にプログラマー、システムエンジニア、プロジェクトリーダーとして携わった後、バルテスにてテストエンジニア、コンサルタント業務に従事。現在は、主にテスト業務に関する研究開発および人材育成を担当。Scrum Alliance認定スクラムマスター、ディープラーニング検定(G資格)、ネットワークスペシャリスト、データベーススペシャリスト、JSTQB Advanced Level(テストマネージャ、テストアナリスト)など、ソフトウェアの開発およびテストに関する資格を多数取得。JaSST Kansai 実行委員。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る