Monkey Testing

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Monkey-Testing (eng. Affentesten) ist eine Technik des Softwaretestens, bei der simuliert wird, ein Affe würde die Anwendung nutzen, d. h. es werden zufällige Eingaben auf der Benutzeroberfläche erzeugt und dabei überprüft, ob die Anwendung oder das System abstürzt. Der Affentest ist also die Extremform des Negativtests.

Überblick[Bearbeiten | Quelltext bearbeiten]

Während die Quelle des Namens „Monkey“ (eng. Affe) unsicher ist, wird von einigen angenommen, dass der Name mit dem Infinite-Monkey-Theorem zu tun hat,[1] welches besagt, dass ein Affe, wenn er lange genug auf einer Schreibmaschine tippt, irgendwann die kompletten Werke von William Shakespeare erzeugt. Andere nehmen an, dass der Name von der klassischen Mac OS-Anwendung „The Monkey“ abgeleitet wurde, die von Steve Capps vor 1983 entwickelt wurde, um zufällige Ereignisse in Mac-Programmen zu füttern, und um Programmfehler in MacPaint zu finden.[2]

Arten von Monkey Testing[Bearbeiten | Quelltext bearbeiten]

Monkey-Testing kann in „dummes“ und „intelligentes“ Monkey-Testing (eng. dumb bzw. smart monkey testing) unterschieden werden.

Dummes Monkey-Testing[Bearbeiten | Quelltext bearbeiten]

Dummes Monkey-Testing hat folgende Eigenschaften:

  • Kein Wissen über die Anwendung oder das System
  • Kein Wissen darüber, ob das Eingabeverhalten gültig oder ungültig ist
  • Kein Wissen über das Verhalten der Anwendung oder des Systems oder das typische Anwenderverhalten
  • Kann weniger Fehler finden als intelligentes Monkey-Testing, findet aber u. U. wichtige Fehler, die von intelligentem Monkey-Testing schwerer gefunden werden.

Intelligentes Monkey-Testing[Bearbeiten | Quelltext bearbeiten]

Intelligentes Monkey-Testing wird normalerweise über folgende Eigenschaften unterschieden:

  • Rudimentäres Wissen über die Anwendung oder das System
  • Kennt den gegenwärtigen Zustand innerhalb der Anwendung, vergangene Zustände und mögliche zukünftige Zustände
  • Kennt seine Fähigkeiten und die der Anwendung oder des Systems
  • Versucht gezielt, die Anwendung oder das System zum Absturz zu bringen
  • Berichtet über gefundene Fehler

Manchmal wird intelligentes Monkey-Testing auch als brillantes Monkey-Testing (eng. brilliant monkey testing) bezeichnet, wenn es versucht, sich dem typischen Nutzerverhalten anzunähern und Aussagen über die Wahrscheinlichkeit des Auftretens der gefundenen Fehler machen kann.

Vor- und Nachteile[Bearbeiten | Quelltext bearbeiten]

Vorteile

Monkey-Testing ist ein effizienter Weg, um einige Out-of-the-Box-Fehler zu identifizieren. Da die getesteten Szenarien meist ad hoc sind, kann die Affenprüfung auch ein guter Weg sein, um Last- und Stresstests durchzuführen. Die intrinsische Zufälligkeit von Monkey-Testing macht es auch zu einer guten Methode, um kritische Fehler zu finden, die das gesamte System zerstören können. Das Aufsetzen von Monkey-Testing ist einfach, also gut geeignet für jede Art von Anwendung. Wenn intelligentes Monkey-Testing richtig konfiguriert ist und über ein ausreichend gutes Zustandsmodell verfügt, kann es gut verschiedene Arten von Fehlern finden.

Nachteile

Die Zufälligkeit von Monkey-Testing macht es oft schwierig oder unmöglich, die Fehler zu reproduzieren und damit auch anspruchsvoll und zeitaufwendig, sie zu analysieren. Bei bestimmten Systemen muss Monkey-Testing lange Zeit laufen, bevor es einen Fehler findet.

Ähnliche Techniken und Unterscheidungen[Bearbeiten | Quelltext bearbeiten]

Während Monkey-Testing gelegentlich als eine Unterart von Fuzz Testing[3][4] angesehen wird und die beiden Begriffe in der Regel zusammen verwendet werden, sind andere der Meinung, sie unterschieden sich darin, dass Monkey-Testing sich mehr über zufällige Aktionen definiert, Fuzz-Testing hingegen mehr über zufällige aber strukturierte Daten (bspw. XML).[5] Monkey-Testing unterscheidet sich auch von Ad-hoc-Tests, da Ad-hoc-Tests ohne Planung und Dokumentation durchgeführt werden, und es das Ziel einer Ad-hoc-Prüfung ist, das System zufällig in Unterabschnitte aufzuteilen und ihre Funktionalität zu überprüfen. Monkey-Testing hingegen prüft nicht die fachliche Funktionalität, sondern nur auf Robustheit.

Tool-Unterstützung[Bearbeiten | Quelltext bearbeiten]

  • Für Web-Anwendungen ist eine JavaScript-Bibliothek namens gremlins.js[6] verfügbar.
  • Für Mobile-Anwendungen unter Android ist Monkey Testing als UI/Application Exerciser Monkey Teil der Standardtestwerkzeuge von Android Studio[7].
  • Für Java-Swing-Anwendungen gibt es ein kommerzielles Werkzeug namens ReTest[8].

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. What is Monkey Testing | IT Training and Consulting – Exforsys.
  2. Folklore.org: Monkey Lives.
  3. Robert Brummayer, Florian Lonsing, Armin Biere: Ofer Strichman (Hrsg.): Automated Testing and Debugging of SAT and QBF Solvers (en) (=  Lecture Notes in Computer Science). Springer Berlin Heidelberg, 11. Juli 2010, ISBN 978-3-642-14185-0, S. 44–57, doi:10.1007/978-3-642-14186-7_6.
  4. Fuzz Testing in Delphi – DelphiTools.
  5. Difference between fuzz testing and monkey test.
  6. gremlins.js JavaSkript-Bibliothek für Node.js und den Browser – Marmelab.
  7. UI/Application Exerciser Monkey – Android Developers.
  8. ReTest Monkey Testing – ReTest GmbH.