SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Architektur und Code
im Einklang
Umsetzung von Architekturkonzepten
und Designvorgaben mit jQAssistant und AsciiDoc
direkt im Quellcode automatisiert überprüfen
@feststelltaste feststelltaste.de talk@markusharrer.de
Markus Harrer
Sparda Datenverarbeitung e. G.
Java User Group Nürnberg (28.06.2017)
“If you think good architecture is
expensive, try bad architecture.”
Brian Foote
“If you think bad architecture is
expensive, try undocumented and
non-validated architecture.”
Markus Harrer
Plan
Reality
+ =
scan document validate
Grundlegendes
zu jQAssistant
jQAssistant Funktionsweise
• Scanne Softwarestrukturen
• Speichere diese in eine Datenbank
• Führe Abfragen aus
• Untersuche Zusammenhänge
• Ergänze Konzepte
• Validiere Regelverletzungen
• Generiere Berichte
jQAssistant Kernideen: Concepts
• Gescannte Elemente werden Konzepten
(„concepts“) zugeordnet, z. B.
• Maven Project = Modul
• Java Package = Schicht
• Mit @Entity annotierte Klasse = JPA-Entity
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.“
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.“
jQAssistant Kernideen: Groups
• Alles wird in einer gemeinsamen
Dokumentation festgehalten, über Gruppen
(„groups“) strukturiert und beim Build
ausgeführt.
Ausschnitt:
Graphentheorie
mit Neo4j und Cypher
Ein Graph
Knoten
Kante
Graph im Detail
Knoten
Mögliche Arten
Java-Klasse
Messpunkt
Datei
Repository
URL
...
Graph im Detail
Kanten
Typ einer Beziehung
DECLARES
EXTENDS
IMPLEMENTS
ANNOTATED_BY
DEPENDS_ON
...
Ein Graph – sogar mit Daten!
File Class TypeFile
key value
name “entity“
file “Entity.java”
fqn “jpa.thing.Entity”
key value
weight 3key value
name “Pet”
file “Pet.java”
fqn “foo.bar.Pet”
Labels
Properties
Beispiel
Spring PetClinic
Sprint PetClinic: Verwaltung für Tierpraxis
Beispiel-Graph: Sprint PetClinic
visibility: public
name: Pet
fqn: org.springframework.samples.petclinic.model.Pet
…
Class:Type:Java:File
Beispiel-Graph: Sprint PetClinic
Beispiel-Graph: Sprint PetClinic
Beispiel-Graph: Sprint PetClinic
Kann ich abfragen!
Cypher
Syntax
Cypher
Abfrage von Knoten
MATCH
(p:Class)-[]->(e:Type)
WHERE
p.name = "Pet" AND
e.name = "Entity"
RETURN p, e
Explorative Analysen in Neo4j
Demo 1
MATCH
(p:Class)-[]->(e:Type)
WHERE
p.name = "Pet" AND
e.name = "Entity"
RETURN p, e
Dokumentieren
mit AsciiDoc und Cypher
AsciiDoc
Markup Language
• Rendert zu
• DocBook
• HTML
• PDF
mit Cypher: ausführbare Spezifikation!
• Programmiervorgaben
• Design und Architektur
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
----
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
----
Definition einer Group
[[default]]
[role=group,includesConstraints=
"model:JpaEntityInModelPackage"]
Ergebnisbericht
Z. B. als Maven Site Report
Selbstvalidierende Architekturdokumentation
Demo 2
Spring PetClinic
Plan
Reality
• 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
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/
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
Fragerunde
Eure Fragen

Mais conteúdo relacionado

Semelhante a Architektur und Code im Einklang [JUG Nürnberg]

JPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEJPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEhwilming
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenAndré Goliath
 
Sitzung 10
Sitzung 10Sitzung 10
Sitzung 10scuy
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineOPEN KNOWLEDGE GmbH
 
Data model mal anders
Data model mal andersData model mal anders
Data model mal andersMaxim Zaks
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershellCreasoft AG
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsQAware GmbH
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauenjohofer
 
JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technicsadesso AG
 
Von Textwüsten zu Forschungsdateninfrastrukturen mit Wissensgraphen
Von Textwüsten zu Forschungsdateninfrastrukturen mit WissensgraphenVon Textwüsten zu Forschungsdateninfrastrukturen mit Wissensgraphen
Von Textwüsten zu Forschungsdateninfrastrukturen mit WissensgraphenRicardo Usbeck
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)Michael Kurz
 
PostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePeter Eisentraut
 
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Oliver Busse
 
