探索的テストとは?
探索的テストとは、事前に計画したテストケースやテスト仕様書を使わず、テスター自身が実際にアプリケーションやソフトウェアを操作し、その場ですぐにテストケースを想定して進めるテスト手法です。事前にテスト仕様書やテストケースを用意するのではなく、テストを実施する過程で明確なテスト項目を作成し、実施したテストの内容を記録していきます。
探索的テストでは、テスターがテスト中に不具合を予見した場合、その部分に焦点を当て、集中的にテストを繰り返しながら、機動的かつ迅速にテストを実施することが特徴です。つまり、不具合を探りながらテスト内容を深く進めていきます。これにより、テストに必要な時間が短縮され、未知のバグの発見が早まり、ソフトウェアの予期せぬ動作を発見できる可能性が高まります。
探索的テストは、アジャイル開発やDevOpsなど、継続的な開発環境で使用するための非常に価値のあるテスト手法として認識されています。
記述式テスト(スクリプトテスト)との違い
記述式テストとは、事前に計画されたテストケースや、スクリプトを使用してテストを実施する方法です。スクリプトテストとも呼ばれます。
記述式テストでは、事前にテスト設計して、その設計に基づいてテスト仕様が用意されます。仕様書に記載された項目に沿ってテストを実施するため、テストの目的や手順が明確であるというメリットがあります。しかし一方で、仕様書の作成に時間がかかるというデメリットもあります。
また、テスト仕様書に沿ったテストだけでは、万が一不具合が発生した場合、不具合のケースとして明確に特定できたとしても、その原因究明が情報不足のために時間がかかってしまうという弊害もあります。
これに対して、探索的テストでは、事前にテスト仕様を作成する必要がなく、どの機能をテストするのか、テストの目的は何なのかが明確になれば、すぐにテストを実施することができます。
記述式テストとの大きな違いは、不具合が見つかったときに、その不具合に関連する部分を集中的に深堀してテストを実施するなど、文字通り探索的にテストを実施することができるため、予見できなかったバグを発見しやすいことです。
アドホックテスト、モンキーテストとの違い
アドホックテストとは、テスト仕様書やテストケースを事前に準備することなく、場当たり的にテストを実施する手法です。
テスト仕様やテストケースを事前に準備しないという点では、探索的テストと似ています。そのため、記述式テストに比べてスピーディーなテストが可能だというメリットも探索的テストと共通しています。
しかし、アドホックテストが文字通り「その場限り」であるのに対して、探索的テストはテスターの知識と経験に基づき、探索的に実施されるものであり、アドホックテストとは一線を画すテスト手法だといえます。
モンキーテストでは、テスター自身にシステムやソフトウェアに関する知識や開発経験は不要です。むしろモンキーテストの目的は、システムやソフトウェアを極めてランダムに操作することで、予期せぬ不具合を発見することにあります。これは、一定の知識や経験に基づいて不具合をある程度予測し、探索的にテストを実施する探索的テストとは根本的に異なるテスト手法だといえます。
探索的テストのメリット
探索的テストには、主に次のような3つのメリットがあります。
不具合検知のスピードアップ
探索的テストでは、必ずしも網羅的にテストを実施するのではなく、たとえば、新たに追加された機能を中心に、テスターの知識や経験をもとに、ある意味ピンポイントでテストを実施することができ、テスト時間の短縮や不具合検知のスピードアップを図ることができます。
テスト仕様書を必要としない
探索的テストではテスト仕様書を作成する必要がないため、そのための労力と時間が大幅に削減できます。
アジャイル開発に向いている(テストプロセスのスピードアップ)
近年広く採用されているアジャイル開発では、テストプロセスに要する時間も短縮することが求められます。その点、探索的テストは優位性があり、アジャイル開発の時間短縮に高い効果が期待できます。
探索的テストのデメリット
探索的テストには、主に次のような3つのデメリットがあります。
効果がテスターの経験値に依存する
記述式テストなどは、テストを実施する前に詳細なテスト仕様書やテストケースを用意するため、テスター自身に一定レベルのスキルや知識があれば、高度な知識やスキルは不要です。
しかし、探索的テストの場合、テストの精度はテスターの知識と経験に大きく影響されます。探索的テストそのものがエンジニア自身の知識と経験に基づくものである以上、優れた知識と経験を持つエンジニアがテスターを務めなければ、探索的テストは有効に機能しません。
しかし、このデメリットはツールを活用することで解消できます(本稿「探索的テストと網羅的テストを実施できる「Eggplant DAI」」で詳述)。
テスト自体の品質保証が難しい
探索的テストの主な目的は、開発中のシステムやソフトウェアに潜むバグなどの不具合をいち早く発見することです。そのため、事前の準備や決められた項目を決められた手順でテストする必要がある記述式テストとは異なり、探索的に不具合をテストすることで素早く実施でき、バグを早期に発見することができます。
しかしその反面、仕様書などがないため、テスト項目にヌケ・モレがないことを証明するのが難しい傾向にあります。また、テスト項目や手順、前提条件などが事前に明確に規定されていないため、テストそのものの品質保証が後々問題になるケースも少なくありません。
網羅性を担保できない
テストにおいては、網羅性を担保することも重要です。しかし、探索的テストは網羅性を前提としたテスト手法ではなく、不具合が発生しやすいポイントを絞り込んでスピーディーにテストすることを目的としているため、網羅性は担保されません。
探索的テストと網羅的テストの両立が重要
探索的テストでは網羅性が担保できないことから、システム開発・ソフトウェア開発におけるテストでは、探索的テストと網羅的テストを並行して実施することが有効です。
網羅的テストは、対象システムやソフトウェア自体の品質保証につながる重要なテストです。網羅的テストは、基本的にすべてのパスとすべてのパラメータを使ってテストすることを前提とするため、開発者の観点から安心感を与えますが、時間を要します。
一方、開発者もまた、探索的テストを迅速に実施することで、バグやその他の不具合をできるだけ早く発見し、排除したいと考えています。
そのため、より良いシステムやソフトウェアを開発するためには、網羅的テストと探索的テストの両方を同時に実施することがますます重要になってきています。
探索的テストと網羅的テストを実施できる「Eggplant DAI」
丸紅情報システムズでは、網羅率を重視する網羅的テスト、不具合をスピーディーに発見できる探索的テストなど、効率的にテストを実施したい開発現場のニーズを満たすソリューションとして、テスト自動化ツール「Eggplant DAI」を推奨しています。
初期設定が完了すると、Eggplant DAIはAIとディープラーニングに基づいた探索的テストを自動で実施します。テストに必要なシナリオをEggplant DAIが自動生成し、そのシナリオに沿ってテストを繰り返します。
Eggplant DAIでは、探索的テストを実施する中で、どこかに不具合が見つかった場合、搭載されたAIがその不具合に重みをつけ、該当箇所を集中的にテストします。これにより、テスト時間を大幅に短縮できます。たとえば、操作手順の2番目の数値入力に不具合が見つかった場合、AIはその部分のテストを繰り返し実施することを判断します。そして、必要に応じてテスト経路を動的に変更し、経路を変更したテストを適宜実施し続けます。また、同時に網羅性を担保するため全てのノード(All Nodes)、全てのペア(All Pairs)についてもテストが実施されます。
さらに、不具合が発生した場合のログを残すことで、後の修正作業を円滑に進められるようになります。
Eggplant DAIでは、開発者が必要と判断したテスト項目を追加することも可能です。シナリオが自動化されたからといって、必要なテスト項目が含まれないという心配はありません。Eggplant DAIを使えば、より納得感のあるテストを実施することができます。
Eggplant お役立ち資料
Eggplantのカタログ、国内事例をダウンロードいただけます。