テスト自動化とは。メリットやツール、注意点などを詳しく解説
現代のソフトウェア開発において、テスト自動化は当たり前の取り組みとして認知が広がりつつあります。その実現方法は、開発者向けのテスティングフレームワークや、ノーコードベースのテスト自動化プラットフォームなど、多様な選択肢があります。本記事ではテスト自動化の検討を進める方々に向けて、テスト自動化のメリットやその対象、自動化ツールなどを紹介します。
テスト自動化とは
テスト自動化は、ソフトウェアテストの実行作業をテストツール等で自動化することです。これまでテスターが人手で行っていた作業を、テストコードやツールを用いて実行することで、効率的なテスト実行やヒューマンエラーの防止が実現できます。
①テスト自動化の目的やメリット
テスト自動化を行うことで、ソフトウェア開発の効率が大きく変わります。以下では、テスト自動化により得られる3つのメリットを紹介します。
(1)テスト人員の削減
テスト自動化によりテスターの作業工数が抑えられます。
ソフトウェアテストでは、同一の入出力を繰り返し行うようなケースが少なくありません。このような繰り返し作業は、自動化の実現が容易です。
たとえば、ソフトウェアで機能の追加修正が行われると、変更が行われた箇所以外への影響についてもテストが必要です。このようなテストは、変更の規模に関わらず必須ですが、変更のたびに人間の手で行うのは非合理的です。
テスト自動化によって、テスト作業工数を大幅に削減し、効率的なテスト体制を構築できるのです。
(2)人的ミスの抑制
手動テストは、テスト項目に沿って人の目でソフトウェアの動作を確認するプロセスです。そのため、作業量が増えると、テストの見落としや作業ミスを100%防ぐことは難しくなります。
一方、自動化されたテストであれば、システムが正常動作する限り、設定したテスト内容がミスなく実行されます。
また、ソフトウェアの拡張開発などでテスト範囲が広がれば、ヒューマンエラーの確率も高まります。ツールなどで自動化すれば、ヒューマンエラーの心配もありません。
(3)機能変更に伴う不具合の早期発見
ソフトウェアの機能が変更されるたびに自動的にテストが実行されることで、テスターの工数を割り当てることなく、早期に不具合(バグ)を発見できます。
プログラムは変数のタイプミスやif文の条件を1つ間違えるだけでも、動作が大きく変わってしまいます。自動テストによって、テストコードの不具合を早期に検知しやすくなります。
②テスト自動化の対象
テスト自動化の対象について、以下の3つを解説します。
(1)ソースコード
ソフトウェアのソースコードは、テスト自動化のメインの対象となります。
ソースコード上であれば、データ保存やデータ型のバリデーションといった、最小単位の処理を対象にテストが行えます。テスト対象が細分化されていることもあり、ソフトウェアの変更による不具合の検知が容易です。
ソースコードを対象とした自動テストは、利用しているプログラミング言語やフレームワークに合わせて自動化ツールを選定し、テストコードを作成する必要があります。そのため、テストの精度・網羅性は作成者のスキルに左右されます。
(2)API(アプリケーション・プログラミング・インターフェース)
ソフトウェアのコンポーネント同士が、互いにやり取りを行う際のインターフェース(データ形式)がAPIです。Webシステムであれば、JSON形式のREST APIが代表例です。
APIのテストでは特定の入力に対して、整合性のある出力結果が得られたかどうかをテストします。テスターは、ソフトウェアの内部構造を必ずしも把握する必要はありません。
自動化を行うにあたっては、入出力の組み合わせを網羅的に洗い出し、システムの出力結果が期待値通りになっているかを判定します。
(3)GUI(グラフィカル・ユーザー・インターフェース)
ボタンやアイコン、ドラッグ&ドロップなど人間が直感的に操作できるインターフェースをGUIといいます。
キーボードで命令文を入力してコンピュータ操作を行う、CUIと比較されます。GUIテストは実際にユーザーが操作する画面を対象にしたテストです。マウスやタッチパネルを用いた操作手順をテストツールに記録して、その操作をテストツールが自動実行します。
テスト自動化ツールの種類
テスト自動化を実現するために、開発者やテスター向けにさまざまなツールが提供されています。以下では、コードベースのツールとノーコードツールに分類して、テスト自動化ツールの種類を紹介します。
①コードテストツール
コードテストツールは、ソースコードを記述することで実施するテスト自動化ツールであり、プログラミングスキルを持つ開発者向けに提供されています。コードテストツールにもいくつか種類があり、テスト対象や目的が異なります。
(1)CI(Continuous Integration)
CIとは、Continuous Integrationの略で、継続的なインテグレーションを意味し、本番環境向けのソースコードに、開発者が変更を加えたソースコードを取り込むプロセス(開発手法)を示します。
CIそのものはテストツールではありませんが、テスト自動化においては、ソースコードの変更を検知してソースコードのビルドやテストコードを自動実行する役割を担います。CIが一般的でない時代は、開発者が個別に作業を行った後にテストをしていました。そのような開発手法においては、大きな手戻りが発生するリスクも高まります。
チームで共通管理しているソースコードに変更を反映するとテストが自動実行されるため、開発者は不具合の検知や修正に集中できます。また、CIが設定されることで、ビルドやテストの実行環境が共通化されるため、開発者間の作業環境の差異を意識する必要がなくなり、効率的なテスト自動化の環境が実現します。
(2)静的解析ツール
静的解析は、ソースコードの構造を解析して、コーディング規約や基本的な文法ミスを発見する手法です。ソースコードを実際に動作させる必要はありません。
人間の手で静的解析を行う代表的な手法は、開発者以外の第三者による目視でのコードレビューです。ただし、この人手によるコードレビューによる品質保証は、開発者のスキルに大きく依存します。
一方、静的解析ツールであれば、設定された指摘事項やルールに基づき自動で検知できるため、プログラムの品質担保が効率化されます。
(3)テスティングフレームワーク
テスティングフレームワークは、各種プログラミング言語に合わせたテスト用フレームワークです。JavaのJUnit、C++のGoogle Test、PHPのPHPUnit、RubyのRSpecに代表されます。
開発者はテスティングフレームワークを用いることで、複雑な処理に関する入出力の整合性テストなどを効率的に行えます。
②ノーコードツール
テスト自動化のためのノーコードツールを利用することで、プログラミング知識不要でテスト自動化を実現できます。
ノーコードツールとは、ソースコードを記述することなく、画面上の操作の順番などを設定することでシステム構築ができるツールです。業務効率化などさまざまな領域において、提供されています。
テスト自動化においても、一連の作業プロセスやソフトウェアの内部構造など、さまざまな対象についてテストコードを記述することなく、画面上でのドラッグ&ドロップでテスト設計・実行を行えるノーコードツールが存在します。
テスト自動化ツール4選
以下では、代表的な4つのテスト自動化ツールを紹介します。
①Selenium
Seleniumは、Thought Worksによって開発された、Web アプリケーションの UI テストを自動化するフレームワークです。Webブラウザの操作に特化しており、C#、Python、Javaなど数多くのプログラミング言語でテストを作成できます。
また、Selenium IDEは、FirefoxやGoogle Chromeの拡張機能として提供されているノーコードツールです。
Seleniumは、その柔軟性の高さから、Selenium単体でテスト自動化を行うだけでなく、ソフトウェアへの組み込みや、Seleniumをベースとした有料のテスト自動化ツールが数多く世の中で提供されています。
②Appium
Appiumは、モバイルアプリケーションやWindowsデスクトップアプリケーション向けのテストフレームワークです。
Selenium WebDriverから派生したツールで、さまざまなプログラミング言語でテストコードを記述できます。最大の特徴はクロスプラットフォーム対応で、iOSやAndroidなどOSごとにテストコードを重複して記述する手間を大幅に削減できます。
③Autify
Autifyは、日本発のテスト自動化プラットフォームです。
ブラウザ上で操作を記録することで、テスト自動化を実現します。テストの実行プロセスはスクリーンショット形式で録画されるため、視覚的にテストの実行結果を確認できます。
④mabl
mablは、E2E(End to End)テストの自動化に加えて、パフォーマンステストやスモークテストといった機能を持つテスト自動化ツールです。
ローカル環境でテスト実行する場合には、テスト実行回数に制限がありません。クラウド上で実行する場合、DOMスナップショットや、HTTPアーカイブなど、テスト結果のより詳細な分析が可能です。
テスト自動化に取り組む際の注意点
テスト自動化はソフトウェアテストを効率化する非常に魅力的な手段ですが、それだけで理想的なテストプロセスが実現するわけではありません。以下では、テスト自動化に取り組む上での注意点を紹介します。
①手動のテストも必要
ソフトウェアテストには、ユーザービリティテストなど、人間の感情や感覚が重要な観点となるテスト手法もあります。また、新たに追加された機能のテストなど、テストケースの成熟度の観点から、自動化が向かないテストも存在します。
このような点から、必ずしもテスト自動化が全てではなく、状況に応じてテスト自動化と手動テストを使い分けることが大切です。
②自動化のためにテスト設計が必要
テスト自動化を行うためには、テストパターンの洗い出しと、テストツールへの入出力の設定が必要です。このようなテスト設計作業は、ソフトウェアの要件定義書や仕様書に沿って誰かが行わなければなりません。
開発の規模が小さい間は設計作業の工数も少なく済みますが、規模が大きくなってからのテスト自動化は非常に大変です。中長期的な運用を考慮する上でも、ソフトウェア開発のできる限り早い段階で、自動化テストを取り入れる判断も必要です。
③システム仕様の変更に合わせた修正が必要
ソフトウェアに変更が発生すると、変更箇所の影響範囲を分析し、テスト内容を修正しなければなりません。特にSaaSのようにクラウド上で提供されるソフトウェアの場合、継続的な機能の改修や追加は一般的です。
ソフトウェアの開発が続く限り、自動化されたテスト部分の改修は常に伴うため、テスト分析や設計工数が必要になることを考慮の上、導入を進める必要があります。
④テスト自動化への過度な期待は禁物
テスト自動化は、テスト工数やヒューマンエラーの削減など、ソフトウェアの品質保証において非常に魅力的なアプローチです。
一方で、テスト自動化が手動テストよりもはるかに優れた手段かというとそうではありません。
変更の影響が小さいテストでは、テスト自動化で得られるメリットは大きいです。一方で、E2E(End to End)テストのように、システムの利用フローを一気通貫で確認する場合、テスト改修の頻度や工数が、自動化のメリット上回ってしまう可能性があります。自動化は魅力的な手段ですが、それだけであらゆる不具合を検知できるわけではない点に注意が必要です。
まとめ
テスト自動化を推進することで、ソフトウェアの品質向上やテスト工数の削減が期待できます。
一方で、自動化にもメリット・デメリットがあり、ソフトウェアテスト全体を効率的に進める上では、手動テストとの補完関係が重要です。
しかし、手動テストも含めた柔軟かつ幅広いテスト実施は、人的リソースやソフトウェアテストスキルの専門性という課題が残ります。
そこで十分なテスト体制を構築するために、テストツールや専門機関への外部委託も選択肢として考えられます。
Applauseは、世界200以上の国・地域で70万名以上のテスターを抱える、世界最大のクラウドテストソリューションです。
独自のテスト自動化ツールを採用し、1行のスクリプト言語も記述することなく、膨大かつ単純なテスト自動化を実現します。また、ソフトウェアテストについても手動テスト・テスト自動化両方を組み合わせた統合テストにも対応しています。
ソフトウェアテストでお困りの際は、お気軽にご相談ください。