Unser Markenzeichen ist die automatisierte, modell-gestützte Realisierung von Testsuiten unter Verwendung von grafischen Benutzungsmodellen für Hard- und Software-Systeme.



Hello MBT World - Modell-basiertes Testen für Einsteiger



Das Hello-MBT-World Beispiel demonstriert, wie modell-basiertes Testen für den Test von Java GUI-Anwendungen eingesetzt werden kann. Für diesen Zweck wird eine Java Swing-Applikation, die im TestPlayer©-Verzeichnis app gemeinsam mit dem Quellcode als ausführbare JAR-Datei HelloMBTWorld.jar abgelegt ist, so gestartet (siehe unten), dass alle Klickereignisse der Buttons über eine automatisch generierte Testdatei getriggert werden.



In den folgenden Diagrammen ist zunächst dargestellt, wie sich die Java-Anwendung HelloMBTWorld bei Drücken der vier Button Hello, MBT, World und Clear verhält. Der rote Button Bye beendet die Ausführung der Anwendung.

  • Start


  • Hello


  • World


  • MBT


  • Clear


  • MBT


  • World

...

Ein korrespondierendes statistisches Benutzungsmodell, das als Basis für die automatische Generierung von Testfällen dient, sieht für die HelloMBTWorld -Applikation wie folgt aus:



Aus dem Startzustand [ gelangt man nach dem Start der Java-Applikation direkt in den Benutzungszustand Clear und anschließend, je nachdem ob die Eingabeereignisse ClickHello, ClickMBT, ClickWorld bzw. ClickClear gewählt werden in die Benutzungszustände Hello, MBT, World, bzw. Clear. Das Drücken des Button Bye erzeugt das Eingabeereignis ClickBye und beendet den Testfall mit Erreichen des Endzustands ].

Die zusätzlichen generischen Wahrscheinlichkeiten p1 bis p21 an den Kanten hinter den Eingabeereignissen definieren die Übergangswahrscheinlichkeiten, mit denen die jeweiligen Eingaben ausgewählt werden. Der TestPlayer© ersetzt vor der eigentlichen Testfallgenerierung die generischen Werte durch konkrete Wahrscheinlichkeitswerte, die entweder aus einem vorgegebenem Testprofil stammen oder anhand der geometrischen Gleichverteilung bestimmt werden.

Mit dem TestPlayer© ist es jetzt möglich aus dem obigen Benutzungsmodell automatisch Testfälle zur

  • vollständigen Abdeckung aller Benutzungszustände
  • vollständigen Abdeckung aller möglichen Übergänge zwischen den Zuständen
  • Abdeckung aller möglichen schleifenfreien Pfade zwischen den Zuständen, d.h. Pfade zwischen dem Startzustand [ und dem Endzustand ], in denen kein Zustandsübergang mehr als einmal durchlaufen wird
zu generieren.

Die Anzahl der insgesamt zu generierenden Testfälle, aus denen die Testsuite durch Reduktion mittels der gewünschten Abdeckungs- und Sortierkriterien entsteht, ist standardmäßig auf 100 eingestellt, lässt sich aber im Dashboard des TestPlayer© beliebig ändern. Als Ergebnis werden drei Testsuiten gezeigt, die nach dem Sortierkriterium sort_l erzeugt sind, d.h. die Testfälle sind aus 100 statistisch zufällig generierten Testfällen zunächst nach der Länge der Testfälle sortiert und für das Erreichen des gewünschten Abdeckungskriterium ausgewählt worden.



  • Testsuite Zustandsabdeckung enthält 4 (von 100) Testfälle
Die einzelnen Testfälle werden animiert (hervorgehoben durch fett-orangene Einfärbung) dargestellt und zeigen die bisher erreichte Abdeckung von Benutzungszuständen sowie Übergängen zwischen den Zuständen (dargestellt durch blaß-orangene Einfärbung). Die Zahl hinter dem Doppelpunkt des jeweiligen Klickereignisses zeigt, wie oft der Zustandsübergang innerhalb des Testfalls durchlaufen wurde.


  • Testsuite Transitionsabdeckung enthält 17 (von 100) Testfälle
