現在のソフトウェア開発に欠かせない「テスト自動化」について、およそ5分でざっくり解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
近年、「テスト自動化」というキーワードを目にする機会が増えてきています。本稿では、テスト自動化の基本的な考え方と注意点について、5分で理解できるよう、ざっくりと解説していきます。
そもそも、テスト自動化とは何をすることなのでしょうか。ソフトウェアテストは下図のプロセスから成り立ちます。
各項目を簡単に解説します。
テスト自動化は、このテストプロセスのうち、「テスト実行」の一部を自動化することを指します。他のプロセスについても将来的には自動化が可能になるかもしれませんが、現状では「テスト自動化」という表現を用いる場合は「テスト実行の自動化」という意味であることが一般的です。
テスト自動化には、その目的や適用箇所によって幾つかの種類があります。また、使用するツールもさまざまな種類があります。代表的なものを紹介します。
テスト対象のソースコードに対してテストコードを作成し、それを実行することで自動的にテストを実施します。テスト対象のプログラムを直接実行できるため、特にホワイトボックステストの実行に向いています。使用するツールとしては、テスト用のフレームワークがプログラム言語ごとに提供されていることが一般的です。
アプリケーションやモジュール間のインタフェースをテストします。主に結合テストの実行に使用します。具体的なツールとしてはWebアプリケーションのAPIに使用されるRESTやSOAPなどのプロトコルに従ってデータやパラメーターのやりとりを行うものなどがあります。
ユーザーが実際に操作するように、画面の要素を操作するテストです。テキストボックスへの入力や、ボタン押下などの操作をシミュレートします。その名の通り、ユーザーインタフェース(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.