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

Architektur und Code im Einklang (JUG Nürnberg)

Architektur und Code im Einklang (JUG Nürnberg)

Umsetzung von Architekturkonzepten und Designvorgaben mit jQAssistant direkt im Quellcode überprüfen

jQAssistant ist ein Werkzeug zur statischen Analyse von Softwareartefakten. Mit jQAssistant ist es möglich, Architektur- und Designkonzepte als einen Satz von Regeln zu definieren. Die Einhaltung dieser Regeln kann anschließend bei jedem Bau einer Software automatisiert überprüft werden. Dadurch kann sichergestellt werden, dass eine vorgegebene Architektur sowie Designvorgaben auch wirklich im Quellcode umgesetzt wurden.

In meinem Vortrag stelle ich die Grundlagen von jQAssistant vor und zeige an einem Beispiel, wie sich mit dem Werkzeug eine sich selbst prüfende Architekturdokumentation erstellen lässt.

Markus Harrer

June 28, 2017
Tweet

More Decks by Markus Harrer

Other Decks in Programming

Transcript

  1. Architektur und Code im Einklang Umsetzung von Architekturkonzepten und Designvorgaben

    mit jQAssistant und AsciiDoc direkt im Quellcode automatisiert überprüfen @feststelltaste feststelltaste.de [email protected] Markus Harrer Sparda Datenverarbeitung e. G. Java User Group Nürnberg (28.06.2017)
  2. “If you think bad architecture is expensive, try undocumented and

    non-validated architecture.” Markus Harrer
  3. jQAssistant Funktionsweise • Scanne Softwarestrukturen • Speichere diese in eine

    Datenbank • Führe Abfragen aus • Untersuche Zusammenhänge • Ergänze Konzepte • Validiere Regelverletzungen • Generiere Berichte
  4. jQAssistant Kernideen: Concepts • Gescannte Elemente werden Konzepten („concepts“) zugeordnet,

    z. B. • Maven Project = Modul • Java Package = Schicht • Mit @Entity annotierte Klasse = JPA-Entity
  5. jQAssistant Kernideen: Constraints • Regeln werden auf Basis der Konzepte

    textuell formuliert, z. B. „Alle JPA-Entitäten müssen sich in der Persistenz-Schicht befinden“ • Abweichungen von den Regeln („constraints“) werden geprüft, z. B. „Gib mir alle JPA-Entities, die sich nicht in der Persistenzschicht befinden.“
  6. jQAssistant Kernideen: Constraints • Regeln werden auf Basis der Konzepte

    textuell formuliert, z. B. „Alle JPA-Entitäten müssen sich in der Persistenz-Schicht befinden“ • Abweichungen von den Regeln („constraints“) werden geprüft, z. B. „Gib mir alle JPA-Entities, die sich nicht in der Persistenzschicht befinden.“
  7. jQAssistant Kernideen: Groups • Alles wird in einer gemeinsamen Dokumentation

    festgehalten, über Gruppen („groups“) strukturiert und beim Build ausgeführt. Ausschnitt:
  8. Ein Graph – sogar mit Daten! File Class Type File

    key value name “entity“ file “Entity.java” fqn “jpa.thing.Entity” key value weight 3 key value name “Pet” file “Pet.java” fqn “foo.bar.Pet” Labels Properties
  9. AsciiDoc Markup Language • Rendert zu • DocBook • HTML

    • PDF mit Cypher: ausführbare Spezifikation! • Programmiervorgaben • Design und Architektur
  10. Definition eines Concepts == JPA Entities [[jpa2:Entity]] .Labels all types

    annotated with @javax.persistence.Entity with Jpa and Entity. [source,cypher,role=concept] ---- MATCH (t:Type)-[:ANNOTATED_BY]->()-[:OF_TYPE]->(a:Type) WHERE a.fqn ="javax.persistence.Entity" SET t:Jpa:Entity RETURN t AS Entity ----
  11. Definition eines Constraints [[model:JpaEntityInModelPackage]] .All JPA entities must be located

    in packages named "model". [source,cypher,role=constraint, requiresConcepts="jpa2:Entity"] ---- MATCH (package:Package)-[:CONTAINS]- >(entity:Jpa:Entity) WHERE package.name <> "model" RETURN entity AS EntityInWrongPackage ----
  12. • jQAssistant bietet schnelle und flexible Sichten auf eine Vielzahl

    von Softwarestrukturen • Zusammenhänge können explorativ über die Graphdatenbank Neo4j erkundet werden • Definition von Spielregeln über Concepts und Constraints in Cypher / AsciiDoc Automatisierte Überprüfung von • Architekturkonzepten und • Designvorgaben • direkt im Code Zusammenfassung
  13. Links • jQAssistant • http://jqassistant.org • Ausführliches Video • https://www.youtube.com/watch?v=kQr2c7yWbEA

    • Spring PetClinic Beispielprojekt • Repo: http://github.com/buschmais/spring-petclinic • Output: https://buschmais.github.io/spring-petclinic/ • Meine Erfahrungen soweit • https://www.feststelltaste.de/my-experiences-with- jqassistant-so-far/
  14. Credits Einige Beispiele wurden aus Dirk Mahlers Vortrag “jQAssistant -

    Verify Your Design And Architecture” übernommen • https://jqassistant.org/wp-content/uploads/2016/06/ jQAssistant-Verify-Your-Design-And-Architecture.pdf Bilder • https://de.wikipedia.org/wiki/Datei:Yin_yang.svg • https://commons.wikimedia.org/wiki/File:Achitecture_time.jpg • https://commons.wikimedia.org/wiki/File:Adelaide_Street_aba ndoned_house.jpg