Was sind Affen- und Gorilla-Tests? Beispiele, Unterschied

⚡ Intelligente Zusammenfassung

Beim Monkey-Testing werden zufällige, ungeplante Eingaben in eine laufende Anwendung eingespeist und beobachtet, ob diese überlebt. Dadurch werden Abstürze, Einfrieren und unbehandelte Zustände lange vor dem Schreiben eines vordefinierten Testfalls aufgedeckt.

  • 🐒 Kernidee: Zufällige Klicks, Tastatureingaben und Gesten suchen im System eher nach Schwachstellen als nach erwarteten Ergebnissen.
  • 🦍 Gorilla-Kontrast: Beim Gorilla-Testing wird ein Modul wiederholt und gnadenlos bearbeitet, während beim Monkey-Testing die gesamte Anwendung durchsucht wird.
  • 🧠 Drei Noten: Dumme, kluge und brillante Affen unterscheiden sich darin, wie viel sie über das zu testende System wissen.
  • ️ Ehrlicher Kompromiss: Günstig und schnell im Betrieb, aber Fehler sind schwer zu reproduzieren und eine vollständige Abdeckung kann nicht garantiert werden.
  • ️ Werkzeug: Android UI/Application Exerciser Monkey, MonkeyRunner und ähnliche Tools generieren automatisch Ereignisströme.
  • 🎯 beste Passform: Frühe Builds, interaktive Schnittstellen und Stabilitätstests, immer in Verbindung mit skriptbasierten und explorativen Tests.

Vergleich von Monkey-Testing und Gorilla-Testing im Softwaretest

Was ist Monkey Testing?

Affentest Monkey-Testing ist eine Softwaretestmethode, bei der der Tester zufällige Eingaben in eine Anwendung macht, ohne vordefinierte Testfälle, und das Verhalten der Anwendung überprüft, insbesondere ob sie abstürzt. Ziel des Monkey-Testings ist es, Fehler und Bugs durch experimentelle, unstrukturierte Interaktion aufzuspüren.

Der Name leitet sich von einem einfachen Bild ab, das unten abgebildet ist.

Tester, der die Rolle des Affen übernimmt und während des Affentests zufällige Eingaben macht

  • Beim Monkey-Testing wird der Tester (und manchmal auch der Entwickler) als „Affe“ behandelt.
  • Wenn ein Affe einen Computer benutzen würde, würde er Aufgaben zufällig ausführen, ohne das System zu verstehen.
  • Auf die gleiche Weise wendet der Tester zufällige Eingaben auf das zu testende System an, um Fehler zu finden, ohne vorher einen Testfall zu definieren.
  • In einigen Fällen zielen Affentests darauf ab, Unit-Test or GUI-Tests.

Was ist Gorilla-Test?

Gorilla-Test ist eine Softwaretesttechnik, bei der ein Modul des Programms wiederholt getestet wird, um zu bestätigen, dass es korrekt funktioniert und keine Fehler enthält.

Ein einzelnes Modul kann hundertmal oder öfter auf exakt dieselbe Weise getestet werden, weshalb Gorilla-Testing auch als „frustrierendes Testen“ bekannt ist. Monkey-Testing verteilt sich zufällig über die gesamte Anwendung; Gorilla-Testing hingegen testet gezielt eine Stelle, bis ein Fehler auftritt oder die Anwendung sich als stabil erweist.

Arten von Affentests

Monkey-Testing wird in Kategorien unterteilt, je nachdem, wie gut der Tester das System kennt. Das folgende Diagramm fasst die drei Typen zusammen.

Dumme, kluge und brillante Affenarten im Test

  • Dummer Affe: Der Tester hat keine Kenntnis vom System oder dessen Funktionsweise, und es gibt keine Gewähr dafür, dass die Eingaben gültig sind.
  • Schlauer Affe: Der Tester hat eine genaue Vorstellung vom System, seinem Zweck und seiner Funktionsweise, navigiert darin und liefert gültige Eingaben.
  • Brillanter Affe: Der Tester arbeitet mit dem Verhalten realer Nutzer und kann angeben, wo Fehler wahrscheinlich auftreten.

Affentest vs. Gorillatest vs. Ad-hoc-Test

Affentests, Gorillatests und Ad-hoc-Tests Sie haben einen unvorhersehbaren Charakter, weshalb sie oft verwechselt werden. Die beiden folgenden Tabellen verdeutlichen die Unterschiede.

Affentest vs. Gorillatest

Affentest Gorilla-Tests
Die Tests wurden zufällig durchgeführt, ohne dass speziell vordefinierte Testfälle vorab festgelegt wurden. Weder vordefiniert noch zufällig – es werden einfach dieselben Prüfungen wiederholt.
Wird am gesamten System durchgeführt und kann zahlreiche Testfälle umfassen. Die Durchführung erfolgte an einigen ausgewählten Modulen mit wenigen Testfällen.
Ziel ist es, einen Systemabsturz festzustellen. Ziel ist es zu überprüfen, ob das Modul ordnungsgemäß funktioniert.

