テスト自動化とは、ソフトウェア開発において、テストの実行と、予測された結果と実際の結果との比較を自動的に行う技法のことです。テスト自動化ツールを活用するか、テストスクリプトを書くという方法があり、テストケースのさまざまな反復作業を自動化することで、手作業を大幅に減らすことができます。Aimprosoftの社長兼共同創業者のマキシム・イワノフ氏は、テスト自動化について次のように話しています。「テスト自動化は継続的デリバリー(CD)と継続的テスト(CT)に不可欠であるだけでなく、手動テストの工数削減にも効果的です。結局のところ、費用対効果の高い回帰テスト技法なのです。」

FueledのQA主任であるシーナ・アフジャ氏はテスト自動化の効果について説明しています。「テスト自動化は、手作業を減らすのに役立ちます。テストスイート(テストスクリプト群)が定期的に実行され、アプリに不具合がないことを確認できるので、見落としや人為的ミスが起きる可能性がゼロになるのです。」テストケースのシナリオをすべて自動化することはできないためソフトウェアの検証には手動テストも必要ですが、人為的ミスを減らし、質の高いソフトウェアを開発するために、できるだけ多くのテストケースを自動化することが最終的な目標なのです。

今回の記事では、「テスト自動化とは何か」「テストの種類にはどのようなものがあるのか」という疑問を解決していきます。また、テスト自動化についてありがちな誤解、テスト自動化のメリット、テスト自動化の始め方についてテスト業界の専門家からのアドバイスもご紹介します。


テスト自動化の種類は?

自動テストの種類は?

  • ユニットテスト(単体テスト)
  • APIテスト
  • インテグレーションテスト(統合テスト)
  • UIテスト
  • スモークテスト
  • 承認テスト
  • パフォーマンステスト(性能テスト)
  • アクセシビリティテスト

ユニットテストからUIテストはすでにご存じかもしれません。しかし、ソフトウェアテストのライフサイクルでは、他にもさまざまなテストが行われます。1つひとつ詳しく見てきましょう!

ユニットテスト(単体テスト)

ユニットテスト(単体テスト)

ユニットテスト(単体テスト)とは、コードの小さな単位(ユニット)を検証するテストです。通常、テスト自動化スクリプトを使用して、検証可能なソフトウェアの最も小さな部分に対して行われます。ユニットテストは、外部のシステムやデータベース、APIに依存しないように記述する必要があります。また、他のテスト技法より頻繁に実行しなければならず、コードがコミットされるたびに実行するのが一般的です。こうすることで、コードベースにコードがマージされる前に、素早く簡単にバグをキャッチできるのです。

インテグレーションテスト(統合テスト)

インテグレーションテスト(統合テスト)とは、個々のソフトウェアモジュールを統合させ、正常に動作するか確認するテストのことです。一般的に、ユニットテストの実施後に行われます。開発者によってモジュールの理解とプログラミング論理が異なる場合があるため、インテグレーションテストを行うことで、モジュールを連携させても正常に動作するか検証できます。

APIテスト

APIテスト

API(アプリケーション・プログラミング・インターフェース)は、システム間でのコミュニケーションやデータ交換を可能にするものです。APIテストとは、APIが正常に動作しているか検証するテストを指します。APIテストはインテグレーションテストの一部であり、APIの機能や信頼性、性能、およびセキュリティを確かめてます。APIにユーザーインターフェースはなく、APIテストはプレゼンテーション層とデータベース層の間にあるビジネス層で行われます。

UIテスト

UIテストとは、ソフトウェアのユーザーインターフェース層(プレゼンテーション層)の検証を指し、GUIテスト(グラフィカルユーザーインターフェーステスト)と呼ばれることもあります。視覚要素が、機能やパフォーマンスの仕様を正確に満たしているかテストします。UIテストはテストケースを記述し、実行されることが一般的です。

スモークテスト

スモークテスト

スモークテストは、信頼性テスト、ビルド検証テスト(BVT)、ビルド承認テストなどと呼ばれ、ソフトウェアのビルドが安定しているか検証するものです。不安定である場合は修正が繰り返され、合格できてからテストスタックに進んでいきます。

承認テスト

承認テスト(受入テスト)とは、ソフトウェアがユーザーにとって正常に動作しているか検証するテスト技法です。ソフトウェアが要求された仕様を満たしているかとは関係なく行われます。承認テストは、前述した一連のシステムテストの後、ソフトウェアを本番環境に移す前に実施されます。

パフォーマンステスト(性能テスト)

パフォーマンステストはストレステストとも呼ばれ、通常より大きな負荷をかけてソフトウェアの応答性、安定性、信頼性、リソース使用量を評価するものです。

アクセシビリティテスト

アクセシビリティテストとは、視覚・聴覚障害者、色覚異常のある人、高齢者などがソフトウェアを使用できるか評価するテストのことで、ユーザビリティテストの一環として行われます。

