57
by Mind the Gap Architecture versus Code Berlin Expert Days September 2016 Oliver B. Fischer - E-Post Development GmbH

Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

Embed Size (px)

Citation preview

Page 1: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

by

Mind the Gap Architecture versus Code

BerlinExpertDaysSeptember2016

OliverB.Fischer-E-PostDevelopmentGmbH

Page 2: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

2

Page 3: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

3

Was ist Software Architektur?

EinestrukturierteoderhierarchischeAnordnungderSystemkomponentensowiedieBeschreibungIhrerBeziehungen.

HelmutBalzert

Page 4: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

4

Was ist Software Architektur?

ThefundamentalorganisaBonofasystemembodiedinitscomponents,theirrelaBonshipstoeachother,andtheenvironment,andtheprinciplesguidingitsdesignandevoluBon.

IEEE1471-2000

Page 5: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

5

Was ist Software Architektur?

...fromtheplethoraofdefiniBonsthevaryconceptofSoGwareArchitectureisfuzzytothepointofuHeruselessness...

SEI@CMI:JohnCarter

Alotoffolksmean:

ThatpeculiarconsistencyandhomogenityofDesignthatwouldgivearisetotheeaseofuseandreuse,whichiswishedforbythedeveloperwhocallshimself„TheSoGwareArchitect“.

...[which]implodesimmediatlyontheappointmentofasecondSoGwareArchitect...

Page 6: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

6

Ziele von Software Architektur

SoGware-Qualität

Prozess Qualität Produkt-Qualität

Wartbarkeit Brauchbarkeit

PrüVarkeit Änderbarkeit Portabilität

Lesbarkeit Strukturiertheit Einfachheit

Page 7: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

7

Ziele von Software Architektur

DurchSoGwareArchitekturwollenwirerhalten:§ WartbareSoGware§ VerständlicheSoGware§ Anpassbarebzw.ErweiterbareSoGware§  EffizienteSoGware

Page 8: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

8

Wann Software Architektur entsteht

SoGwareArchitekturentstehtsobaldsichzweiPersonenübereinenAspekteinesDingsoderdasZusammenspielzweierDingeabsBmmen.

Page 9: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

9

Wann Software Architektur entsteht

SoBwareArchitekturentstehtsobaldsichzweiPersonen[übereinenAspekteinesDingsoderdasZusammenspielzweierDinge]absImmen.

Page 10: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

10

Software Architektur ist Kommunikation

SoGwareArchitekturist[auch]KommunikaBonüberStrukturen,BeziehungenundPrinzipien...

...umbesserundleichterarbeitenzukönnen.

Page 11: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

11

Software Architektur ist Kommunikation

SoGwareArchitekturmußVerständnisschaffen,nichtnurfürdasWie,sondernauchfürdasWarum!

Page 12: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

12

Software Architektur ist Kommunikation

DreiRollen-Model

Domainexperte Entwickler User

Page 13: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

13

Software Architektur ist Kommunikation

EinfachsterFall

§  Domainexperte§  Entwickler§  User

Page 14: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

14

Software Architektur ist Kommunikation

Eswirdschwieriger...

§  Domainexperte §  Entwickler§  User

Page 15: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

15

Software Architektur ist Kommunikation

Eswirdschwieriger...

§  Domainexperte §  Entwickler §  User

Page 16: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

16

Software Architektur ist Kommunikation

DasTeamwirdgrößer

§  Domainexperte §  Entwickler §  User

Page 17: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

17

Software Architektur ist Kommunikation

Esverteiltsich...

TeaminBerlin TeaminMünchen

Page 18: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

18

Software Architektur ist Kommunikation

Esverteiltsichgeographischundkulturell

IchsprecheDeutsch...

Яговорюпо-русский

IspeakEnglisch

Page 19: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

19

Software Architektur ist Kommunikation

Unddannauchzeitlich...

Page 20: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

20

Software Architektur ist Kommunikation

Achja:Microservices...

Page 21: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

21

Altlasten & Technische Schulden

VeralteteLibraries....

NeueLösungsansätze

DivergierendeMakroarchitektur

Page 22: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

22

Wir brauchen Regeln

HastDumalZeit?Ja,waswillstDudenn?

IchhabedaeineIdee.Laßmalhören...