Monkey-Testing vs. Ad-hoc-Testing

Affentest Ad-hoc-Tests
Die Tests wurden zufällig durchgeführt, ohne dass speziell vordefinierte Testfälle vorab festgelegt wurden. Die Durchführung erfolgte ohne Planung oder Dokumentation, daher wurden keine Testfälle oder SRS vorbereitet.
Die Tester wissen möglicherweise nicht, was das System ist oder wozu es dient. Der Tester muss das System gut verstehen, bevor der Test beginnt.
Ziel ist es, einen Systemabsturz festzustellen. Ziel ist es, das System nach dem Zufallsprinzip in Teilsysteme zu zerlegen und deren Funktionalität zu überprüfen.

Vor- und Nachteile des Affentests

Da bei dieser Technik die Planung gegen die Geschwindigkeit eingetauscht wird, beruhen ihre Vorteile und ihre Schwächen auf derselben Eigenschaft.

Vorteile des Affentests

  • Neue Arten von Fehlern: Dem Tester steht es frei, auch außerhalb der zuvor genannten Szenarien zu arbeiten, wodurch Fehler aufgedeckt werden, an deren Skript niemand gedacht hat.
  • Einfach auszuführen: Das Anordnen zufälliger Aktionen auf zufällige Daten ist eine schnelle Möglichkeit, das System zu testen.
  • Less Fachkräfte: Affentests können oft auch ohne hochqualifizierte Testpersonen durchgeführt werden.
  • Less teuer: Es benötigt wesentlich weniger Aufwand für Einrichtung und Betrieb als eine skriptbasierte Suite.

Nachteile von Affentests

  • Fehler können schwer zu reproduzieren sein: Da die Eingaben zufällig sind, ist es unter Umständen nicht möglich, einen Fehler ohne einen aufgezeichneten Startwert zu reproduzieren.
  • Less Richtigkeit: Der Tester kann kein genaues Szenario definieren und kann die Richtigkeit des Abgedeckten nicht garantieren.
  • Technisches Fachwissen ist nach wie vor hilfreich: Damit die Ergebnisse aussagekräftig sind, benötigen die Tester gute Fachkenntnisse.
  • Langsam im Verhältnis zum Ertrag: Die Testläufe können sich über einen langen Zeitraum erstrecken und dennoch nur wenige Fehler liefern, wodurch Lücken im System entstehen.

Wie man Affentests durchführt

Monkey-Testing wird wesentlich effizienter, wenn ein Tool den Prozess steuert und er gegen … ausgeführt werden kann. Android Erstellt sowohl Desktop- als auch Webanwendungen. Der allgemeine Ablauf ist wie folgt:

  1. Registrieren Sie die zu testende Anwendung bei dem Tool oder dem dedizierten Server, der sie ausführen wird.
  2. Bereiten Sie die Referenzen und Konfigurationen vor, die das Tool zum Erstellen einer Testsuite benötigt.
  3. Führen Sie die erstellte Testsuite aus.
  4. Lassen Sie das Tool sein Protokoll schreiben – die Protokolldatei „monkey test“ zeichnet jedes generierte Ereignis und die Ergebnisse auf.
  5. Lassen Sie den Vorgang so lange laufen, bis das System einen Absturzpunkt erreicht, an dem die fehlerhafte Aktion im Protokoll erfasst wird.
  6. Teilen Sie den Bericht mit dem zuständigen Team und speichern Sie die Testdaten zur späteren Verwendung.

Bewahren Sie alle Protokolle auf. Ein Zufallslauf ist später nur dann nützlich, wenn die Ereignissequenz und der zugehörige Seed gespeichert wurden. Mängelmanagement kann den Absturz auf eine reproduzierbare Eingabe zurückführen.

Affen-Testwerkzeuge

Monkey-Testing ist üblicherweise automatisiert, da eine Maschine Tausende von Ereignissen generieren kann, während eine Person nur einige Dutzend erzeugt. Die gängigen Optionen sind:

  • UI/Anwendungs-Übungsaffe: ein in integriertes Befehlszeilentool Android das läuft in der adb shell und sendet pseudozufällige Datenströme von Benutzerereignissen, wie Tippen, Gesten und Tastendrücken, sowie Systemereignisse an ein Gerät oder einen Emulator.
  • MonkeyRunner: ein separates Python API Es steuert Geräte und Emulatoren von einer Workstation aus, sendet spezifische Befehle und erstellt Screenshots. Trotz des Namens ist es nicht dasselbe Tool wie der Exerciser Monkey.
  • UI Automator und Appium: General mobile Tests Frameworks, die so programmiert werden können, dass sie während eines Builds halbzufällige Ereignissequenzen auslösen.
  • Fuzzing-Tools wie AFL: Die gleiche Idee der Zufallseingabe, angewendet auf Daten anstatt auf Gesten, wird in Fuzz-Tests.

