従来から行われているソフトウェアテスト(スクリプトテスト)では、テスト設計やテストケースの作成をすませてからテストを行います。そのため実際にテストを行うまでに、時間を要するのが特徴です。

対して探索的テストは、事前準備が少なくてすみフットワーク軽くソフトウェアテストを実行できます。その他、効率的にバグを発見できるなどのメリットがあるのも注目を集めている理由です。

この記事では探索的テストとは何かといった基本から、従来型のソフトウェアテストと比較した場合のメリット・デメリットまで解説しています。

探索的テストとは

探索
探索テストとはソフトウェアテストのスタイルの1つで、あらかじめテストケースを用意せずに「手探り」で行うテストを指します。手探りといっても、場当たり的に行うわけではありません。

テストの実行時には、あらかじめテストの目的を設定しつつ、テストチャーターを用意して行われることが多くなっています。テストチャーターとは、テストの目的を完了できたと判断するための指針です。また探索的テストでは、テスト設計やテスト記録などを同時に行いながら継続します。目的別に行うため、セッション(時間)で区切って行うことが多いのも特徴です。

スクリプトテストとの違い

スクリプトテストでは、テストの具体的な手順や内容をまとめた「テストケース」をあらかじめ作成してから実行します。それがあらかじめテストケースを用意せずに行う探索的テストとの主な違いです。

またスクリプトテストでは、テスト計画→設計→実行と順番に行います。一方の探索的テストでは、テスト結果等を見ながらテスト計画・テスト設計を行い、同時にテストを実行していくので、その点も両者の違いです。

モンキーテスト・アドホックテストとの違い

モンキーテスト・アドホックテストは、「手探りで」テストを継続するという点では探索的テストと同じで、実際に混同されることも多いです。しかしながら、両者には大きな違いがあります。

モンキーテスト・アドホックテストは、あくまで思い付き・場当たり的に行われるテストであり、精度は高くありません。対して探索的テストでは、テスト目的やテストチャーターを用意してから開始されます。

またテストの実行時においても、何も記録を取らずに場当たり的にすすめていくモンキーテスト・アドホックテストに対し、探索的テストではテストの手順等の内容を記録しながらすすめていくことが推奨されています。

探索的テストを行うメリット

それではスクリプトテストと比較して、探索的テストを行うメリットはどういったものでしょうか。1つずつみていきましょう。

効率よくバグを発見できる

探索的テストのメリットの1つ目は、テストケース作成等の準備にかかる工数を削減できる点です。そのため開発工数に余裕がないときに使えたり、フットワーク軽くテストを実行し効率的にバグを発見したりすることができます。また探索的テストであれば、必要と思われる箇所に対し集中的にテストを行うといったことも可能です。

柔軟性が高い

探索的テストではソフトウェアの振る舞いを見ながら、その状況に適したテストを臨機応変に行える点も大きなメリットです。あらかじめ用意されたテストケースを忠実に実行するやり方では、検知できなかったようなバグを発見することもあります。

暗黙知を活用できる

探索的テストでは不明点があったときに逐次、開発者や他メンバーに質問しながら次の展開を検討します。そのためテスト内容が固定されたスクリプトテストと異なり、それまで共有されなかった暗黙知を共有・活用しやすいのもメリットです。

探索的テストのデメリット

探索的テストのメリットについてみてきました。それでは反対にデメリットはどんなところにあるでしょうか。こちらも、1つずつ見ていきましょう。

テスターのスキルや経験に依存する

探索的テストでは、スクリプトテストのように事前にテストケースのレビュー等は行われません。実行者に状況に応じた臨機応変な判断が求められます。そのためテスターのスキルや経験値によって、その品質が大きく変動してしまうのがデメリットです。

なお、monoAI technologyではテストチャーターを活用することで、属人化の軽減を図っています。具体的には、機能やテスト観点をあらかじめリストアップし、テスターはそれをヒントにして次に何をするかを検討するわけです。またテストの実行結果を適宜集計し可視化することによって、バグが出やすいテスト観点を発見しやすくします。

これらの工夫によって、熟練した一部のテスターでなくても品質の高いテストが行えるようになるわけです。

非機能テストには向かない

非機能テストとは、文字通り「機能以外」を検証するテストをさします。「どのくらい負荷に耐えられるか」「ユーザビリティはどのくらいあるか」等が、非機能テストの目的です。

非機能テストでは、十分なテスト環境の準備が必要となります。またテスターのスキルや経験値で実現できることは限られています。そのためテスターのスキルに依存し臨機応変にすすめる探索的テストは、非機能テストに適していないわけです。

品質保証には向かない

事前に必要十分なテストケースを用意して実行されるスクリプトテストは網羅性が高く、対象ソフトウェアの品質も保証しやすいです。対して探索的テストは、必要なテストケースを用意してから開始するわけではないので、スクリプトテストのような網羅性は確保できません。そのため品質保証が必要となるようなテストには、探索的テストの手法は適していないわけです。

なおmonoAI technologyでは探索的テストにおいても、テスト結果を集計し「テストをどれくらい行ったか」を可視化しながら進めるようにしています。そのため一般的な探索的テストと比較して、網羅性を高めやすくなっているのが特徴です。

探索的テストはスクリプトテストと補完的に行うのが効果的

これまで見てきたようには、探索的テストはスクリプトテストにはないメリットとデメリットがあります。一概にどちらだけが必要とは言えません。

そのため探索的テストはスクリプトテストを実行した後に、スクリプトテストでは足りない箇所を補完するように行うのが効果的です。

monoAI technologyでも、基本的にはスクリプトテストとあわせて、探索的テストを実行するようにしています。

まとめ

探索的テストとは事前にテストケースを作成せず、状況に応じて臨機応変に進めていくソフトウェアテストの手法です。一方で場当たり的に行うモンキーテスト・アドホックテストと異なり、あらかじめテスト目的やテストチャーター等を用意し、それらを参考に進められます。

また探索的テストは、テストケースを事前に作成する従来型のスクリプトテストと比べ、効率よくバグを発見できたりより柔軟に実行できたりするといったメリットがあります。スクリプトテスト・探索的テストそれぞれにメリット・デメリットがあることから、相互補完的に両方行うのが最も効果的です。