......

Ja,somachenwirdas!

§1.JedesSystem...§2.JedeMethode...§3.AufjedemServer...§4....

Page 23: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

23

Wir brauchen Regeln

§1.JedesSystem...§2.JedeMethode...§3.AufjedemServer...§4....

Regelnentstehenmeistinformell

Page 24: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

24

Wir brauchen Regeln

InformelleRegelnhabenGrenzen...

§ GrößedesTeamserschwertKommunikaBon§  EntstehungvonInselwissen§  FluktuaBon§  Charaktertypen

Page 25: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

25

Lösungsansatz

ÜberführungvoninformellenRegelninformaleRegeln.

Page 26: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

26

Lösungsansatz

„Wirschreibendasauf!“„Wo?“

„ImWiki!“

Zitat„Wiki,derOrtwoInformaBonenzumSterbenhingehen.“

Page 27: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

27

Lösungsansatz

„Wirschreibendasauf!“„Wo?“

„ImWiki!“

W hereI informaBonK illsI tself

Page 28: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

28

Lösungsansatz

DokumentaIon!=

KommunikaIon

Page 29: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

29

Lösungsansatz

HelfenReviews?

Page 30: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

30

Lösungsansatz

HelfenTools?

Page 31: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

jQAssistant

MindTheGap!Architecturevs.Code

31

Page 32: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

32

hHp://jQAssistant.org§  OpenSource-  GPLv3

§  Currentrelease:1.1.3-  iniBated:03/2013-  firststablerelease:04/2015

§  Neo4jCommunityEdiBonembedded-  noinstallaBonnecessary

Page 33: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

33

§  TheIdea-  ScansoGwarestructures

-  Storeinadatabase

-  Executequeries§  Addhigherlevelconcepts§  FindconstraintviolaBons

-  CreateReports

àProvidefeedbacktodeveloperswithinbuildprocess

Database

Findall…

Page 34: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

34

CommandLine/Maven

Scan

Analyze

Report

Plugins

Plugins

Plugins

Page 35: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

35

§ Availablescannerplugins

§  PluginAPIispublic

*.class

RDBMSSchema

GitJaCoCo

FindBugsCheckStyle

LiquibaseJAR,WAR,EARZIP

applicaBon.xmlweb.xml

