Software-Tests für Zustandsautomaten

Viele verschiedene Arten von Softwaretests haben an Bedeutung gewonnen, da Entwickler nach Möglichkeiten suchen, die Qualität zu verbessern und Projektfristen einzuhalten – Code-Reviews, Unit-Tests, Regressionstests, Beta-Tests, testgetriebene Entwicklung und mehr. Unabhängig von den Zielen eines Projekts oder der verwendeten Programmiersprache gilt es als allgemein anerkannt, dass ein Fehler umso einfacher, kostengünstiger und schneller behoben werden kann, je früher er entdeckt wird.

Die automatische Code-Generierung aus Zustandsdiagrammen gemäß UML, eine neue Funktion, die in Altova UModel 2011, Version 2 eingeführt wurde, kann verwendet werden, um die konzeptionelle Logik sehr frühzeitig im Projektverlauf zu überprüfen.

Praxisnahes Design in einem Zustandsautomaten-Diagramm

Ein Beispiel, das mit UModel mitgeliefert wird, zeigt ein einfaches und realistisches Zustandsautomaten-Diagramm mit einer kleinen Testanwendung, mit der Sie selbst ausprobieren können, wie einfach es sein kann, die Logik eines Designs zu testen. Das Zustandsautomaten-Diagramm im Projekt "AirCondition.ump" im Ordner "UModel 2011 Beispiele" beschreibt die Funktionsweise eines typischen Heiz- und Klimaanlagensystems.

Das System umfasst einen Ein-/Ausschalter, der sich auf der linken Seite befindet und den Übergang vom ausgeschalteten Zustand anzeigt, eine Modusauswahlfunktion, mit der Heizung oder Kühlung ausgewählt werden kann, eine Drehzahlregelung für den Lüfter sowie einen Standby-Knopf, der das System in den Standby-Modus versetzt, der auf der rechten Seite dargestellt wird. Der Beispielprojektordner enthält den gesamten Code, der für das Diagramm von UModel in Java, C# und Visual Basic generiert wurde. Um die Java-Version auszuprobieren, müssen wir lediglich den Befehl javac STMTester.java verwenden, um den Code zu kompilieren, und java STMTester, um ihn auszuführen. Die Testanwendung zeigt ein simuliertes Bedienfeld mit Informationsfenstern über die Heizungs- und Klimaanlage an. Die Bedienelemente befinden sich oben, der aktuelle Zustand wird im ersten Fenster beschrieben, und die vom System generierten Ausgabemeldungen werden im zweiten Fenster angezeigt.

Wie oben gezeigt, initialisiert das System im ausgeschalteten Zustand, der Modus ist auf "Heizung" eingestellt und der Lüfter ist deaktiviert. Bevor Sie das System in Betrieb nehmen, können Sie die Größe des Bedienfelds und des Zustandsautomaten-Diagramms anpassen, um die Aktionen der Testanwendung im Diagramm selbst zu verfolgen, wie im unten gezeigten Bild in verkleinerter Darstellung gezeigt.

Die Steuerung des Zustandsautomaten

Wenn wir auf die Einschalttaste klicken, wird das Fenster mit dem aktuellen Status aktualisiert, und eine detaillierte Beschreibung der durchgeführten Vorgänge wird als Ereignis 1 in den Debug-Ausgabemeldungen angezeigt.

Wenn es ein warmer Tag ist, können wir den Modus auf Kühlung umstellen und die Lüftergeschwindigkeit erhöhen. Dies können wir tun, indem wir auf die Schaltflächen "Modus auswählen" und "Geschwindigkeit auswählen" klicken. Das Fenster "Aktueller Zustand" wird bei jedem Klick aktualisiert, und die Ereignisse 2 und 3 werden den Ausgabemeldungen hinzugefügt.

Jetzt können wir sehen, wie die Testanwendung es uns ermöglicht, die Logik unseres Zustandsautomaten vollständig zu überprüfen, indem wir jede mögliche Abfolge von Knopfdrucken auswählen, um zu sehen, ob sie die erwarteten Ergebnisse liefern. Wenn wir beispielsweise das Gerät in den Standby-Modus versetzen (Ereignis 4 unten) und dann die Taste "Geschwindigkeit wählen" drücken, sehen wir in den Ausgabemeldungen für Ereignis 5, dass kein Zustandswechsel im Unterzustand namens "RegionSpeed" stattfindet. Vergleichen Sie Ereignis 5 mit Ereignis 3 im Fenster für die Ausgabemeldungen, wie unten dargestellt.

Da das System sich jetzt im Standby-Modus befindet und wir keine Heizung oder Kühlung benötigen, sparen wir Energie, indem wir den Power-Knopf drücken, um es auszuschalten.

Warten Sie einen Moment – es scheint, als wäre nichts passiert. Es hat keine Zustandsänderung in Ereignis 6 stattgefunden, und der aktuelle Zustand im oberen Fenster ist immer noch "Bereitstand"! Wenn wir uns das Zustandsdiagramm noch einmal ansehen, können wir sehen, dass der einzige Weg, den "Bereitstand"-Modus zu verlassen, darin besteht, den "Bereitstand"-Knopf erneut zu drücken. Ist das wirklich das Verhalten, das ein durchschnittlicher Benutzer erwarten würde, nämlich dass der Power-Knopf das System nicht aus dem "Bereitstand"-Modus ausschaltet?

Stellen Sie sich vor, wie teuer es wäre, dieses Problem zu beheben, wenn es erst viel später im Produktentwicklungsprozess entdeckt würde, nämlich während der Tests des Prototyps durch eine Aufsichtsbehörde! Hier ist eine Herausforderung, die wir unseren Lesern stellen: Wie würden Sie einen direkteren Weg vom Standby-Zustand in den Aus-Zustand gestalten?

Das Testen eigener Zustandsautomaten

Sie können die Beispielprojekte zur Codeerzeugung für Zustandsautomaten von UModel als Vorlagen verwenden, um Testanwendungen für Ihre eigenen Designs zu erstellen. Nutzen Sie dabei die UModel-Funktion, die automatisch Operationen in einer Klasse erstellt, sobald Sie Operationsnamen zu Übergängen in Ihrem Zustandsautomaten hinzufügen.

Darüber hinaus enthält das Hilfesystem von UModel detaillierte Informationen zur Codeerzeugung aus Zustandsdiagrammen und verwendet außerdem die Projektdatei "AirCondition.ump" als Beispiel.

Finden Sie selbst heraus, wie Sie die Projektentwicklung verbessern können, indem Sie die Logik Ihrer eigenen Zustandsdiagramme mit Altova UModel testen – laden Sie noch heute eine kostenlose 30-Tage-Testversion herunter!