Die Tool-Unterstützung für Monkey-Tests ist geringer als für skriptbasierte Tests. AutomatisierungstestsDaher kombinieren die meisten Teams einen generischen Ereignisgenerator mit ihrem bestehenden Framework, anstatt ein dediziertes Produkt zu kaufen.

Wann man Monkey-Testing einsetzen sollte

Monkey-Testing verdient seinen Platz eher in bestimmten Situationen als als allgemeiner Ersatz für geplante Tests.

Verwenden Sie es, wenn:

  • Für eine frühe Version ist ein einfacher Stabilitätscheck erforderlich, bevor formale Testfälle vorliegen.
  • Die Benutzeroberfläche ist hochgradig interaktiv – Spiele, Zeichenwerkzeuge, Mediaplayer – und das tatsächliche Nutzerverhalten ist schwer vorherzusagen.
  • Sie möchten ein Bad nehmen oder Der Stress Ein Prozess, der über viele Stunden hinweg nach Abstürzen, Speicherlecks und unbehandelten Zuständen sucht.
  • Eine Freigabe hat die vorprogrammierten Prüfungen bestanden, und Sie möchten eine unabhängige Überprüfung durchführen, um sicherzustellen, dass alles, was vom Skript nicht berührt wurde, abgedeckt ist.

Vermeiden Sie es, wenn:

  • Sie benötigen wiederholbare Nachweise dafür, dass eine Anforderung erfüllt ist – das ist die Aufgabe eines schriftlichen Testfall.
  • Der Build ist so instabil, dass jeder Durchlauf sofort abstürzt, wodurch alles hinter dem ersten Fehlschlag verborgen bleibt.
  • Die Zeit drängt, da ein zufälliger Durchlauf keine Garantie dafür bietet, etwas zu finden.

In der Praxis erzielt man die besten Ergebnisse durch die Kombination verschiedener Ansätze: Skriptbasierte Tests decken die bekannten Abläufe ab. exploratives Testen Er erforscht das Unbekannte bewusst und testet mit Affen das, was beide für unmöglich hielten.

Häufig gestellte Fragen

Der Name ist eine Anspielung auf das Bild des unendlichen Affen: Ein Affe, der lange genug wahllos auf Tasten schlägt, erzeugt irgendwann etwas Sinnvolles. Übertragen auf Software führt die zufällige Eingabe schließlich zu Zuständen, die der Entwickler nicht vorhergesehen hat.

Exploratives Testen ist zielgerichtet: Ein Tester stellt eine Hypothese auf, untersucht sie und passt sie an. Affentests hingegen sind bewusst ungerichtet. Das eine beruht auf Urteilsvermögen, das andere auf der Anzahl und dem Zufall der Testpersonen.

Beiden Verfahren liegt die Verwendung von Zufallseingaben zugrunde, unterscheiden sich aber im Ziel. Beim Monkey-Testing werden Benutzerereignisse an eine Schnittstelle gesendet. Beim Fuzzing werden Parser und APIs mit fehlerhaften Daten gefüttert, um in der Regel Sicherheitslücken aufzuspüren.

Chaos Monkey gehört zum Chaos Engineering: Es deaktiviert willkürlich Dienste oder stört die Infrastruktur, um die Ausfallsicherheit zu testen. Die gemeinsame Idee ist die Zufälligkeit, doch das Ziel ist die laufende Plattform, nicht die Benutzeroberfläche.

Modelle können den Ereignisstrom in Richtung der von tatsächlichen Nutzern verwendeten Pfade lenken und so aus einem unerfahrenen Nutzer einen leistungsfähigeren machen. Sie gruppieren außerdem doppelte Absturzprotokolle und priorisieren zufällige Fehler, die die Aufmerksamkeit eines Entwicklers erfordern.

GitHub-Copilot Das Grundgerüst wird schnell erstellt – Ereignisgeneratoren, Seed-Verwaltung, Log-Parser und Skripte zur Fehlerbehebung. Die Zufallsstrategie und die Erfolgskriterien müssen noch von einem Tester definiert werden.

Nützliche Kennzahlen sind beispielsweise Abstürze pro tausend generierte Aktionen, die Anzahl der gefundenen eindeutigen Fehler, die während des Laufs erreichte Codeabdeckung und die Zeit bis zum ersten Fehler. Es empfiehlt sich, diese Daten über mehrere Builds hinweg zu analysieren, anstatt nur einen einzelnen Lauf zu betrachten.

Notieren Sie den Zufallsgenerator und das Ereignisprotokoll. Tools, die einen Zufallsgenerator akzeptieren, spielen die identische Sequenz erneut ab, sodass der Fehler auf einen kurzen, reproduzierbaren Fall eingegrenzt und als normaler Defekt gemeldet werden kann.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: