自動化テストとは何でしょうか?自動化テストは手動テストに取り代わることができますでしょうか?
ソフトウェアテスト(テストとも呼ばれます) は、ソフトウェア開発プロセスにおいて必須かつ不可欠なステップです。テストを実施することは、開発した製品が顧客の要求を満たされ、安定して動作でき、高性能であることを確保するためです。
しかし、望ましい結果を達成しかつ時間やコスト及びパフォーマンスを最適化するためのどんなテスト方法を導入するか、専門家やテスターが常に懸念している問題ということです。
近年、自動化テストのトレンドはますます人気が高まっていると言われます。多くの人は、手動テストのコストを負担する代わりに、自動化コードを開発してテストすれば、より速く、より安く、手動テストと同じ結果が得られると考えています。では、自動化テストとは何ですか?また、自動テストは将来的に手動テストに取って代わることができるのでしょうか?
自動化テスト(Automation Testing)とは何でしょうか?
ソフトウェアテスト(テスト)は、実際の結果と期待される結果を確認及び比較するためのソフトウェアテスト手法です。手動テストとは、テスターが開発製品テストプロセスの各ステップを順番に手動で実行し、実際結果が仕様書で記載される期待結果と同様であることを確認するためのことです。
テスト自動化は、テストを人の手にかわってテストツールやソフトウェアで自動化テスト実行を指します。自動化テスターは、コードを記述したり、Selenium、Test Complete、Jmetter などの自動化テストツールを使って、すべてのステップを自動的に実行するようにします。
このテスト技法は、反復テストや、手動で実行するのが難しいテストやタスクをテスト自動化するために導入されます。手動テストの場合、人は毎日おなじスピード、正確さなどのパフォーマンスを発揮できない。それで、同じステップを手間で実施した時と同じ速度、正確さで繰り返すには自動化が必要です。
テストのプロセスには、「テスト計画」から「テスト完了」までいくつかあります。テスト自動化は、テストを人の手にかわってロボットやソフトウェアで自動テスト実行を指し、テストにおけるプロセスの「テスト実行」に該当します。
テスト自動化の種類
自動化テストは、テストの種類、テストフェーズ、テスト方法などの基準に基づいて、さまざまなタイプに分類されます。 自動化テストには一般的に 3 つのタイプがあります。
ユニットテストの自動化
自動化ユニットテストは、ソースコードをチェックするために使用されるテスト手法です。製品の機能及び開発者のコードの習慣・方法におけるエラーを特定するためです。
NUnitとJUnitは、現在最も人気のある2つのテストツールです。さらに、MicrosoftはMSTest と呼ばれる単体テスト用の独自のツールも提供しています。
APIテスト自動化
このテスト技法は、APIリクエストとレスポンスが安全で暗号化されているかどうかを確認するために使用されます。
GUI テスト自動化
この自動化テストの技法は、ソフトウェアの視覚的側面をテストし、アプリケーションのユーザーインターフェイス、特にユーザーがアプリケーションで (マウスとキーボードを使用して) 行う操作を扱うため、最も困難なテスト技法です。したがって、早期にバグを発見でき、回帰テストや時間がかかりすぎるフォームへの入力には導入されているのことです。最も人気があり有名なGUI自動化テストツールは、Micro Focus Unified Functional testing (UFT)、Selenium、Test Complete、および Microsoft Coded UI です。
テスト自動化のメリット
信頼性の高い:あらかじめ決められた手順に従って正確にテストを実行します。したがって、データの誤入力などの多くの人為的ミスが回避可能です。テスト自動化を実行すると、何度繰り返しても同じ操作と結果が得られます。それで、テストケース数の多いソフトウェアをテスト実行する場合に不必要なリスクが回避されます。
包括性:テスト自動化はアプリケーションの全機能に対してカバレッジを確保できるテストケースを作成したり、または効果的なテストケースでアプリケーションから隠された情報を収集したりできます。これは手動テストでは実行できません。
回帰テストが必要な場合、また時間がかかる場合、自動化テストは顕著な効率をもたらします。(昼夜を問わず、人間がいない場合でもテストを実行できます)
再利用可能:自動化ツールとスクリプトは、適当に調整することで、さまざまなアプリケーションやバージョンの多いアプリケーションに導入できるようになります。または、同じ内容を多くの環境 (テスト環境、ベータ環境、実稼働環境など) でテストが必要な場合は、テストスクリプトを作成するだけで、新しい環境にデプロイするたびに、URLの情報を変更してから自動的にテストが実施されます。
ソフトウェアの品質とパフォーマンスの向上:最小限のリソースで、より短い時間でより多くのテストケースを実行できます。テスト自動化のツールを使用すると、手動テストに比較して自動化テストがより迅速になります。 テストケース実行を完了するにはわずか30秒しかかかりませんが、手動テストで実行する場合は少なくとも5分かかるとのことです。したがって、自動化テストを適切に適用すれば、多くのコスト、時間、労力を節約できます。
どんなテスト作業は自動化に向けているか
基本機能の正常系テスト
自動化テストを開発プロセスに組み込むことで、テストの手間を減らして、早い段階でのバグ検出が期待できます。
E2Eのテスト
運用フローに沿った一連の流れをテストすることで、アプリケーション全体が期待通りに動作しているかを判断できます。このテストは小さな機能単位でテストするというよりは、ユーザーに公開する前に実施し、リリースして問題ないか判断できます。
単機能テスト
テストパターンの網羅を確認するテストで、入力バリエーションを書確認するときにファイルなどの種類のチェックで使用します。これはその機能に仕様変更がある場合にリグレッションテストとして利用できます。
単純だが手動で実行するのが面倒な作業
テストデータの準備など、手動で実施するのが面倒な繰り返し作業を自動化することで作業の効率化できます。
手動でできないテスト
手動でできないテストについてはツールを使ってテストする必要がある、何百、何千とあるデータを期待結果どおりか比較します。
例えば、画像データをピクセル単位に比較するために異なるブラウザや異なる端末やOSで、アプリケーションを並列してテストする大量の人数(1万人など)の負荷をかけてアプリケーションをテストします。
ただし、テスト自動化に向けていない作業があります。これらの作業にテスト自動化を導入する手動テストに比較して効果を取れないと思われます。詳細は以下となります。
障害復旧などのフェールオーバーテスト
意図的な失敗を発生させ、アプリケーションが期待通りに動作をするかを確認するテストだが、意図的な失敗を発生させるのに、人の介入やその他のツールの操作が必要になる場合が多いです。このようなテストについては、自動化するコストも増える割に発生頻度も限られることから、自動化はあまり推奨されません。
テスト自動化の導入初期コストは高額
テスト自動化の導入にはかなりの費用が掛かります。例えば、自動化ツールの購入コストです。その中、HP Quick test proなどのツールのコストが非常に高いです。また、テストスクリプトの作成と保守する際にコストも非常にかかります。
あるテストケースは、手動テストを実行する場合に1時間がかかりますが、自動テストの実行に変更すると、テストスクリプトを準備する必要があります。(難易度が高い場合、テストスクリプトの作成に6 ~ 7時間かかります。)
また、テストスクリプト作成者には、プログラミングスキル並びテスト実行のツールが必須です。 したがって、自動化テストのコストは手動テスト高く、より高度なスキルが必要な仕事であるためです。(自動テスターには技術的な経験やプログラミングスキルが必要です。)
一度しか実行しないテスト
テストを実施するのに、大規模な前準備が必要となり、1度テストを実行するとまた前準備をやり直す必要があるテストです。
例えば:ユーザーが削除できないデータにテストなどがそれにあたります。テストするために毎回表面だけでなく、裏側の関連データも削除する必要があり、一番最初のユーザーのみが利用する初回しかありえない状況のテストである場合のテストは手動で確認したほうが効率が良いです。
網羅性が高くない
有用性をテストするときに自動的テストできません。使用可能なことのテストは人間が実行する必要があります。 ユーザーンターフェイス、インストール、互換性、リカバリなどの領域は依然として手動で実施しなければなりません。
自動化テストは、予測可能なもの、または人間が期待した結果が実際に発生するもののみをテストできます。 さらに、UI が固定されていない場合、テストを自動化することはできません。ユーザーインターフェースが常に変化する場合、スクリプトのメンテナンスに関連するコストが非常に高くなります。
さらに、自動化テストにはいくつかのデメリットが残ってるため、手動テストを取り代わることができないと思われます。
自動化テストには依然としてバグが含まれる可能性があります。
自動化テストも人間より開発されたアプリケーションであるため、バグが発生される可能性があります。自動化テストアプリケーションに不具合があれば、間違った結果が生成されます。これは製品の品質に影響を及ぼします。手動テストを実施する場合、人間がこれらのエラーを特定し、テストが正しく行われていることを確保できます。
拡張性・保守性が高くない
同じプロジェクト内で自動化テストケースの範囲を拡張することは手動テストよりもはるかに困難です。更新や編集にはデバッグやデータの変更、データの入力、新規のソースコードの更新などの多くの作業を実行しなければならないためです。
まとめ
テスト自動化を適切に使用することで、人と機械でやることを効率よく分離し、ビジネスや事業のスピードアップと継続でき、十分な品質を担保できるようになります。
とりあえず、なんとなくでテスト自動化を導入すると、思わぬトラブルを引き起こしかねません。何を自動化して、何を自動化しないかを適切に見極めることが重要となります。
この記事が気に入ったらサポートをしてみませんか?