Zustandsautomaten-Origami

Autor / Redakteur: Dr. Klaus Birken und Axel Terfloth* / Christine Kremser

Mit Zustandsautomaten lässt sich das Verhalten von Komponenten grafisch beschreiben und effizienter Code in C oder C++ generieren. Die Interaktion der Statecharts mit ihrer Umgebung wird über Konzepte wie Events und formale Schnittstellen beschrieben.

Anbieter zum Thema

(Bild: gemeinfrei/Pixabay / CC0 )

Das Open-Source-Projekt Franca erlaubt die Modellierung solcher Schnittstellen, speziell ihrer Semantik (d.h. erlaubte Abfolgen von Events). In den meisten Projekten wird diese Information nur informell dokumentiert – mit Franca sind die erlaubten Abläufe maschinenlesbar und damit automatisiert prüfbar. Tools zur Erstellung von Zustandsautomaten können sich diese Semantik-Information zunutze machen und den Entwickler interaktiv unterstützen, z.B. durch Hinweise auf zu erwartende oder zu sendende Events sowie auf nicht erreichbare Zustände. Dies stellt die Einhaltung aller Schnittstellen-Contracts sicher und sichert letztlich die Qualität des Codes.

Bildergalerie

Schnittstellen und ihre Dynamik mit Franca beschreiben

Bei der Embedded-Entwicklung sollten Schnittstellen zwischen Komponenten oder Subsystemen nicht direkt als C-Header-Dateien entworfen und repräsentiert werden, sondern auf einer höheren Abstraktionsebene, die von der Programmiersprache unabhängig ist. Dies wird durch eine Beschreibungssprache für Schnittstellen oder IDL (kurz für: Interface Definition Language) möglich [1]. Diese reduziert die Syntax auf genau das Vokabular, das für die inhaltliche Definition von Schnittstellen gebraucht wird. Die Abbildung auf eine Programmiersprache geschieht typischerweise durch Codegenerierung.

Eine IDL erlauben es, Schnittstellen unabhängig von der Zielplattform und -sprache formal zu beschreiben. Damit können dieselben Schnittstellen zur Integration über Teilsysteme, Programmiersprachen, Controller und Steuergeräte hinweg eingesetzt werden. Schnittstellen werden so ein übergreifendes Werkzeug für Architekten und Entwickler.

Das Open-Source-Projekt Franca [2] bietet eine solche IDL und verschiedene Tools, um Schnittstellen zu erstellen, zu bearbeiten oder daraus Programmcode zu generieren. Franca wurde zunächst im Rahmen des GENIVI-Konsortiums [3] entwickelt und ist derzeit auf dem Weg, ein offizielles Projekt unter dem Dach der Eclipse Foundation zu werden. Auf früheren ESE-Konferenzen wurden die verschiedenen Aspekte von Franca vorgestellt (z.B. [1], [4], [6]).

Der typische Sprachumfang einer IDL deckt die statischen Anteile von Schnittstellen ab, d.h. Datentypen, Attribute und Funktionsaufrufe. Dies ist zur Dokumentation der Schnittstellen und auch zur Codegenerierung zunächst ausreichend, da in Programmiersprachen ebenfalls nur statische Anteile von Schnittstellen beschrieben werden (C-Header oder C++-Klassen enthalten keine Festlegung z.B. von Aufrufreihenfolgen).

Die dynamischen Anteile von Schnittstellen werden heute meist erst in der Implementierung berücksichtigt. Dies sind erlaubte Aufrufreihenfolgen (also Sequenzen) und deren Parameterwerte. Ebenfalls gehören z.B. nicht-funktionale Eigenschaften wie Timing-Restriktionen zu den dynamischen Anteilen.

Gerade für komplexere Systeme ist es sinnvoll, die dynamischen Anteile bereits als Teil der Schnittstellendefinition festzulegen, denn der Schnittstellen-Designer hat die genaueste Vorstellung davon, wie seine Schnittstelle zu verwenden ist [4]. Über die formale Festlegung der Dynamik kann er dies den nachfolgenden Implementierern übermitteln. Dies steigert die Qualität des resultierenden Softwaresystems.

Franca unterstützt genau diese Beschreibung des dynamischen Verhaltens von Schnittstellen. Dazu bietet Franca IDL die Möglichkeit, Verträge (sog. contracts) von Schnittstellen in Form von Protokoll-Zustandsautomaten zu spezifizieren. Dies sind Zustandsautomaten, die auf der Verbindung zwischen den beiden kommunizierenden Softwareteilen (z.B. Komponenten) angesiedelt sind und auf Kommunikationsereignisse in beiden Richtungen reagieren.

Beispielsweise geschieht ein Zustandsübergang, wenn die Client-Seite eine Remote-Methode aufruft. Ein weiterer Zustandsübergang wird ausgelöst, wenn die Server-Seite die Antwort-Nachricht zu dieser Methode sendet. In jedem Zustand des Protokoll-Automaten sind nur die Ereignisse erlaubt, die durch ausgehende Transitionen beschrieben sind. Alle anderen Ereignisse wären Protokollfehler und damit Verletzungen des Vertrags.

Mit Franca werden die Zustandsautomaten als Teil der IDL textuell modelliert. In einem Vorjahresbeitrag wurde detailliert gezeigt, wie solche Verhaltensdefinitionen verwendet werden können, um Trace-Daten aus einem realen Embedded-System zu validieren [4]. Im vorliegenden Artikel wird nun beschrieben, wie solche Dynamik-Festlegungen an der Schnittstelle bereits während der Implementierung eines Embedded-Systems verwendet werden können, sofern diese Implementierung mittels eines Statechart-Modellierungswerkzeugs umgesetzt wird.

(ID:44313794)