多くのソフトウェア開発者は障害者や高齢者の存在を見落していますが、VMwareでアクセシビリティアーキテクトを務めるシェリ・バーン=ハーバー氏は、この分野の専門家として興味深い指摘をしています。「アクセシビリティテストの大きな課題は、自動化できないものがほとんどであることです。障害者支援技術とソフトウェアがどのように相互作用するか評価しなければなりませんが、WCAG 2.1 レベルAAガイドラインのうち、自動化できるのはおよそ3分の1だけであり、残りは手動テストで検証しなければなりません。ところが、多くの企業はテスト自動化が成功しただけで満足してしまい、問題の3分の2を見逃してしまうのです。」

このことからも、「テスト自動化は便利である反面、すべてのテストシナリオを自動化できるわけではない」ということがうかがえます。手動テストは必須であり、テスト自動化と共存できるものなのです。一方、AutifyのAIなどのツールを活用することで、手動テストの必要性を減らすこともできます。

テスト自動化のメリットは?

時間短縮、大規模な実行、テストカバレッジの拡大、人為的ミスの削減、重複削減など、この分野の専門家はさまざまなテスト自動化のメリットを指摘しています。

HelpCrunchのQAエンジニア、ヴラド・アンヘロフ氏は、次のように話しています。「テスト自動化の主な目的は、時間とリソースの削減です。例えば、150項目からなるチェックリストがあるとしましょう。QAエンジニアが上から順に手作業でテストした場合、5時間かかってしまいますが、テスト自動化を回せば10分程度で完了するはずです。」

Dofollow.ioのCTO兼共同経営者、セバスチャン・シェーファー氏はこう話しています。「ソフトウェアの普及を妨げるUX・UIの問題を解決し、まだ準備できていない製品をリリースしないようにするために、テスト自動化は極めて重要です。また、実装されるとどのように動作するか分かりますから、ソフトウェアやアプリケーションのアップデートやパッチを行う際にも大切な役割を果たします。」

ArcTouchのQAマネージャー、シンディー・フランシス氏は、「テスト自動化を回して多数のテストケースをまとめて実行し、テストカバレッジを拡大していますが、必要な場合は手動テストも必ず行っています」と述べています。

前述の通り、手動テストを行わないことは絶対にありません。しかし、手動テストへの依存を減らし、自動化への移行を進めることは、ソフトウェア企業にとって費用対効果の高い選択肢であると言えます。「長期プロジェクトには、時間と予算をかけても自動化に取り組む価値があります。同じテストを手動で実行するムダを減らせるからです。」とFueledのシーナ・アフジャ氏は言います。HuskyJamのCEO兼創業者のアレックス・ドロキン氏は、次のように説明しています。「忘れてはいけないのは、テストカバレッジが100%だとしても、ミスがないとは限らないということです。テストは時間短縮とエラー削減に役立ちますが、エラーが絶対にないと保証するものではありません。」

テスト自動化についてよくある誤解

テスト自動化にありがちな誤解

テスト自動化の定義と種類、メリットはお分かりいただけましたでしょうか?続きまして、テスト自動化についてのよくある誤解を解いていきます。

「自動化すれば、手動テストは不要」

多くのDevOpsチームは、テストを高速化するだけでなく、人為的ミスの削減、時間短縮、重複削減のために自動化に頼っています。このようなチームが行うテストのうち、テスト自動化が大部分を占めているのです。TesthouseのQA部長、アディティア・ラマチャンドラン氏により、「当社のテストケースは約60%が自動化され、残りは手動で行っています。ただし、これはプロジェクトによって異なり、開発中のアプリケーションの場合は手動テストがほとんどですが、成熟したプロダクトは主にテスト自動化で検証しています。」TRIAREの共同創業者兼CTOのアントン・マリー氏は、「手動テスト3割、テスト自動化7割というところですね」と話しています。ArcTouch社のシンディー・フランシス氏は、「自動化で何でも解決できると思われがちですが、必ずしもそうではありません。自動化に適したアプリもあれば、そうでないプロジェクトもあります」と指摘しています。

「自動化はコストが高すぎる」

テスト自動化には、多額の初期費用がかかることは事実です。しかし、弊社の調査では、テスト自動化に経費を投じたDevOpsチームは、製品品質を改善し、より短期間で市場に投入できたようです。実際、QA予算全体の10~49%をテスト自動化関連に充てているという回答者が大半を占めています。大規模なQAチームを持つ大企業は、予算の最大75%を自動化に充てている一方、自動化に充てる予算が10%未満の企業は、同業他社に大きく後れをとっていることが明らかになりました。

「レコード&プレイバックツールでは不十分」

