Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20240201_OOP_Schaal_FitnessFuncions-Automatisie...

Avatar for Kristine Schaal Kristine Schaal
February 02, 2024
23

 20240201_OOP_Schaal_FitnessFuncions-Automatisierte-Architekturtests-und-statische-Codeanalyse-mit-ArchUnit.pdf

Avatar for Kristine Schaal

Kristine Schaal

February 02, 2024

Transcript

  1. Dr. Kristine Schaal Wie fit ist deine Architektur? Automatisierte Architekturtests

    & statische Codeanalyse mit DR. KRISTINE SCHAAL OOP MÜNCHEN, 1. FEBRUAR 2024 Foto von Diana Polekhina auf Unsplash
  2. Copyright © Accso – Accelerated Solutions GmbH 2 Architekturentscheidungen zu

    treffen und zu dokumentieren ist aufwändig und mühsam, mit der Folge, dass Entscheidungen oft nur implizit getroffen werden und dann in Vergessenheit geraten, geschweige denn im Lauf der ständigen Weiterentwicklung eingehalten werden. Architecture Fitness Functions dienen dazu, Architekturentscheidungen im besten Fall automatisiert zu überprüfen. So bekommt das Entwicklungsteam jederzeit Feedback, ob die Architektur noch den festgelegten Regeln entspricht. Manche Entscheidungen wie Namenskonventionen lassen sich schon lange über altbekannte Tools wie Checkstyle abtesten. Komplexere Entscheidungen aber lassen sich nicht immer einfach prüfen – oder sie erfordern ein komplexes Metamodell, das aufwändig zu erstellen und zu pflegen ist. Hier kommt ArchUnit ins Spiel. In unserem Talk stellen wir anhand konkreter Fragestellungen vor, wie man mit ArchUnit automatisiert Architekturentscheidungen überprüft und in einen Standard-Testzyklus einbindet. Dazu bringt ArchUnit von Haus aus eine ganze Reihe von Standard- Hilfsmitteln mit. Besser noch: Eigene Architekturregeln lassen sich leicht in Form von Tests definieren und so im automatisierten Build überprüfen. Zugleich sind die Architekturregeln über die Tests dokumentiert. Beispiele: Sind Abhängigkeiten zwischen Komponenten richtig definiert? Sind Strukturen innerhalb einer Komponente richtig modelliert, z.B. als Onion-Architektur? Dieselbe API von ArchUnit kann man aber auch für statische Codeanalyse einsetzen, deren Output nicht in einem Test, sondern als Input in weitere Tools eingeht. Damit lassen sich einfach kleine Helferlein schreiben, um gezielt über statische Code-Analyse Handlungsbedarf identifizieren und analysieren zu können. ArchUnit lässt sich demnach für kleine, mittlere und komplexe Fragestellungen einsetzen. Das skaliert gut und ermöglicht eine leichtgewichtige und automatisierte Absicherung von Architekturentscheidungen. Wir zeigen zahlreiche Beispiele direkt im Code und geben damit einen ausführlichen Überblick über die Benutzung der ArchUnit-API. Abstract https://www.oop-konferenz.de/oop-2024/programm/konferenzprogramm
  3. Kristine Schaal Accso - Accelerated Solutions GmbH Softwarearchitektin Dr. Kristine

    Schaal ist als Softwarearchitektin bei der Accso - Accelerated Solutions GmbH tätig. Sie arbeitet seit mehr als 20 Jahren in der Softwareentwicklung und ist in Projekten der Individualentwicklung für Kunden verschiedener Branchen unterwegs, technisch überwiegend im Java-Umfeld. [email protected]
  4. Copyright © Accso – Accelerated Solutions GmbH 4 Statische Code-Analyse

    mit ArchUnit Fitness Functions Fachliche Säulen, technische Schichten, Zyklen Fazit Architektur testen mit ArchUnit ArchUnit Schritt für Schritt einführen AGENDA
  5. Copyright © Accso – Accelerated Solutions GmbH 5 Fitness Functions

    An architecture fitness function is any mechanism that provides an objective integrity assessment of some architectural characteristic(s) Neil Ford et al. “Building Evolutionary Architectures” 2nd Edition Name „Fitness Function“ kommt aus dem Gebiet der Genetischen Algorithmen (zur Lösung von Optimierungproblemen, z.B. „Travelling Salesman“). Fitness Functions sichern ab, dass Anforderungen an die Architektur eingehalten werden und die Architektur nicht „degeneriert“. analog Domänen-Tests zum Test der fachlichen Korrektheit einer Anwendung. Funktion := Messen, „wie gut eine Anforderung erfüllt wird“.
  6. Copyright © Accso – Accelerated Solutions GmbH 6 Die Vermessung

    der Architektur Über Qualitätsanforderungen finden wir die relevanten Architektur- Charakteristika zur Vermessung. Im besten Fall automatisiert. Scope: „Atomic“: Bewertung eines Charakteristikums „Holistic“: Mehrere Charakteristika in Kombination Benutzer- freundlichkeit Performance Security Verfügbarkeit … Energieeffizienz Execution Qualities (statische) Code-Architektur Wartbarkeit Evolution Qualities … Benutzer- freundlichkeit …
  7. Copyright © Accso – Accelerated Solutions GmbH 7 Fitness Functions

    für die Code-Architektur Benutzer- freundlichkeit Performance Security Verfügbarkeit … Energieeffizienz Execution Qualities (statische) Code-Architektur Wartbarkeit Evolution Qualities …
  8. Copyright © Accso – Accelerated Solutions GmbH 8 Statische Code-Analyse

    mit ArchUnit Fitness Functions Fachliche Säulen, technische Schichten, Zyklen Fazit Architektur testen mit ArchUnit ArchUnit Schritt für Schritt einführen AGENDA
  9. V1.2.1 vom 3. Dezember 2023 Open-Source https://www.archunit.org/ https://github.com/TNG/ArchUnit Apache License

    2.0 für Java und andere JVM-Sprachen V0.10.6 vom 12. Juli 2023 https://github.com/TNG/ArchUnitNET für DOT.NET und C# https://www.archunit.org
  10. Copyright © Accso – Accelerated Solutions GmbH 10 Warum automatisierte

    Architektur-Tests? Schnelles Feedback für alle Entwickler:innen automatisiert und/statt (nur) Code-Reviews läuft einfach in jedem Build mit Dokumentiert Architekturentscheidungen, macht sie explizit
  11. Copyright © Accso – Accelerated Solutions GmbH 11 Warum automatisierte

    Architektur-Tests mit ArchUnit? Schnelles Feedback für alle Entwickler:innen automatisiert und/statt (nur) Code-Reviews läuft einfach in jedem Build mit Dokumentiert Architekturentscheidungen, macht sie explizit Programmieren statt deklarieren – Man arbeitet im gleichen Code, in der gleichen Programmiersprache (Turing-vollständig) Refactoring schließt auch die Tests ein Ausdrucksstarke und typsichere API Schnell erlernbar und einführbar, gut lesbar und wartbar damit mächtiger als Checkstyle, PMD, Findbugs, JDepend, Sonar*, Structure101, jqAssistant
  12. Copyright © Accso – Accelerated Solutions GmbH 12 Wie schreibt

    man ArchUnit-Tests? Regeln schreiben Regeln prüfen einen Aspekt der Architektur. Regeln definiert man über ArchRule, bzw. spezifische Subklassen. API vereinfacht das Erstellen der Regeln. Tests ausführen ArchUnit-Tests können als JUnit4- oder JUnit5- Tests geschrieben und ausgeführt werden. Sie können im normalen Build-Zyklus mitlaufen. Wenn die Architektur- prüfung fehlschlägt, wird eine Exception geworfen → Der Test schlägt fehl. Was kann man prüfen? Package Dependency Class Dependency Class and Package Containment Inheritance Annotation Layer Cycle …
  13. Copyright © Accso – Accelerated Solutions GmbH 13 Fachliches Bücherei-Beispiel

    „library“ common util … von allen … von allen data management statistics search borrow book-admin customers
  14. Copyright © Accso – Accelerated Solutions GmbH 14 LiveCoding Beispiel

    1 Check von Namenskonventionen Beispiel 2 Check von Abhängigkeiten Beispiel 3 Sind alle Daos auch JpaRepositories? Sind nur Daos JpaRepositories? https://github.com/accso/static-code-analysis-archunit
  15. Copyright © Accso – Accelerated Solutions GmbH 15 Statische Code-Analyse

    mit ArchUnit Fitness Functions Fachliche Säulen, technische Schichten, Zyklen Fazit Architektur testen mit ArchUnit ArchUnit Schritt für Schritt einführen AGENDA
  16. Copyright © Accso – Accelerated Solutions GmbH 16 Komponentenschnitt in

    Säulen und Schichten API Business Logik Persistenz Technische Schichten
  17. Copyright © Accso – Accelerated Solutions GmbH 17 Komponentenschnitt in

    Säulen und Schichten API Business Logik Persistenz Billing Shipp ing Ware house Sales Technische Schichten Fachliche Säulen
  18. Copyright © Accso – Accelerated Solutions GmbH 18 Fachliche Abhängigkeiten

    Billing Shipp ing Ware house Sales Hat Abhängigkeit zu …
  19. Copyright © Accso – Accelerated Solutions GmbH 19 Fachliche Abhängigkeiten

    – Technische Schichten Billing Shipp ing Ware house Sales Hat Abhängigkeit zu …
  20. Copyright © Accso – Accelerated Solutions GmbH 20 Billing ui

    Onion-Architektur application domain model Dependency Inversion: Abhängigkeiten von außen nach innen … zu Persistenz … zu Messaging … zu Monitoring …
  21. Copyright © Accso – Accelerated Solutions GmbH 21 LiveCoding Beispiel

    4 Zyklen? Check auf erlaubte Abhängigkeiten … zwischen den fachlichen Komponenten … auf Onion- Architektur https://github.com/accso/static-code-analysis-archunit
  22. Copyright © Accso – Accelerated Solutions GmbH 22 Statische Code-Analyse

    mit ArchUnit Fitness Functions Fachliche Säulen, technische Schichten, Zyklen Fazit Architektur testen mit ArchUnit ArchUnit Schritt für Schritt einführen AGENDA
  23. Copyright © Accso – Accelerated Solutions GmbH 23 LiveCoding Beispiel

    5 Nutzung von ArchUnit auf der „Braunen Wiese“ Ignorieren von Architekturfehlern Einfrieren von Test-Ergebnissen Einschränken auf Teilmenge von Klassen https://github.com/accso/static-code-analysis-archunit
  24. Copyright © Accso – Accelerated Solutions GmbH 24 Statische Code-Analyse

    mit ArchUnit Fitness Functions Fachliche Säulen, technische Schichten, Zyklen Fazit Architektur testen mit ArchUnit ArchUnit Schritt für Schritt einführen AGENDA
  25. Copyright © Accso – Accelerated Solutions GmbH 25 ArchUnit basiert

    auf statischer Codeanalyse Byte Code ArchUnit prüft Byte Code, nicht den Source Code ArchUnit baut ein statisches Abhängigkeits- modell auf. Modell ClassFileImporter scannt den Classpath. Einschränkung auf eigene Packages möglich. Mit/ohne Test JavaClass JavaClasses Dependency JavaAccess Abhängigkeiten Aus- und eingehend Vererbung, Interfaces, Generics, Annotationen ArchUnit nutzt diese Informationen: Konstruktoren Feldern Annotationen Typen
  26. Copyright © Accso – Accelerated Solutions GmbH 27 LiveCoding Nochmal

    Beispiel 3 diesmal mit Fokus auf statischer Code-Analyse Beispiel 6 Finde transitive Abhängigkeiten für eine Klasse. Relevant z.B. für Migrations- planung und -schätzung https://github.com/accso/static-code-analysis-archunit
  27. Copyright © Accso – Accelerated Solutions GmbH 28 Statische Code-Analyse

    mit ArchUnit Fitness Functions Fachliche Säulen, technische Schichten, Zyklen Fazit Architektur testen mit ArchUnit ArchUnit Schritt für Schritt einführen AGENDA
  28. Copyright © Accso – Accelerated Solutions GmbH 29 Einfach mal

    einsetzen! Leichtgewichtig einführbar Regeln per API sehr einfach zu schreiben. Refactoring möglich (außer Package-Namen als String) Filter über Importer, Ignore, Freeze Wird stetig weiterentwickelt (Beispiel: Type Erasure, Generics) Gute Basis für eigene statische Code-Analyse-Werkzeuge Strings statt Typen bei Klassen, Packages, Wildcards Ungewohnte Wildcard-Notation Semantik von Depend, Access etc. nicht immer intuitiv Architekturtests sind Tests für die (statische) Code-Architektur (nicht mehr, aber auch nicht weniger). Kann andere Tools wie Checkstyle, Sonar & Co ergänzen, in Teilen ersetzen.
  29. Copyright © Accso – Accelerated Solutions GmbH 30 Wie fit

    ist deine Architektur? Architekturtests! Verhindert Degenerieren der (statischen) Code-Architektur. Pflege und Weiterentwicklung (mit der Architektur) mit sehr vertretbarem Aufwand möglich. „Grün oder Rot?“ Test für unmittelbares Feedback Letztlich nur zwei Mess- Ergebnisse „Wie fit?“ Messung der Anzahl von Architektur-Verletzungen evaluate() Dedizierte Betrachtung von ausgeschlossenen Prüfungen Ignore und Freeze
  30. https://accso.de/publikationen/ https://github.com/accso/ static-code-analysis-archunit https://speakerdeck.com/kristines Accso – Accelerated Solutions GmbH T

    | +49 6151 13029-0 E | [email protected] @ | www.accso.de Hilpertstraße 12 | 64295 Darmstadt Rahmhofstraße 2 | 60313 Frankfurt a. M. Im Mediapark 6a | 50670 Köln Balanstraße 55 | 81541 München Clocktower, 302 | CV&A Waterfront, Cape Town 8002, ZA https://www.linkedin.com/in/ kristine-schaal