Zum Hauptinhalt springen

Eclipse-basierte UML-Validierung von Enterprise-Architect-Modellen

Dr. Patrick Könemann Dr. Patrick Könemann 4 Min. Lesezeit Aktualisiert:
Eclipse-basierte UML-Validierung von Enterprise-Architect-Modellen

Sparx Systems liefert mit jeder Version neue Features: Projektmanagement, überarbeitete Diagrammstile, zuletzt auch KI-Assistenten. Aber was ist mit der Stabilität und Verlässlichkeit seines Kernfeatures — dem Authoring von UML-Modellen? Enterprise Architect erlaubt die Eingabe beliebigen Textes, anstatt bestehende Typen zu erzwingen, was zu syntaktisch fehlerhaften Modellen führen kann, die gültig erscheinen. Eclipse ist 2026 keine junge Technologie mehr, aber in der Automobil- und Embedded-Industrie nach wie vor weit verbreitet. Für Teams, die bereits auf dem Eclipse-Ökosystem aufbauen, bietet die EA-Bridge eine robuste Validierungsbasis.

Die Grenzen von EAs eigener Validierung

Enterprise Architect bietet begrenzte Modellvalidierungs- (und auch Codegenerierungs-)Möglichkeiten. Mehrere unserer Kunden verwenden EA für die Softwarearchitektur-Modellierung mit Codegenerierungsabsichten und benötigen syntaktisch korrekte und konsistente Modelle. Da die Validierungsmöglichkeiten von EA begrenzt sind, haben wir uns für Eclipse und seine Tools für Modellvalidierung, Codegenerierung, Modelltransformationen u. a. entschieden.

Eclipse und die EA-Bridge: syntaktische Fehler systematisch erkennen

Im Jahr 2013 begannen wir mit der Implementierung der EA-Bridge, die einfachen Zugang zu EA-Modellen innerhalb von Eclipse bietet, indem sie diese als Eclipse-UML-Modelle lädt und dabei als Nebeneffekt syntaktische Modellfehler meldet. Wenn das Modell gültig ist, können alle Eclipse-basierten Modellierungstools zur Verarbeitung von EA-Modellen verwendet werden, z. B. für Modellvalidierung, Codegenerierung (Xtend, Acceleo, ATL u. a.) oder automatisierte Testausführung in Continuous-Integration-Builds.

Die syntaktische Modellvalidierung wird entweder von der EA-Bridge oder über das integrierte Eclipse UML durchgeführt. Wenn das EA-Modell fehlerhaft ist und nicht konsistent geladen werden kann (z. B. wenn eine Typreferenz gesetzt, aber ungültig ist), meldet die EA-Bridge Ladefehler als ‘EA Model Problems’. Außerdem erlaubt Eclipse die Bereitstellung von Quick Fixes, und für einige Fehler bietet die EA-Bridge bereits solche Quick Fixes an. Das Umleiten oder Aufheben einer ungültigen Typreferenz ist ein Beispiel für einen solchen Quick Fix, wie unten gezeigt. Auf diese Weise haben Benutzer die Möglichkeit, ungültige EA-Modelle systematisch zu korrigieren.

EA-Modell geladen mit dem Eclipse-UML-Editor via EA-Bridge

(Das EA-Modell geladen mit dem Eclipse-UML-Editor via EA-Bridge: Ressourcenmarkierungen zeigen Fehler und Warnungen an.)

Quick Fixes helfen dem Benutzer, häufige Modellfehler zu beheben

(Quick Fixes helfen dem Benutzer, häufige Modellfehler zu beheben.)

Benutzerdefinierte Validierungsregeln und Quick Fixes

Neben der syntaktischen Modellvalidierung ist es für bestimmte Anwendungsfälle wie die Codegenerierung oft sinnvoll, den Umfang der Modellierungskonzepte auf eine spezifische Teilmenge des UML zu beschränken, z. B. auf die Verwendung von nur Java- oder C-Datentypen, abhängig von der Zielsprache für die Codegenerierung. Darüber hinaus definieren Projekte häufig Modellierungs- und Coding-Guidelines, z. B. dass abstrakte Klassennamen immer mit ‘Abstract’ beginnen sollen. Die EA-Bridge kann auch verwendet werden, um solche benutzerdefinierten Validierungsregeln, wie im Code-Snippet dargestellt, einfach zu definieren. Java-Annotationen werden eingesetzt, um benutzerdefinierte Validierungsregeln und zugehörige Quick Fixes kompakt zu deklarieren.

/**
 * This rule reports all abstract classes whose names do not start with 'Abstract'.
 *
 * Furthermore, this validation rule refers to two quick fixes (by ID) that are
 * defined below which can be used in the UI to automatically fix violations of
 * this validation rule.
 */