Die einzelnen Testfälle werden animiert (hervorgehoben durch fett-orangene Einfärbung) dargestellt und zeigen die bisher erreichte Abdeckung von Benutzungszuständen sowie Übergängen zwischen den Zuständen (dargestellt durch blaß-orangene Einfärbung). Die Zahl hinter dem Doppelpunkt des jeweiligen Klickereignisses zeigt, wie oft der Zustandsübergang innerhalb des Testfalls durchlaufen wurde.


  • Testsuite Pfadabdeckung enthält 57 (von 100) Testfälle
Die einzelnen Testfälle werden animiert (hervorgehoben durch fett-orangene Einfärbung) dargestellt und zeigen die bisher erreichte Abdeckung von Benutzungszuständen sowie Übergängen zwischen den Zuständen (dargestellt durch blaß-orangene Einfärbung). Die Zahl hinter dem Doppelpunkt des jeweiligen Klickereignisses zeigt, wie oft der Zustandsübergang innerhalb des Testfalls durchlaufen wurde.

Neben den grafischen Darstellungen erzeugt der TestPlayer© außerdem Textdateien, die die Testfälle der Testsuite in kompakter JSON-Formatierung für die weitere Verarbeitung, insbesondere für die Testausführung, bereitstellen.

Inhalt der Datei test_cases_for_state_coverage.json.txt:

[
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  {}
]
Inhalt der Datei test_cases_for_transition_coverage.json.txt:

[
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  {}
]
Inhalt der Datei test_cases_for_path_coverage.json.txt:

[
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickClear", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickClear", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickMBT", "MBT"],
    ["MBT", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickClear", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickClear", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickMBT", "MBT"],
    ["MBT", "ClickClear", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickClear", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickBye", "]"]
  ],
  [
    ["[", "StartApp", "Clear"],
    ["Clear", "ClickMBT", "MBT"],
    ["MBT", "ClickHello", "Hello"],
    ["Hello", "ClickHello", "Hello"],
    ["Hello", "ClickMBT", "MBT"],
    ["MBT", "ClickWorld", "World"],
    ["World", "ClickHello", "Hello"],
    ["Hello", "ClickClear", "Clear"],
    ["Clear", "ClickBye", "]"]
  ],
  {}
]

Die Ausführung des Kommandos

java -jar HelloMBTWorld.jar -h
gibt den folgenden Hilfe-Text aus:

NAME
    HelloMBTWorld.jar

SYNTAX
    java -jar HelloMBTWorld.jar [[-f] <test case file>]  [[-t] <time>] [[-d] <level>] [[-h]]


