Problem
Beim Projektstart wird sich normal für eine Architektur (z. B. hexagonale Architektur) entschieden und ein UML erstellt, um für neue Teammitglieder darzustellen, wie die Architektur des Projektes aussieht.
Doch wie stelle ich sicher, dass die Abhängigkeiten auch wirklich wie geplant umgesetzt werden und nicht plötzlich zyklische Abhängigkeiten eingeführt werden?
Und wie kann ich gewährleisten, dass das UML auf dem aktuellen Stand gehalten wird? Neue Teammitglieder sollen schließlich eine aktuelle Architekturübersicht erhalten und sich nicht mit einer veralteten Variante abfinden müssen.
Lösung
Die OpenSource-Bibliothek ArchUnit kann hier helfen! Man kann mit PlantUML erstellte UML-Diagramme nutzen, um sicherzustellen, dass darin enthaltene Abhängigkeiten eingehalten werden.
Beispiel
@Test public void shouldAdhereToArchitecture() {
JavaClasses classes = new ClassFileImporter().importPackages("com.jambit.chuber.tp.arch");
URL plantUmlDiagram = getClass().getResource("arch.puml");
classes()
.should(adhereToPlantUmlDiagram(plantUmlDiagram, consideringOnlyDependenciesInDiagram()))
.check(classes);
}
Im folgenden Beispiel wird in der Klasse ForbiddenUseOfDb die Klasse Db importiert, was der Definition im UML widerspricht.
Dadurch kommt es beim Ausführen des Tests zu folgender Fehlermeldung:
ArchTest.shouldAdhereToArchitecture:24 Architecture Violation [Priority: MEDIUM] - Rule 'classes should adhere to PlantUML diagram <arch.puml> while ignoring dependencies not contained in the diagram' was violated (1 times)
PS: ArchUnit hat auch viele andere Features, mit der man Architekturvorgaben (z. B. imports auf JDK-interne Klassen verbieten, fields in Konfigurationsklassen müssen final sein, etc.) abtesten kann. Lohnt sich auf jeden Fall, da mal reinzuschauen.
PPS: Die Abhängigkeitstests können auch rein in Code geschrieben werden, ohne ein UML-Diagramm zu definieren.
Weitere Aspekte
- https://git.jambit.com/chuber/tp-archunit
- https://www.archunit.org/userguide/html/000_Index.html#_plantuml_component_diagrams_as_rules
- https://www.archunit.org
---
Autor: Christof Huber / Software Developer / Industry & Energy
Lust, das nächste ToiletPaper zu schreiben? Jetzt bei jambit bewerben!