近年、ソフトウェア開発における「テスト自動化(自動テスト)」の需要が増加しています。その背景にあるのが、激しく変化する市場ニーズへの対応です。特に、開発のアジャイル化によってテストを繰り返し実施する機会が増え、それに伴いテスト自動化に対するニーズも高まっています。今回は、テスト自動化の中でも「テスト実施を自動化」した場合のメリット・デメリットや、代表的なツールなどをご紹介します。
テスト自動化とは
テスト自動化とは、テストにまつわる作業の全体あるいは一部を自動化することを指します。
一口にテストと言っても、そこにはさまざまなプロセスが含まれます。ソフトウェアテスト技術者資格認定組織である「ISTQB(国際ソフトウェアテスト資格認定委員会)/JSTQB(日本ソフトウェアテスト技術者資格認定組織)」の定義によると、テストプロセスは以下の5つの要素で構成されています。
- テスト計画作業とコントロール
- テストの分析と設計
- テストの実装と実行
- 終了基準の評価とレポート
- 終了作業
テスト自動化は、上記のテストプロセスのうち「テスト実行」について、テストツールなどを用いて自動化することを指します。また、最近では「テスト実装」のプロセスにおいても、テスト設計仕様書から自動的にテストケースを生成して自動化する場合もあります。いずれにしても、今まで人手で行なっていた作業を自動化することで、省力化や、精度の向上、実施時間の短縮などを実現できます。
なぜテスト自動化が注目されているのか
テスト自動化が注目されている理由は、以下のようなソフトウェア開発のトレンドに起因しています。
1. アジャイル開発の普及
アジャイル開発は、短い開発サイクルで機能をリリースすることを重視する手法です。
このような開発手法では、開発サイクルの短縮や品質の向上が求められます。
テスト自動化によって、短いサイクルで継続的なテストを実施し、品質を向上させることができます。
2. デジタルトランスフォーメーションの進展
デジタルトランスフォーメーションの進展により、ビジネスプロセスが自動化される傾向があります。
これにより、ソフトウェアアプリケーションの規模が拡大し、品質保証の重要性が高まりました。
テスト自動化によって、ビジネスプロセスの自動化に合わせて自動化されたテストを実施することができ、品質を確保することができます。
3. クラウドコンピューティングの普及
クラウドコンピューティングの普及により、インターネットを介してアクセス可能な多くのアプリケーションがあります。
これにより、アプリケーションの品質保証がより重要になり、自動化されたテストが必要となりました。
クラウドベースのテストツールを利用することで、自動化されたテストを効率的に実施することができます。
4. デバイスの増加
スマートフォンやタブレットなど、多様なデバイスが増加しています。
これにより、アプリケーションのテストは多様なデバイスで実施する必要があります。
手動でテストを実施することは非常に労力がかかりますが、テスト自動化によって、多様なデバイスで自動化されたテストを実施することができます。
5. 新規開発と品質保証の両立への要求
近年のIT業界では、高速で効率的な開発が求められ、ソフトウェア市場のニーズに迅速に対応することが重要となっています。
多くの開発プロジェクトでは、数ヶ月ごとに新機能を実装し、これを数年にわたって持続しています。
また、厳しい予算の中でも市場の動向に対抗するため、IT投資を「新機能開発」に優先的に割り当てることが常識となりつつあります。
新機能や新サービスを絶え間なく生み出す高速化は、システム全体の成長を加速させますが、同時に過去にリリースした機能の品質維持も要求されます。そのため、”限られた予算の中で”、”短期間で”、”低コスト”かつ”高品質”なソフトウェア開発を実現しなければなりません。
このような状況において、急速に変化する市場ニーズに対応する手段として注目されているのが「テスト自動化」です。
テスト自動化を取り入れることで、開発サイクルを短縮し、リソースに対する効率を向上させつつ、高品質なソフトウェアを保証することが可能になります。
現在、開発の第一線で求められているのは、このようなバランスの取れた戦略です。
今後のソフトウェア開発は、新規開発と品質保証の両立がより一層求められるようになるだろうと考えられます。
テスト自動化の効果・メリット
まず、テスト自動化により得られる効果を整理しておきましょう。
人的リソースの都合にかかわらずテスト実行が可能
テスト実行を自動化すれば、テストを行うための人的リソースが不足していてもテストを実施できます。また、手動テストでは非現実的な大規模性能テストや大量データの比較テストなども実行可能になります。
正確なテスト実行が可能
テスト実行時の人的ミス(ヒューマンエラー)を排除し、より正確なテストが行えます。
不具合の早期発見が可能
開発者がコーディングを完了するたびに自動テストを実行すれば、不具合を早期に検出し、すぐに対応することが可能になります。CI(継続的インテグレーション)の実行プロセスのなかに自動テストを組み込めば、より高い効果が望めます。
テストを高速に実行可能
一般に、手動テストに比べて実行速度が速いのも自動テストのメリットです。ただし、テストの実行速度は実行するテスト内容や使用するツールによっても変化するため、留意が必要です。
テスト自動化の注意点とデメリット
次に、テスト自動化する際の注意点やデメリットを確認しましょう。テスト自動化により、テスト期間を短縮でき、さらに精度も上げられるため、非常に大きなメリットを得られます。しかしながら、自動化は、すべてのテストに対して行えるものではありません。自動化により効果を得るためには、どのテストを自動化するかの見極めが重要になってきます。そのために認識しておきたい注意したい点を挙げます。
自動テストは、設計した内容しかテストできない
自動化できるのは、すでにテスト設計済みのテスト内容のみです。テスト設計とテスト実行を並行して行う探索的テストや、思いついたテストケースを実施するアドホックテストなどは自動化できません。
自動テストには保守運用が必須
テストを自動化しても、すぐに効果が得られるわけではありません。繰り返し運用し続けることで、その効果が得られます。継続運用していくために、自動テストには保守運用が必須となります。
初期コストが手動テストに比べて高い
テストを自動化するためには、テストコードを作成するコストやツールを使いこなすための学習にかかるコストなど、手動テストに比べて多くの初期コストがかかります。自動化する対象がどの程度繰り返し実行されるテストか、テスト自動化にどのような効果を求めるかによって、費用対効果を総合的に判断する必要があります。
自動テストには向き不向きがある
テスト自動化には、向いているテスト、向いていないテストがあります。例えば、人的ミスが起こりやすいテストや繰り返し実施されるテストには向いていますが、実施回数が少ないテストや手順が定まっていないテストは自動化には不向きです。自動化の際は、この向き不向きの見極めが重要となります。
向いているテスト | 向いていないテスト |
・繰り返し行われるテスト ・ミスが発生しやすいテスト ・変更が少ないテスト | ・手順が決まっていないテスト ・ユーザビリティテスト ・実施回数が少ないテスト |
例えば、E2Eテストは手順が明確に定まっており、アップデートのたびにテスト実行し、複数のパターンで実行することも多くあります。そこでこのE2Eテストを自動化することで、繰り返し行なわれるテストの工数を削減し、ミスなく実行できるメリットを享受できるようになります。
「テスト自動化」の技術領域の定義と啓蒙を目的とする「テスト自動化研究会(STAR: Software Testing Automation Research Group Jp)」では、以下の『テスト自動化の8原則』を提唱しています。テスト自動化に取り組む際の参考になりますので、紹介します。
<テスト自動化の8原則>
1. 手動テストはなくならない
2. 手動でおこなって効果のないテストを自動化しても無駄である
3. 自動テストは書いたことしかテストしない
4. テスト自動化の効用はコスト削減だけではない
5. 自動テストシステムの開発は継続的におこなうものである
6. 自動化検討はプロジェクト初期から
7. 自動テストで新種のバグが見つかることは稀である
8. テスト結果分析という新たなタスクが生まれる
詳しくは下記サイトを参照してください。
■テスト自動化研究会(STAR: Software Testing Automation Research Group Jp)
テスト自動化の8原則
テスト自動化の仕組み
ソフトウェアのテストとは、ソフトウェアが仕様書通りに動くかどうかを確かめる作業です。テストの流れは、以下の図にあるように、テストデータを入力し、期待される結果が出力されるかどうかを検証します。
入力の自動化
パスワードの入力フォームのテストをする場合、文字数や数字、ローマ字などの組み合わせによりテストケースが膨大な量になるため、人が作業すると多大な時間がかかったり、入力ミスをしてしまったりといったことが起こり得るため、テストの精度向上および効率化のためには、データ入力の自動化が非常に重要となります。
“データ入力”と一口にいっても、キーボードやマウスなどのデバイスからの入力もあれば、スマートフォンでのタッチ操作による入力や、ネットワークからの通知、ソフトウェア間での通信などさまざまな種類があるため、どの端末でどのような方法でデータが入力されるのかを考えた上で、入力の自動化を考える必要があります。
入力形式の違いによる、具体的な自動化の手法としては、下記のようなものが挙げられます。
特定の条件下のテストで必要な「セットアップ」「ティアダウン」とは
テストを実施するに当たって、前提条件が必要な場合があります。分かりやすい例で説明すると、例えばゲームで2面に進むには1面をクリアしていなければいけません。2面がテスト対象だとすると、「1面をクリアしているかどうか」が前提条件になります。
このように前提条件が必要なテストの場合、「前提条件をクリアしている」という仮定の下でテストを行う必要があります。テストを行うためにある特定の状態にするのが「セットアップ」と呼ばれる操作です。またテストが終わった後に、ソフトウェアを初期状態に戻す操作を「ティアダウン」と呼びます。
テスト自動化の際には、この「セットアップ」「ティアダウン」の操作も自動化することが必要となります。ただ、テストの都度、この操作を行うのは大変ですが、現在はこの操作を簡便化するために、あらかじめ「セットアップ」「ティアダウン」を行う関数を用意するという方法がよく行われています。また、ソフトウェアが大規模化、複雑化する中、「セットアップ」「ティアダウン」の処理も複雑化する傾向にありますので、テスト自動化の際には、この部分についても留意する必要があるでしょう。
テスト自動化の導入方法
自動化を導入するにあたり、検討すべき重要なポイントは以下の3つです。
- 目的:何のために自動化するのか(課題)
- 対象、範囲:どこまでを自動化するのか
- どうやって:使うツール、ソフトウェアの選定
それぞれのポイントを具体的にみていきましょう。
ポイント1:テスト自動化の目的を決める
テストを自動化すれば、すべてにおいてメリットが享受できるという甘い幻想を抱きがちですが、実際にはそうではありません。テスト自動化を成功させるためには、導入前にその目的を明確にすることが大切です。
まずは、「コスト削減」「時間削減」「定期実行」「連続実行」など、テスト自動化の目的を、優先度も含めて決定し、次にその目的が達成可能かを検討します。
例えば、「コスト削減」を主たる目的とした場合、初期コストや保守運用にかかるコストを考慮しても費用対効果が得られるかを検討します。手動でテストを実行した場合に比べて自動化によって節約できる時間などから、同じテストを何回実行すれば損益分岐点に達するかを算出して判断します。
ポイント2:テスト対象と範囲を決める
前述したように、テスト自動化には向き不向きがあり、すべてのテストを自動化すればよいというものではありません。自動化の目的を加味しながら自動化の対象と範囲を絞り込みます。
例えば、「コスト削減」が目的の場合は、テスト手順が確立されており毎回必ず実施されるテストのみを自動化の対象にするなど、コスト削減効果が見込める部分に対象を絞る判断をします。テスト対象と範囲が決まったら、自動テストシナリオの設計を行います。
自動テストシナリオ設計のポイント
「自動テストシナリオ」というと、テスト技法の「シナリオテスト」と混同してしまいそうですね。「自動テストシナリオ」は具体的なテスト手順(キー操作やマウス操作、入力操作など)を記述したスクリプトのことで 、「シナリオテスト」はユーザー操作を想定したシナリオに沿ってテストを設計・実施する技法を指します。
テスト実行を自動化する場合、自動化したテストを繰り返し実行することで費用対効果が得られることは本文でも書きました。メンテナンスコストがかからず、繰り返し実行できる「自動テストシナリオ」を設計することが テスト自動化を成功させるために重要なポイントとなります。
ポイント3:テスト自動化を実装するツールを決定する
自動化の目的と対象、範囲が決まったら、実装するツールを決定します。開発対象や目的に応じたツールであることはもちろんのこと、継続して運用することを見据えてツールを選定します。その際、ランニングコストやメンテナンスコストも検討しておきたいところです。
また、CI(継続的インテグレーション)ツールを使用している場合は、そのツールと連携が可能かも選定のポイントとなります。実際にツールを使用しないとわからない点もありますが、有償ツールにもデモ利用できるものが多いので、試用して目的に適っているかを事前に確認することをお勧めします。代表的なツールは、次項でご紹介します。
参考:テスト自動化ツールの選定【前編】~ツールの比較表をどう活用するか
テスト自動化ツール
ここでは、代表的なテスト自動化ツールをご紹介します。
Selenium(セレニウム)
Webアプリケーションを自動テストするためのオープンソースツールで、無償で利用できます。Selenium IDEを利用すれば、Firefoxのアドオン、またはChromeの機能拡張からブラウザ操作(テストの操作手順)を記録することでテストスクリプトを作成することができます。
https://www.selenium.dev/ja/documentation/
Appium(アピウム)
Webブラウザを自動的に操作するツールであるSeleniumWebdriverの一種で、無償で利用できるオープンソースのテスト自動化フレームワークです。iOS/Androidのネイティブアプリ、ハイブリッドアプリ、MacOS/Windows向けアプリのテストを自動化できます。
https://appium.io/
TestArchitect(テストアーキテクト)
あらゆる条件の自動テストにワンツールで対応可能でメンテナンス性が高いテスト自動化ツールです。キーワード駆動でテストスクリプトを作成できるほか、SeleniumやAppiumなどで既に実装済みのテストコードを組み込むことで、既存テストコードをTestArchitectへ統合することができます。
https://agest.co.jp/solution/testarchitect/
Autify(オーティファイ)
Webアプリケーションのテストをノーコードで自動化できるツールです。開発知識がない人でも実装可能なツールを目指しており、Chromeの機能拡張から操作の記録とテスト結果の判定を容易に実装することができます。また、テスト対象のUIの変化をAIで監視し、影響を受けるテストスクリプトを自動でアップデートする仕組みを持ち、メンテナンスコストを削減できます。さらに、JavaScriptを用いることで、操作の記録だけでは実装できない要素も実装可能なツールです。
https://autify.com/ja
参考:自動化SaaS「Autify」とは|ノーコードで導入可能。メンテナンスもAIのサポートで楽々
mabl(メイブル)
Webアプリケーションのテストをローコードで自動化できるツール。Chromeの機能拡張から操作の記録とテスト結果の判定を実装できる点や、AIでUIの変化を監視しテストスクリプトを自動アップデートする機能など、Autifyと同様の機能をもちつつ、コードがわかる人にはさらに活用の幅が広がるツールとなっています。APIテストや、変数を用いたテスト実装が可能なのもmablの特徴です。
https://www.mabl.com/japan
参考:ローコードでテスト自動化を実現したいなら「mabl」(メイブル)
なお、CIツールの比較については下記の記事も参照してください。
参考:【テスト自動化】話題のCIツール、Circle CI、GitLab、Jenkinsを比較
テスト自動化に失敗しないために
過去の失敗事例には、過ちを繰り返さないための教訓があります。テスト自動化の典型的な失敗要因をご紹介します。
失敗例1:メンテナンス体制が整わず、実行できないテストスクリプトになってしまう
テスト自動化は継続運用することで効果が得られます。保守運用が必須だということはすでに書きましたが、以下のような理由でテストスクリプトのメンテナンス体制が整わないケースがあります。
- メンテナンスできる要員が確保できないために、メンテナンスが疎かになってしまう
- メンテナンスが属人化しており、担当者の退職とともにテストスクリプトのメンテナンスができなくなってしまう
メンテナンス体制が構築できなければ、せっかく作ったテストスクリプトが実行できないものとなり、自動化による恩恵が十分に得られなくなります。このような失敗を招かないためには、自動化実装後のメンテナンス・運用も加味した体制を、実装段階から検討しておく必要があります。
失敗例2:テストスクリプトのメンテナンスが開発ペースに追いつかない
テストスクリプトは開発の進行とともにメンテナンスする必要がありますが、システムのリリース日までにテストスクリプトのメンテナンスが終わらず、自動テストを活用できない場合があります。
特に、開発ペースが速いプロジェクトや、自動化するテスト範囲を広げすぎてしまった場合に起こりやすい失敗事例です。このような失敗をしないためには、テスト範囲の最適化や、メンテナンス手法の改善などが必要となります。
失敗例3:事前の調査、検討が足りていない
テスト自動化の導入そのものが目的となってしまい、導入しようとしているプロジェクトでテスト自動化の効果が得られるかなどの事前調査・検討が足りていないために失敗するケースもあります。
関係者の認識合わせができていないために、テスト自動化に対する過度な期待や成果が求められ、いざ自動化したものの成果が出せていないと判断されるケースもあります。
前述のとおり、テスト自動化を成功させるためには、自動化の目的・範囲・手法の検討が欠かせません。事前にしっかり検討し、その内容を関係者に周知して認識をあわせておくことが大切です。
このように、テスト自動化を成功させるためには多くの注意点があり、事前準備や継続運用の体制構築にはノウハウが必要となります。テスト自動化にどのように着手していいかわからない、効果が出せるか不安があるといった方は、テスト自動化をはじめ、ソフトウェアテストのプロに相談してみてはいかがでしょうか。
記事更新履歴
※2023/05/01 一部内容更新
※2023/10/31 一部内容更新