Effiziente datenpersistierung mit JPA 2.1 und Hibernate
Effiziente datenpersistierung mit JPA 2.1 und HibernateEffiziente datenpersistierung mit JPA 2.1 und Hibernate
Effiziente datenpersistierung mit JPA 2.1 und HibernateThorben Janssen
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeldgedoplan
 
Schnell, schneller, Quarkus!!
Schnell, schneller, Quarkus!!Schnell, schneller, Quarkus!!
Schnell, schneller, Quarkus!!gedoplan
 
Objekt-Relationales Mapping - von Java zu relationalen DBs
Objekt-Relationales Mapping - von Java zu relationalen DBsObjekt-Relationales Mapping - von Java zu relationalen DBs
Objekt-Relationales Mapping - von Java zu relationalen DBsSebastian Dietrich
 
JsUnconf 2014
JsUnconf 2014JsUnconf 2014
JsUnconf 2014emrox
 

Semelhante a Architektur und Code im Einklang [JUG Nürnberg] (20)

JPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEJPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SE
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
Sitzung 10
Sitzung 10Sitzung 10
Sitzung 10
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-Pipeline
 
Data model mal anders
Data model mal andersData model mal anders
Data model mal anders
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
JSF Testing - Tools und Technics
JSF Testing - Tools und TechnicsJSF Testing - Tools und Technics
JSF Testing - Tools und Technics
 
Von Textwüsten zu Forschungsdateninfrastrukturen mit Wissensgraphen
Von Textwüsten zu Forschungsdateninfrastrukturen mit WissensgraphenVon Textwüsten zu Forschungsdateninfrastrukturen mit Wissensgraphen
Von Textwüsten zu Forschungsdateninfrastrukturen mit Wissensgraphen
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)
 
Node.js
Node.jsNode.js
Node.js
 
PostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie Datenbankalternative
 
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
 
Effiziente datenpersistierung mit JPA 2.1 und Hibernate
Effiziente datenpersistierung mit JPA 2.1 und HibernateEffiziente datenpersistierung mit JPA 2.1 und Hibernate
Effiziente datenpersistierung mit JPA 2.1 und Hibernate
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
Schnell, schneller, Quarkus!!
Schnell, schneller, Quarkus!!Schnell, schneller, Quarkus!!
Schnell, schneller, Quarkus!!
 
Objekt-Relationales Mapping - von Java zu relationalen DBs
Objekt-Relationales Mapping - von Java zu relationalen DBsObjekt-Relationales Mapping - von Java zu relationalen DBs
Objekt-Relationales Mapping - von Java zu relationalen DBs
 
JsUnconf 2014
JsUnconf 2014JsUnconf 2014
JsUnconf 2014
 

Mais de Markus Harrer

Datenanalysen in der Softwareentwicklung (IMPROVE Workshop Wien)
Datenanalysen in der Softwareentwicklung (IMPROVE Workshop Wien)Datenanalysen in der Softwareentwicklung (IMPROVE Workshop Wien)
Datenanalysen in der Softwareentwicklung (IMPROVE Workshop Wien)Markus Harrer
 
Software Analytics - Datenanalysen in der Softwareentwicklung (BigDataMeetup)
Software Analytics - Datenanalysen in der Softwareentwicklung (BigDataMeetup)Software Analytics - Datenanalysen in der Softwareentwicklung (BigDataMeetup)
Software Analytics - Datenanalysen in der Softwareentwicklung (BigDataMeetup)Markus Harrer
 
Datenanalysen in der Softwareentwicklung mit Software Analytics
Datenanalysen in der Softwareentwicklung mit Software AnalyticsDatenanalysen in der Softwareentwicklung mit Software Analytics
Datenanalysen in der Softwareentwicklung mit Software AnalyticsMarkus Harrer
 
