![Page 1: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/1.jpg)
© 2016 andrena objects ag
Max Bechtold
David Burkhart Entwicklertag Karlsruhe 2016
Architekturvorgaben und Entwicklungsrichtlinien automatisiert prüfen
Experts in agile software engineering
1
![Page 2: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/2.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 2
http
://geekand
po
ke.typep
ad.co
m/geekan
dp
oke/2
01
2/0
4/arch
itecture-d
rawin
g.htm
l
http
://geekand
po
ke.typep
ad.co
m/geekan
dp
oke/2
00
9/1
1/en
terprise-arch
itectu
re-m
ade-easy-p
art-1.h
tml
![Page 3: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/3.jpg)
© 2016 andrena objects ag
Vorgaben und Richtlinien
![Page 4: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/4.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 4
Vorgaben und Richtlinien – Wozu?
Einheitlicher Stil
Vermeidung von Antipatterns
Vermeidung zukünftigen Aufwands
Weniger Einarbeitung durch Konsistenz
Verbesserte Wartbarkeit und Erweiterbarkeit
![Page 5: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/5.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 5
Feedback auf allen Ebenen
Save / before Commit
• Support in der IDE
• Direktes Feedback für den Entwickler
Commit / Push / Integration
• Support im Continuous Build
• Feedback für das gesamte Team
Release / Delivery
• Support im Release-Build
• Trends über Sprints hinweg, Historisierung
![Page 6: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/6.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 6
Agenda
Konventionen & Checks
Packages / Module
Files
![Page 7: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/7.jpg)
© 2016 andrena objects ag
Modul / Paket - Ebene
![Page 8: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/8.jpg)
© 2016 andrena objects ag
Modul-Abhängigkeiten
Projekte im Workspace
Maven-Module
Muss meistens zyklenfrei sein
Paket-Abhängigkeiten
Sind oft nicht zyklenfrei
Verhindern weitere Module
Machen Refactoring schwieriger
Microservices?
Experts in agile software engineering 8
Acyclic dependencies principle
![Page 9: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/9.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 9
Paketzyklen verhindern
Feedback beim Build
• JDepend plain (z.B. Unit-Test) • Benötigt class-Files
• Maven Enforcer Rule
• SonarQube
• Modularisieren!
https://flic.kr/p/Boiy7
![Page 10: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/10.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 10
Paketzyklen reparieren
Project USUS: Feedback beim Speichern
![Page 11: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/11.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 11
Demo: Paketzyklen
![Page 12: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/12.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 12
Paketabhängigkeiten allgemeiner
• Macker
• JDepend
• Als PMD Regel
• Kommerzielle Tools
• Modularisieren!
![Page 13: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/13.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 13
Demo: Paket-Abhängigkeiten
https://innig.net/macker/faq.html
![Page 14: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/14.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 14
Modulabhängigkeiten: Frameworks / Libraries
Maven Enforcer Plugin
• Constraints an Dependencies (Verbote, Versionen, Scopes, etc.)
• Constraints an die Umgebung (OS, Dateien, Variablen, etc.)
• Eigene Regeln
http://maven.apache.org/enforcer/enforcer-rules/index.html
![Page 15: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/15.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 15
File - Ebene
http://flic.kr/p/roafis
![Page 16: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/16.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 16
Checks für Java-Code & Ressourcen
• Großteil der Entwicklungszeit auf File-Ebene
• Plug-Ins für IDE & Build
• Checkstyle
• PMD
• Findbugs, Sonar(Lint), …
• 'handgemachte' Checks per Unit-Test
![Page 17: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/17.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 17
Checks für Java-Code
Methode 1: Konventionen prüfen per Classpath-Scan
• Z.B. mit ClassPathScanningCandidateComponentProvider • org.springframework.context • liefert Typinformation & Annotationen • kombinierbar mit Java Reflection API
• noch mächtiger: Reflections-Library
• org.reflections • Checks von Typhierarchien, Methodensignaturen, Aufrufstellen
Beispiel: Einfache Namenskonventionen testen
![Page 18: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/18.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 18
Demo: Classpath-Scan
![Page 19: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/19.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 19
Checks für Java-Code
Methode 2: eigene Regeln für Checkstyle
• erweiterbar durch reguläre Ausdrücke
• RegExpSingleline und RegExpMultiline
Beispiele
• keine TODO-Kommentare im Code
• keine Unit-Tests mit @Ignore
• kein auskommentierter Code
![Page 20: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/20.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 20
Checks für Java-Code
Methode 3: eigene Regeln für PMD
• AST-basierte Checks
• Regeln konfigurieren mit XPath
Beispiele
• keine Aufrufe von gefährlichen/missverständlichen Methoden
• keine verbotenen APIs/Frameworks einsetzen
• Logging-Frameworks, Date-API
• keine geschachtelten Typdeklarationen
![Page 21: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/21.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 21
Demo: Eigene Checkstyle/PMD-Regeln
![Page 22: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/22.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 22
Checks von Ressourcen
Methode 1: eigene Checkstyle-Regeln
• anwendbar auf beliebige textbasierte Ressourcen
• java, properties, xml, sql, ...
Beispiel: SQL-Skripte testen
• keine anonymen Constraints (später: drop constraint …)
• Namenskonventionen für Constraints / Tabellen / Spalten …
JDBC-Metadaten! (weitergehende Checks der aktuellen DB)
![Page 23: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/23.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 23
Demo: SQL-Constraints prüfen
![Page 24: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/24.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 24
Checks von Ressourcen
Methode 2: Files parsen
• Libraries für Datei-Formate nutzen!
• z.B. JAXB für XML
Beispiele:
• sortierte Dependencies in pom.xml ( test-Scope am Ende)
• keine redundanten Properties in verschiedenen Modulen
![Page 25: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/25.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 25
Demo: Properties prüfen
![Page 26: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/26.jpg)
© 2016 andrena objects ag
Fazit
![Page 27: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/27.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 27
Best practices
• Regeln / Konfiguration der Tools versionieren
Gleiche Konfiguration über alle Ebenen hinweg
• Zero Warnings
• Steigende Severity auf späteren Ebenen
• Trotz Automatisierung: Reviews + Bewusstsein
![Page 28: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/28.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 28
Automatisiere Vorgaben und Richtlinien!
• Oft einfacher, als gedacht
• Insgesamt lohnt sich der Aufwand
• Bewusstsein wird durch automatisierte Checks geschaffen
• Weniger „Threads“ im Kopf der Entwickler/-innen
![Page 29: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/29.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 29
Links
http://www.projectusus.org/
https://github.com/BenRomberg/no-package-cycles-enforcer-rule
https://github.com/nidi3/jdepend
https://github.com/andrena/macker-maven-plugin
https://pmd.github.io/pmd-5.4.2/customizing/xpathruletutorial.html
http://maven.apache.org/enforcer/enforcer-rules/index.html
http://checkstyle.sourceforge.net/config_regexp.html
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.html
https://github.com/ronmamo/reflections
![Page 30: Architekturvorgaben und Entwicklungsrichtlinien · PDF fileMax Bechtold David Burkhart Entwicklertag Karlsruhe 2016 Architekturvorgaben und ... Maven-Module Muss meistens zyklenfrei](https://reader033.vdocuments.site/reader033/viewer/2022052607/5a789fc77f8b9a8c428e3554/html5/thumbnails/30.jpg)
© 2016 andrena objects ag
Experts in agile software engineering 30
Danke für die Aufmerksamkeit!