ソフトウェアテストにおいて、モンキーテストとは、ユーザーがランダムな入力を与えてアプリケーションやシステムの動作を確認したり、アプリケーションやシステムがクラッシュするかどうかを調べたりする手法です。モンキーテストは通常、ランダムな自動単体テストとして実装されます。
「モンキー」という名前の由来は定かではないが、無限猿定理[ 1 ]に由来すると考える人もいる。この定理は、猿がタイプライターのキーボードを無限の時間ランダムに叩き続けると、ほぼ確実にウィリアム・シェイクスピアの全作品などの特定のテキストをタイプできるというものである。また、1983年以前にスティーブ・キャップスによって開発された古典的なMac OSアプリケーション「The Monkey」に由来すると考える人もいる。このアプリケーションはジャーナリングフックを使用してランダムなイベントをMacプログラムに送り込み、 MacPaintのバグをテストするために使用された。[ 2 ]
モンキーテストも、ストレステスト用の標準テストツールの一部としてAndroid Studioに含まれています。[ 3 ]
サルを使った実験は、賢いサルを使った実験と愚かなサルを使った実験に分類できる。
賢いサルは通常、次の特徴によって識別されます。[ 4 ]
賢いサルの中には、ユーザーの行動に基づいてテストを実行し、特定のバグが発生する確率を推定できる「優秀なサル」と呼ばれるものもいる。
「愚かなサル」、あるいは「無知なサル」とも呼ばれるサルは、通常、以下の特徴によって識別されます。
モンキーテストは、初期状態で発生するエラーを特定するための標準的な手法です。テスト対象となるシナリオは通常アドホックであるため、モンキーテストは負荷テストやストレステストにも利用されます。モンキーテストの本質的なランダム性により、システム全体を破壊しかねない重大なバグも発見できます。モンキーテストは設定が簡単なため、様々なアプリケーションに適用可能です。適切な状態モデルを用いて正しく設定された賢いモンキーは、様々な種類のバグを発見する能力に長けていることが証明されています。
モンキーテストのランダム性により、発見されたバグの再現が困難または不可能になることがよくあります。モンキーテストで発見された予期せぬバグは、分析が困難で時間もかかる場合があります。システムによっては、バグが見つかるまでにモンキーテストが長時間続くことがあります。賢いサルの場合、有効性は提供される状態モデルに大きく依存し、優れた状態モデルの開発にはコストがかかる場合があります。[ 1 ]
モンキーテストはファズテスト[ 5 ]と同じように扱われることもあり、この2つの用語は通常一緒に使われますが[ 6 ] 、モンキーテストはランダムな動作が中心であるのに対し、ファズテストはランダムなデータ入力が中心であると主張して、両者は異なると考える人もいます[ 7 ] 。モンキーテストはアドホックテストとも異なり、アドホックテストは計画やドキュメントなしで実行され、アドホックテストの目的はシステムをランダムにサブパートに分割してその機能を確認することですが、モンキーテストではそうではありません。