数年前まではレコード&プレイバックツールやSeleniumのようなテスト自動化ツールでできることには雲泥の差がありました。しかし、近年のノーコードテスト自動化ツールは大きく進化しており、業界を揺るがしています。このようなツールによってテスト自動化のハードルが下がり、業界は恩恵を受けているのです。かつて、テスト自動化はテスト自動化エンジニアしか触れませんでしたが、今では誰でも使えるようになっています。クリック操作でテストケースが作成でき、実際テストケースを書く必要が減ったのです。また、人工知能や機械学習を用いて異常を検出するテスト自動化ツールもあるため、メンテナンスも楽になりました。

Testhouse社のアディティア・ラマチャンドラン氏は、次のように話しています。「当社にとって、ノーコードでテスト自動化できることはとても重要でした。アジャイル・DevOps開発モデルを導入しているプロジェクトは特にそうです。テスト自動化のほうが精度が高く、自動化できる範囲を広げられることが分かったのです。コロナ禍をきっかけにDX(デジタルトランスフォーメーション)がかつてないほど普及し、プロジェクト数が増え、テスト自動化へのニーズもかなり高まりました。パフォーマンス、負荷、ユーザビリティ、セキュリティなど、テスト自動化はあらゆる検証に使われるようになると思います。CI/CD(継続的インテグレーションと継続的デプロイメント)の推進もテスト自動化に拍車をかけるでしょう。AI・MLツールの導入も増え、DevOpsがまとめ役となってこのような変化を可能にしていくのではないでしょうか。」

テスト自動化を始めるには?

Aimprosoft社のマキシム・イワノフ氏は、「アジャイル開発ライフサイクルが主流である今、最初から開発とテストが並列して行われています。いつ、何を自動化する必要があるのか、開発の初期段階から明確に理解しておくべきでしょう。ただし、スクリプトが失敗しないように、実際に自動化するのはユーザーインターフェースが承認されてからですね。新しく追加された機能をチェックし、再テストを行い、リグレッションの有無を確認するために自動化するのがおすすめです。

調査によると、企業の規模によらず、テスト自動化を始める組織にとって最大の課題は適切なツールを吟味して選ぶことだそうです。この分野の専門家は、テスト自動化の始め方について、次のようにアドバイスしています。

QAディレクターであるシーナ・アフジャ氏は、「まず、使いたい自動化ツール(Selenium、Ranorexなど)と、コーディング言語(Java、Python、C#、Rubyなど)を選ぶことから始めるとよいでしょう」と話しています。

HelpCrunchのヴラド・アンヘロフ氏は、次のようにアドバイスしています。「JavaやPython、JavaScriptなどのプログラミング言語を十分に理解していなければなりません。次に、Seleniumをしっかり勉強しましょう。Seleniumはクロスブラウザテストとマルチプラットフォームテストをサポートしており、最も人気のある自動化ツールの1つとされています。このような技術を十分に理解したら、回帰テストの自動化に着手できます。テストのチェックリストに従い、段階的に自動化してきましょう。」

AimprosoftのCTO兼共同創業者であるイゴール・ザポロジェツ氏は、「Selenium WebDriverやSpring、Selenide、Serenity BDD、Cucumber、Appium、JUnit、TestNG、Selenium Grid、Katalon Studio、Protractor、Robot Frameworkなど多数」のツールをチームで活用しているそうです。

より使いやすいテスト自動化ツールは?

Autify自動テスト

前述したツールはどれも便利で、目的を果たすことができます。しかし、自社で使っているツールに不満を抱いているチームが多いことが調査で判明しています。実際、DevOpsチームの半数はテストツールに満足しておらず、毎年新しいツールを検討してるチームは71%です。

ノーコードツールが業界を揺るがしたのはそのためです。ノーコードツールの導入をご検討の方は、おすすめのノーコードテスト自動化ツールをご覧ください。

では、テスト自動化を導入する方法をざっくりご紹介しましょう。大まかな流れは次の通りです。

  • 小さな作業から始める
  • テストワークフローでテスト自動化ソフトをどのように使えば効果的かを考える
  • データ駆動テスト機能を用いてテストシナリオを設計する
  • チームメンバーからのインプットを生かし、使用範囲の拡大を加速化する

まとめ

テスト自動化とは何か、ご理解いただけたでしょうか?さまざまなテスト技法やそれぞれのユースケースを解説しました。また、QAエンジニアやCTOなど、業界で活躍するエキスパートたちの見解もご紹介しました。多くの専門家は「テスト自動化は万能ではないが、間違いなく必要であり、QAテスト予算の大半をテスト自動化が占めるべき」と合意しています。また、レコード&プレイバックツールがいかにテスト業界を揺るがしているかなど、テスト自動化についてよくある誤解も解きました。最後に、人気ツールを使いこなすプロからのアドバイスもご紹介しました。

より使いやすいテスト自動化ツールを模索している方は、ウェブアプリモバイルアプリのテスト自動化ツール「Autify」をぜひご検討ください。
 
Autifyではこの他にも品質保証やテスト、アジャイル開発に役立つ資料を無料で公開していますので、ぜひこちらからご覧ください。