Automatische Code-Generierung – ein Erfahrungsbericht
Die automische Code-Generierung klingt für mich erstmals sehr vielversprechend. Der Begriff suggeriert, dass ich als Entwickler viel weniger Arbeit habe! Im Folgenden berichte ich über meine Erfahrungen mit automatischer Code-Generierung im medizintechnischen Umfeld.
Worum geht es?
Mittels CASE-Tools (Computer Aided Software Engineering) wird aus einem Modell Code generiert. Weit verbreitet – gerade im Embedded-Umfeld – ist hierzu die grafische Notation UML (Unified Modeling Language). Ein Beispiel für ein CASE-Tool ist Rational Rhapsody von IBM. Mit diesem oder ähnlichen Tools, wird die Architektur bzw. das Design der Software grafisch dargestellt. Dabei können verschiedene Abstraktionsstufen dargestellt und verfeinert werden. Das CASE-Tool kann auch lediglich den Rumpf der Software erstellen. Dies erspart einem das oft fehleranfällige Erstellen von „boilerplate code“. Die Logik wird dann in einem herkömmlichen Editor (kann im CASE-Tool integriert sein) implementiert. Rhapsody beispielsweise lässt es auch zu, dass man die Logik grafisch entwirft. Hierzu werden weitere UML-Diagrammtypen, wie etwa Sequenzdiagramme, genutzt.
Die Vorteile eines ganzheitlichen Modells liegen auf der Hand:
- Der Production Code lässt sich direkt aus dem Modell erzeugen
- Das Modell liefert verschiedene Sichtweisen und Abstraktionsstufen
- Es kann jederzeit eine aktuelle Dokumentation erzeugt werden
Im regulatorischen Umfeld
Der Systementwurf wird mit einem Modell […] auf einer höheren Abstraktionsebene beschrieben als der herkömmlich ausführbare Code. […] Das Ziel ist, die Softwarequalität durch Beseitigung der fehleranfälligen manuellen Aufgaben beim Codieren zu verbessern.
Die nahtlose Nutzung von Modellen erleichtert eine sehr konsistente und effiziente Entwicklung.
Erfahrungen
Im aktuellen Projekt wurde mittels Rhapsody ausführbarer Code erzeugt. Dabei wurde die Architektur und das Design der Software in Rhapsody mittels UML grafisch erfasst und verfeinert. Die Logik der Klassen wurde dann auf herkömmliche Weise im Rhapsody-Editor in C++ codiert.
Vorteile
- Die Verfeinerung der Architektur und des Designs mittels UML erleichtert das Verstehen komplexer Sachverhalte.
- Die Dokumentation lässt sich direkt aus dem Modell erstellen. Es entfällt das fehleranfällige und zeitintensive Nachpflegen der Dokumentation.
- Mittels automatischer Code-Generierung fällt das fehleranfällige Erstellen des Software-Rumpfes weg.
- Der Fokus ist viel stärker auf das Wesentliche gerichtet. Wiederholende Programmieraufgaben übernimmt das Tool.
- Namen (bspw. Typen) werden nach einer Umbenennung an allen Verwendungsorten automatisch angepasst. Allerdings gilt dies nicht für den „manuell erstellten“ Code. Ein Beispiel für solchen Code ist die Implementierung der Operationen.
Herausforderungen
- Der Einstieg in das Tool fällt schwer und erfordert intensive Schulung.
- Es fallen hohe Lizenzkosten an.
- Die Einrichtung eines Projektes und die Anbindung an ein CI-Tool ist schwieriger als bei herkömmlichen Editoren.
- Gerade unerfahrenen Entwickler*innen fällt der Einstieg schwer. Neben guten Programmierkenntnissen, sind auch detaillierte Kenntnisse der UML erforderlich.
- Die Logik wurde weiterhin herkömmlich in Rhapsody codiert. Dies bringt viele Nachteile mit sich. Code completion wird im Rhapsody-Editor nur sehr eingeschränkt unterstützt. Auch das Look & Feel wirkt sehr altmodisch und bietet bspw. nur sehr eingeschränktes Syntax Highlighting.
- Die Eigenarten des Tools zu verstehen erfordert viel Geduld. Bisweilen müssen sie umgangen oder auch einfach ertragen werden.
- Es besteht eine Abhängigkeit zum „Übersetzer“-Tool. Als Beispiel sei hier das Willert Framework genannt. Dieses definiert, wie die grafische Notation in den Code überführt wird.
Fazit
Die modellgetriebene Software-Entwicklung bietet viele Vorteile:
- Einfacheres Verstehen komplexer Sachverhalte dank grafischer Notation
- Erzeugen der Dokumentation aus dem Modell
- Fokussieren auf die Logik der Software
Doch die Einarbeitung in UML und das Tool zur automatischen Code-Generierung ist nicht zu unterschätzen. Die hohen Lizenzkosten können ebenfalls abschreckend wirken. Der Code-Editor von Rhapsody ist nicht mehr auf dem neusten Stand. Gängige kostenlose Editoren bieten hier viel mehr – bspw. der Qt Creator wie in diesem Projekt.
Zusammenfassend werden viele Vorteile der automatischen Code-Generierung durch das herkömmliche Codieren der Logik zunichte gemacht. Auf diese Weise erscheint mir der Aufwand grösser als der Ertrag. Es empfiehlt sich hier zumindest die Möglichkeit des Code Roundtrip zu nutzen. Dabei erstellt Rhapsody den Rumpf der Software und das manuelle Codieren erfolgt in einem Editor nach Wahl. Rhapsody importiert diesen Code dann zurück, um das Modell konsistent zu halten. Auf diese Weise kann zumindest von den Vorzügen eines modernen Editors profitiert werden.
Titelbild: Foto von Brett Jordan von Pexels