Software Analytics with Jupyter, Pandas, jQAssistant, and Neo4j [Neo4j Online...
Software Analytics with Jupyter, Pandas, jQAssistant, and Neo4j [Neo4j Online...Software Analytics with Jupyter, Pandas, jQAssistant, and Neo4j [Neo4j Online...
Software Analytics with Jupyter, Pandas, jQAssistant, and Neo4j [Neo4j Online...Markus Harrer
 
Philosophy screws it all up (Pecha Kucha) [Java Forum Stuttgart 2017]
Philosophy screws it all up (Pecha Kucha) [Java Forum Stuttgart 2017]Philosophy screws it all up (Pecha Kucha) [Java Forum Stuttgart 2017]
Philosophy screws it all up (Pecha Kucha) [Java Forum Stuttgart 2017]Markus Harrer
 
Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...
Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...
Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...Markus Harrer
 
Software Analytics for Pragmatists [DevOps Camp 2017]
Software Analytics for Pragmatists [DevOps Camp 2017]Software Analytics for Pragmatists [DevOps Camp 2017]
Software Analytics for Pragmatists [DevOps Camp 2017]Markus Harrer
 
Einsatzmöglichkeiten der automatisierten Analyse von Artefakten und Metadaten...
Einsatzmöglichkeiten der automatisierten Analyse von Artefakten und Metadaten...Einsatzmöglichkeiten der automatisierten Analyse von Artefakten und Metadaten...
Einsatzmöglichkeiten der automatisierten Analyse von Artefakten und Metadaten...Markus Harrer
 
Erkenntnistheoretische Beurteilung von Extreme Programming
Erkenntnistheoretische Beurteilung von Extreme ProgrammingErkenntnistheoretische Beurteilung von Extreme Programming
Erkenntnistheoretische Beurteilung von Extreme ProgrammingMarkus Harrer
 
An interactive form-based mobile software system with a sample application in...
An interactive form-based mobile software system with a sample application in...An interactive form-based mobile software system with a sample application in...
An interactive form-based mobile software system with a sample application in...Markus Harrer
 
Erkenntnistheoretische Beurteilung von Extreme Programming
Erkenntnistheoretische Beurteilung von Extreme ProgrammingErkenntnistheoretische Beurteilung von Extreme Programming
Erkenntnistheoretische Beurteilung von Extreme ProgrammingMarkus Harrer
 

Mais de Markus Harrer (11)

Datenanalysen in der Softwareentwicklung (IMPROVE Workshop Wien)
Datenanalysen in der Softwareentwicklung (IMPROVE Workshop Wien)Datenanalysen in der Softwareentwicklung (IMPROVE Workshop Wien)
Datenanalysen in der Softwareentwicklung (IMPROVE Workshop Wien)
 
Software Analytics - Datenanalysen in der Softwareentwicklung (BigDataMeetup)
Software Analytics - Datenanalysen in der Softwareentwicklung (BigDataMeetup)Software Analytics - Datenanalysen in der Softwareentwicklung (BigDataMeetup)
Software Analytics - Datenanalysen in der Softwareentwicklung (BigDataMeetup)
 
Datenanalysen in der Softwareentwicklung mit Software Analytics
Datenanalysen in der Softwareentwicklung mit Software AnalyticsDatenanalysen in der Softwareentwicklung mit Software Analytics
Datenanalysen in der Softwareentwicklung mit Software Analytics
 
Software Analytics with Jupyter, Pandas, jQAssistant, and Neo4j [Neo4j Online...
Software Analytics with Jupyter, Pandas, jQAssistant, and Neo4j [Neo4j Online...Software Analytics with Jupyter, Pandas, jQAssistant, and Neo4j [Neo4j Online...
Software Analytics with Jupyter, Pandas, jQAssistant, and Neo4j [Neo4j Online...
 
Philosophy screws it all up (Pecha Kucha) [Java Forum Stuttgart 2017]
Philosophy screws it all up (Pecha Kucha) [Java Forum Stuttgart 2017]Philosophy screws it all up (Pecha Kucha) [Java Forum Stuttgart 2017]
Philosophy screws it all up (Pecha Kucha) [Java Forum Stuttgart 2017]
 
Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...
Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...
Nachvollziehbare, datengetriebene, automatisierte Analysen der Softwareentwic...
 
Software Analytics for Pragmatists [DevOps Camp 2017]
Software Analytics for Pragmatists [DevOps Camp 2017]Software Analytics for Pragmatists [DevOps Camp 2017]
Software Analytics for Pragmatists [DevOps Camp 2017]
 
Einsatzmöglichkeiten der automatisierten Analyse von Artefakten und Metadaten...
Einsatzmöglichkeiten der automatisierten Analyse von Artefakten und Metadaten...Einsatzmöglichkeiten der automatisierten Analyse von Artefakten und Metadaten...
Einsatzmöglichkeiten der automatisierten Analyse von Artefakten und Metadaten...
 
Erkenntnistheoretische Beurteilung von Extreme Programming
Erkenntnistheoretische Beurteilung von Extreme ProgrammingErkenntnistheoretische Beurteilung von Extreme Programming
Erkenntnistheoretische Beurteilung von Extreme Programming
 
An interactive form-based mobile software system with a sample application in...
An interactive form-based mobile software system with a sample application in...An interactive form-based mobile software system with a sample application in...
An interactive form-based mobile software system with a sample application in...
 
Erkenntnistheoretische Beurteilung von Extreme Programming
Erkenntnistheoretische Beurteilung von Extreme ProgrammingErkenntnistheoretische Beurteilung von Extreme Programming
Erkenntnistheoretische Beurteilung von Extreme Programming
 

Architektur und Code im Einklang [JUG Nürnberg]