ARGUMENTS
    -f <test case file> :  use file <test case file> to simulate/test the HelloMBTWorld app
                           from a test case file that was automatically generated by the
                           TestUS (https://testus.eu) TestPlayer© MBT tool

    -t <time> :            set the <time> in milliseconds beetween successive klick events
                           (default: 10 ms)

    -d <level> :           set debug level
                           <level>=0: no debug info (only start of test case #1 is shown)
                           <level>=1: confirm each test case (default)
                           <level>=2: confirm each single test step (e.g. klick event)

    -h :                   print this help info
	

Daraus ist ersichtlich, dass der Aufruf

java -jar HelloMBTWorld.jar -f test_cases_for_state_coverage.json.txt
einen Test der Anwendung HelloMBTWorld.jar unter Verwendung der Testsuite test_cases_for_state_coverage.json.txt mit 4 Testfällen durchführt, wobei bei der Testausführung jeweils 10 Millisekunden zwischen den einzelnen Klicks gewartet wird. Während der Testausführung werden die fünf Button Hello, MBT, World, Clear und Bye mindestens einmal gedrückt und die folgenden Ausgaben auf der Konsole ausgegeben:

TestCase[1]=<StartApp ClickBye>
TestCase[2]=<StartApp ClickMBT ClickBye>
TestCase[3]=<StartApp ClickHello ClickBye>
TestCase[4]=<StartApp ClickWorld ClickBye>
Am Ende des Tests erscheint abschließend die Nachricht



und signalisiert, dass alle vier Testfälle während des Tests erfolgreich ausgeführt wurden.
Möchte man zusätzlich die Abdeckung sämtlicher Zustandsübergänge zwischen den Benutzungszuständen sicherstellen, wird die Testausführung mit der automatisch generierten Testsuite test_cases_for_transition_coverage.json.txt, bestehend aus 17 Testfällen, gestartet:

java -jar HelloMBTWorld.jar -f test_cases_for_transition_coverage.json.txt
Während der Testausführung werden jetzt die fünf Button Hello, MBT, World, Clear und Bye mindestens einmal in allen möglichen Kombinationen gedrückt und es erscheinen die folgenden Ausgaben auf der Konsole:

TestCase[1]=<StartApp ClickBye>
TestCase[2]=<StartApp ClickMBT ClickBye>
TestCase[3]=<StartApp ClickHello ClickBye>
TestCase[4]=<StartApp ClickClear ClickBye>
TestCase[5]=<StartApp ClickWorld ClickBye>
TestCase[6]=<StartApp ClickHello ClickWorld ClickBye>
TestCase[7]=<StartApp ClickHello ClickMBT ClickBye>
TestCase[8]=<StartApp ClickWorld ClickClear ClickBye>
TestCase[9]=<StartApp ClickWorld ClickMBT ClickBye>
TestCase[10]=<StartApp ClickMBT ClickClear ClickBye>
TestCase[11]=<StartApp ClickMBT ClickHello ClickBye>
TestCase[12]=<StartApp ClickMBT ClickMBT ClickBye>
TestCase[13]=<StartApp ClickHello ClickClear ClickBye>
TestCase[14]=<StartApp ClickWorld ClickHello ClickBye>
TestCase[15]=<StartApp ClickWorld ClickWorld ClickBye>
TestCase[16]=<StartApp ClickMBT ClickWorld ClickBye>
TestCase[17]=<StartApp ClickHello ClickHello ClickBye>
Am Ende des Tests wird abschließend die Nachricht



ausgegeben und signalisiert, dass alle 17 Testfälle während des Tests erfolgreich ausgeführt wurden.
Sollen sämtliche Pfade des Benutzungsmodells durchlaufen werden, wird die Testausführung mit der automatisch generierten Testsuite test_cases_for_path_coverage.json.txt, bestehend aus 57 Testfällen, gestartet:

java -jar HelloMBTWorld.jar -f test_cases_for_transition_coverage.json.txt
Während der Testausführung werden die fünf Button Hello, MBT, World, Clear und Bye so getriggert, dass es keine gleichen Übergänge beim Drücken der Button während eines Testfalls gibt. Beispielsweise darf die Folge Button World wird unmittelbar nach Button Hello gedrückt höchstens einmal im Testfall vorkommen. Bei der Testausführung unter Verwendung der Testsuite test_cases_for_path_coverage.json.txt erscheinen die folgenden Ausgaben auf der Konsole:

TestCase[1]=<StartApp ClickBye>
TestCase[2]=<StartApp ClickMBT ClickBye>
TestCase[3]=<StartApp ClickHello ClickBye>
TestCase[4]=<StartApp ClickClear ClickBye>
TestCase[5]=<StartApp ClickWorld ClickBye>
TestCase[6]=<StartApp ClickHello ClickWorld ClickBye>
TestCase[7]=<StartApp ClickHello ClickMBT ClickBye>
TestCase[8]=<StartApp ClickWorld ClickClear ClickBye>
TestCase[9]=<StartApp ClickWorld ClickMBT ClickBye>
TestCase[10]=<StartApp ClickMBT ClickClear ClickBye>
TestCase[11]=<StartApp ClickMBT ClickHello ClickBye>
TestCase[12]=<StartApp ClickClear ClickMBT ClickBye>
TestCase[13]=<StartApp ClickMBT ClickMBT ClickBye>
TestCase[14]=<StartApp ClickHello ClickClear ClickBye>
TestCase[15]=<StartApp ClickWorld ClickHello ClickBye>
TestCase[16]=<StartApp ClickWorld ClickWorld ClickBye>
TestCase[17]=<StartApp ClickMBT ClickWorld ClickBye>
TestCase[18]=<StartApp ClickHello ClickHello ClickBye>
TestCase[19]=<StartApp ClickWorld ClickHello ClickClear ClickBye>
TestCase[20]=<StartApp ClickClear ClickMBT ClickWorld ClickBye>
TestCase[21]=<StartApp ClickWorld ClickClear ClickHello ClickBye>
TestCase[22]=<StartApp ClickClear ClickHello ClickClear ClickBye>
TestCase[23]=<StartApp ClickMBT ClickWorld ClickMBT ClickBye>
TestCase[24]=<StartApp ClickMBT ClickMBT ClickWorld ClickBye>
TestCase[25]=<StartApp ClickHello ClickWorld ClickClear ClickBye>
TestCase[26]=<StartApp ClickMBT ClickMBT ClickHello ClickClear ClickBye>
TestCase[27]=<StartApp ClickWorld ClickHello ClickHello ClickWorld ClickBye>
TestCase[28]=<StartApp ClickWorld ClickMBT ClickHello ClickClear ClickBye>
TestCase[29]=<StartApp ClickMBT ClickWorld ClickClear ClickClear ClickBye>
TestCase[30]=<StartApp ClickMBT ClickHello ClickMBT ClickWorld ClickBye>
TestCase[31]=<StartApp ClickMBT ClickHello ClickHello ClickWorld ClickBye>
TestCase[32]=<StartApp ClickHello ClickWorld ClickMBT ClickHello ClickBye>
TestCase[33]=<StartApp ClickClear ClickHello ClickHello ClickMBT ClickBye>
TestCase[34]=<StartApp ClickClear ClickWorld ClickHello ClickHello ClickWorld ClickBye>
TestCase[35]=<StartApp ClickWorld ClickWorld ClickMBT ClickHello ClickClear ClickBye>
TestCase[36]=<StartApp ClickClear ClickWorld ClickWorld ClickMBT ClickClear ClickBye>
TestCase[37]=<StartApp ClickHello ClickHello ClickWorld ClickWorld ClickHello ClickBye>
TestCase[38]=<StartApp ClickHello ClickMBT ClickHello ClickWorld ClickMBT ClickBye>
TestCase[39]=<StartApp ClickMBT ClickMBT ClickWorld ClickMBT ClickHello ClickBye>
TestCase[40]=<StartApp ClickHello ClickWorld ClickClear ClickMBT ClickClear ClickBye>
TestCase[41]=<StartApp ClickMBT ClickHello ClickWorld ClickMBT ClickMBT ClickBye>
TestCase[42]=<StartApp ClickWorld ClickMBT ClickHello ClickHello ClickWorld ClickBye>
TestCase[43]=<StartApp ClickMBT ClickWorld ClickHello ClickWorld ClickWorld ClickBye>
TestCase[44]=<StartApp ClickWorld ClickMBT ClickClear ClickClear ClickHello ClickClear ClickBye>
TestCase[45]=<StartApp ClickMBT ClickClear ClickHello ClickMBT ClickMBT ClickHello ClickBye>
TestCase[46]=<StartApp ClickMBT ClickHello ClickClear ClickWorld ClickWorld ClickHello ClickBye>
TestCase[47]=<StartApp ClickHello ClickClear ClickWorld ClickClear ClickMBT ClickWorld ClickBye>
TestCase[48]=<StartApp ClickClear ClickMBT ClickWorld ClickClear ClickWorld ClickHello ClickBye>
TestCase[49]=<StartApp ClickHello ClickHello ClickMBT ClickClear ClickWorld ClickHello ClickBye>
TestCase[50]=<StartApp ClickWorld ClickMBT ClickClear ClickMBT ClickWorld ClickWorld ClickBye>
TestCase[51]=<StartApp ClickHello ClickClear ClickMBT ClickHello ClickMBT ClickClear ClickBye>
TestCase[52]=<StartApp ClickHello ClickMBT ClickWorld ClickClear ClickClear ClickWorld ClickWorld ClickBye>
TestCase[53]=<StartApp ClickWorld ClickMBT ClickWorld ClickWorld ClickHello ClickClear ClickClear ClickBye>
TestCase[54]=<StartApp ClickHello ClickMBT ClickMBT ClickHello ClickClear ClickMBT ClickClear ClickBye>
TestCase[55]=<StartApp ClickHello ClickClear ClickMBT ClickWorld ClickMBT ClickClear ClickClear ClickBye>
TestCase[56]=<StartApp ClickWorld ClickHello ClickClear ClickClear ClickMBT ClickMBT ClickHello ClickBye>
TestCase[57]=<StartApp ClickMBT ClickHello ClickHello ClickMBT ClickWorld ClickHello ClickClear ClickBye>
Am Ende des Tests wird abschließend die Nachricht



ausgegeben und signalisiert, dass alle 57 Testfälle während des Tests erfolgreich ausgeführt wurden.