MANIFEST.MF /META-INF/services/*

beans.xml

pom.xml surefire-reports.xml

GZ

*.properBes

*.xsd

M2Repository

*.yaml

Page 36: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

Software As A Graph

MindTheGap!Architecturevs.Code

36

Page 37: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

37

§  Allweneedis…-  Nodes-  Labels-  ProperBes-  RelaBonships

§ Modelingisjust…-  Takingapen-  Drawingthestructuresonawhiteboard(i.e.thedatabase)

§ Wedon‘tneed…-  Foreignkeys-  Tablesandschemas-  Deepknowledgeingraphtheory

Type

EXTENDSfqn:org.springframework.samples.

petclinic.model.Owner

Page 38: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

Project

ArBfact

Maven

CONTAINS

Package

name:org

CONTAINS

Package

name:springframework CONTAINS

Package

name:petclinic

Package

CONTAINS

name:model

name:petclinic

CONTAINS

Package

name:samples

CREATES

Page 39: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

RETURNS

READS

Field

DECLARES

name:address

Package

name:model

Class

Type

CONTAINS

fqn:org.springframework.samples.petclinic.model.Person

name:Person

AnnotaBon

ANNOTATED_BY

Type

OF_TYPEfqn:javax.persistence.MappedSuperclass

Type

EXTENDS

Class

fqn:org.springframework.samples.petclinic.model.Owner

name:Owner

Type

OF_TYPE

fqn:java.lang.String

DECLARES

Method

name:getAddress()

AnnotaBon

ANNOTATED_BY

Type

OF_TYPEfqn:javax.persistence.EnBty

Page 40: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

40

TypeType

Class

EXTENDS

§  ExploreanapplicaBonusingqueries- Whichclassextendsfromanotherclass?

§  Let‘sconvertthistoASCIIart…-  ()asnodes-  -[]->asdirectedrelaBonships

Page 41: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

41

TypeType

Class

EXTENDS

§  ExploreanapplicaBonusingqueries- Whichclassextendsfromanotherclass?

§  Let‘sconvertthistoASCIIart…-  ()asnodes-  -[]->asdirectedrelaBonships

()-[]->()

Page 42: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

42

C2Type

C1Type

Class

EXTENDS

§  ExploreanapplicaBonusingqueries- Whichclassextendsfromanotherclass?

§  Let‘sconvertthistoASCIIart…-  ()asnodes-  -[]->asdirectedrelaBonships

(c1)-[]->(c2)

Page 43: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

43

C2Type

C1Type

Class

EXTENDS

§  ExploreanapplicaBonusingqueries- Whichclassextendsfromanotherclass?

§  Let‘sconvertthistoASCIIart…-  ()asnodes-  -[]->asdirectedrelaBonships

(c1)-[:EXTENDS]->(c2)

Page 44: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

44

§  ExploreanapplicaBonusingqueries- Whichclassextendsfromanotherclass?

§  Let‘sconvertthistoASCIIart…-  ()asnodes-  -[]->asdirectedrelaBonships

(c1:Class)-[:EXTENDS]->(c2:Type)

C2Type

C1Type

Class

EXTENDS

Page 45: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

45

§  ExploreanapplicaBonusingqueries- Whichclassextendsfromanotherclass?

§  PaHernmatchingisthecoreprincipleofCypherMATCH(c1:Class)-[:EXTENDS]->(c2:Type)RETURNc1.fqn,c2.fqn

C2Type

C1Type

Class

EXTENDS

Page 46: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

Demo #1

MindTheGap!Architecturevs.Code

46

hHp://jqassistant.org/get-started/

Page 47: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

Building The Bridge

MindTheGap!Architecturevs.Code

47

Page 48: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

48

§ Analyze-  ExecuBonofrules

§  DefinedinAsciiDocorXMLdocuments

-  Concepts§  Enrichdatamodel

-  Constraints§  DetectviolaBons

- Group§  AllowdifferentexecuBonprofiles

Page 49: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

49

ConstraintGroup

Concept ConceptConcept

Includes

Requires Requires

Requires

Page 50: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

50

§  Concept==JPAEntities[[jpa2:Entity]].Labelsalltypesannotatedwith@javax.persistence.EntitywithJpaandEntity.[source,cypher,role=concept]----MATCH(t:Type)-[:ANNOTATED_BY]->()-[:OF_TYPE]->(a:Type)WHEREa.fqn="javax.persistence.Entity"SETt:Jpa:EntityRETURNtASEntity----

Page 51: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

51

§  Concept

EnBty

JpaType

Class

fqn:org.springframework.samples.petclinic.model.Owner

name:Owner

AnnotaBon

ANNOTATED_BY

Type

OF_TYPEfqn:javax.persistence.EnBty

Page 52: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

52

§  Constraint[[model:JpaEntityInModelPackage]].AllJPAentitiesmustbelocatedinpackagesnamed"model".[source,cypher,role=constraint,requiresConcepts="jpa2:Entity"]----MATCH(package:Package)-[:CONTAINS]->(entity:Jpa:Entity)WHEREpackage.name<>"model"RETURNentityASEntityInWrongPackage----

Page 53: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

53

§ Group[[default]][role=group,includesConstraints="model:JpaEntityInModelPackage"]==NamingRulesThefollowingnamingrulesapply:-<<model:JpaEntityInModelPackage>>

Page 54: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

54

§ AsciiDoc§  Wikisyntax

§  Renderingto-  DocBook-  HTML

-  PDF

§  ExecutablespecificaBon-  Codingrules- Design&Architecture

Page 55: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

Demo #2

MindTheGap!Architecturevs.Code

55

hHp://github.com/buschmais/spring-petclinic

Page 56: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

56

- HolisBcviewoncodestructureandsystemarchitecture

-  ExploraBonofexisBngstructures

- ValidaBonofrules-  ExecutablearchitectureanddesignspecificaBon

-  Rulesusingtermsfromarchitecture&designlanguage

Page 57: Mind the Gap - Architecture versus Code @ Berlin Expert Days 2016

Mail:[email protected]

Web:jqassistant.org

TwiHer:@jqassistant

Thank You! – Questions?

by