Tech-Talk: Generischer Codegenerator für State-Event-Machines Konfigurationen des State-Event-Editors von Swissframe
Im Ramen des Tech-Talks: «Generischer Codegenerator für State-Event-Machine Konfigurationen des State-Event-Editors von Swissframe» hat Robin Schoch seine Arbeit aus seinem Informatik-Studienprojekt vorgestellt. Dieses legte den Fokus auf die Entwicklung eines generischen Codegenerators für State-Event Machines, welche als Steuerelemente in der Gebäudetechnik eingesetzt werden.
State-Event Machines (SEM) sind ein grundlegendes Konzept in der Computerwissenschaft. Sie bilden das Rückgrat vieler reaktiver Systeme, die in Abhängigkeit einer Reihe von Ereignissen, eine festgelegte Folge von Aktionen ausführen. Einfache Beispiele reichen von Telekommunikationsprotokollen bis hin zur Spielentwicklung. Die SEM befindet sich dabei jeweils in einem einzelnen Zustand (State) aus einer endlichen Anzahl an möglichen Zuständen. Die SEM kann zwischen diesen Zuständen abhängig von Inputs (Events) wechseln. Die Implementierung von Zustands-Ereignis-Automaten kann jedoch umständlich und fehleranfällig sein, insbesondere wenn sie an verschiedene Programmiersprachen und Frameworks angepasst werden müssen.
Codegeneratoren bieten in diesem Setting verschiedene Vorteile. So minimieren sie Copy-and-paste Fehler und reduzieren repetitive Arbeit, welche sich häufig nur minimal unterscheidet. Weiter kann durch ihre Verwendung eine konsistente Codebasis geschaffen werden und die Code Qualität über die gesamte Implementation garantiert werden. Mögliche Nachteile liegen in der eingeschränkten Flexibilität, da Codegeneratoren nur bestimmte Anwendungsfälle abdecken und eine manuelle Erweiterung die Komplexität und Fehleranfälligkeit erhöht.
Im Falle von Swissframe war die Konfiguration der SEM in einer State Event Matrix abgebildet. Diese beschreibt Beziehungen zwischen States und Events als auch den aktuellen Zustand. Weiter kann diese als Dokumentation der SEM verwendet werden. Die Matrix ist jedoch nicht ohne weiteres verständlich, weshalb die Konfiguration mit einem State-Event Editor (SEE) über eine visuelle webbasierte Applikation geschieht. Anschliessend wird die Konfiguration von der SEE über eine interne Domain Specific Language (DSL) als JSON-File der SEM übergeben. SEE und SEM sind somit voneinander abhängig, weshalb die SEM ursprünglich stark modifiziert werden musste, um die Konfigurationsdatei der SEE zu interpretieren.
Durch das Hinzufügen eines Codegenerators konnte der vom SSE erhaltenen DSL von Swissframe in lesbaren Quellcode umgewandelt werden. Um den Codegenerator möglichst generisch zu halten wurde eine eigene vereinfachte generische DSL definiert. Die Generalisierung der DSL geschieht dabei nach dem Vorbild von OpenAPI. Den Vorteil dieser Generalisierung wurde durch ein Proof of Concept Generator verdeutlicht, welcher Quellcode für zwei unterschiedliche State Machines generieren kann.
Mit diesem Generator konnte somit gezeigt werden, dass es grundsätzlich möglich ist, eine Zustandsmaschine in einer universell gültigen DSL darzustellen und Quellcode für verschiedene Sprachen und Frameworks zu generieren.
Tech-Talk: Robin Schoch (robin.schoch@students.fhnw.ch) MSE Student
Blog Beitrag: Simon Luder (simon.luder@fhnw.ch) Assistent und MSE Student
Kommentare
Keine Kommentare erfasst zu Tech-Talk: Generischer Codegenerator für State-Event-Machines Konfigurationen des State-Event-Editors von Swissframe