@EAValidation(severity = Severity.warning, quickfix = { "rename", "toggleAbstract" })
public String validateAbstractClass(Element element) {
    if (isAbstractClassWithoutPrefix(element, ABSTRACT_CLASS_PREFIX)) {
        return String.format("Abstract class '%s' should start with '%s'. Double click "
            + "this in Problems view to navigate to the model element, right-click for "
            + "possible quick fixes.",
            ((Class) element).getName(), ABSTRACT_CLASS_PREFIX);
    }
    return null; // no violation
}

/**
 * This is a quick fix for the validation rule {@link #validateAbstractClass(Element)}.
 * It should repair the model such that the validation rule is not violated any more.
 * The return value indicates whether the model was changed.
 *
 * Parameter id is used by {@link EAValidation} to refer to possible quick fixes.
 * Parameter label is used in the UI.
 */
@Quickfix(id = "rename", label = "Add 'Abstract' prefix to class name")
public boolean fixRenameAbstractClass(Element element) {
    if (isAbstractClassWithoutPrefix(element, ABSTRACT_CLASS_PREFIX)) {
        ((Class) element).setName(ABSTRACT_CLASS_PREFIX + ((Class) element).getName());
        return true; // if the model was changed, 'true' must be returned
    }
    return false; // if the model was not changed, 'false' must be returned
}

Code für eine benutzerdefinierte Validierungsregel, die Warnungen für abstrakte Klassen ohne das Präfix ‘Abstract’ meldet; ein zusätzlicher Quick Fix kann verwendet werden, um dieses Präfix automatisch hinzuzufügen.

Die Eclipse-basierte EA-Bridge steht im Eclipse Marketplace zur Verfügung und enthält auch das hier diskutierte Beispiel.

Den Umfang, den ein solches Validierungs-Framework in der Praxis erreichen kann, zeigt ein Kundenprojekt aus der Medizintechnik: Für ein international führendes Unternehmen mit über 60.000 Mitarbeitern und mehr als 9 Mrd. € Jahresumsatz haben wir einen kundenspezifischen Toolchain-Baustein auf Basis der EA-Bridge zur Validierung von EA-Modellen implementiert. Neben den syntaktischen UML-Constraints werden 44 kundenspezifische, teils sehr komplexe semantische Constraints geprüft.

Die neue Generation: CLI-Werkzeug und VS Code Extension

Seit 2024 gibt es eine neue Generation der EA-Bridge: ein Rust-basierter Kern als CLI-Werkzeug, ergänzt um eine VS Code Extension als Oberfläche. Für die Modellvalidierung bietet das CLI ein query-Kommando, das jq-Abfragen direkt gegen das exportierte JSON-Modell auswertet — ohne Eclipse-Setup, direkt in CI-Pipelines einsetzbar. Wer heute neu mit EA-basierter Validierung beginnt, greift besser zu diesem Ansatz. Der hier beschriebene Eclipse-Ansatz bleibt für Teams valide, die bereits auf einer Eclipse-Toolchain aufbauen.

EA Bridge →


Custom Tools bei itemis — Maßgeschneiderte Werkzeuge für Ihre modellbasierte Entwicklung: Custom Tool Development →

Änderungshistorie

  • Artikel vollständig überarbeitet: Medizintechnik-Praxisbeispiel mit 44 benutzerdefinierten Validierungsregeln ergänzt, neuer Abschnitt zur EA-Bridge CLI-Generation (2024), Jahreszahl der EA-Bridge-Entwicklung korrigiert (2013)
  • Erstveröffentlichung
Dr. Patrick Könemann

Principal Engineer & Consultant

Dr. Patrick Könemann ist Principal Engineer und Consultant bei itemis und seit 2011 auf modellgetriebene Software-Entwicklung, Tool-Entwicklung und -Integration spezialisiert. Er promovierte an der Technischen Universität Dänemark und bringt 15 Jahre Erfahrung in der Automotive- sowie 5 Jahre in der Medical-Domain ein, u. a. als Projektleiter, Softwarearchitekt und Requirements-Engineer. Langjährige Expertise mit UML-Werkzeugen, insbesondere dem Enterprise Architect, sowie Eclipse, VS Code und KI im Entwicklungsprozess ergänzen sein Portfolio.

Weitere Artikel zu diesem Thema

Enterprise Architect mit Add-ins anpassen
Blog Toolchain integration

Enterprise Architect mit Add-ins anpassen

Wie Enterprise Architect mit Add-ins erweitert wird: Model Assistants, Integrity Checks und Installer-basiertes Rollout — und welche Aufgaben besser externe Werkzeuge wie die EA-Bridge übernehmen.

Zum Blog
Dr. Patrick Könemann Dr. Patrick Könemann 7 Min. Lesezeit