46
Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Erkennen und Verhindern von struktureller Erosion

Ingmar Kellner

hello2morrow GmbH

April 2012

Continuous Architecture Management

Page 2: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

“How to draw the architecture of your system”

2 http://geekandpoke.typepad.com/.a/6a00d8341d3df553ef016764fffd81970b-pi

Page 3: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Agenda

Motivation

Theoretischer Hintergrund

Entwicklungsprozess

Demonstration von Sonargraph Architect

© 2012, hello2morrow GmbH 3

Page 4: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Motivation

Als Software Architekt will man …

… dass die Software eine hohe Qualität hat

… wissen, wie die interne Struktur wirklich aussieht

… strukturelle Erosion verhindern

… wissen, wo aktuell die Problemstellen sind

… existierende Software Module wiederverwenden

… eine aktuelle Dokumentation der Architektur

… Spaß haben bei der Arbeit!

© 2012, hello2morrow GmbH 4

Page 5: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Widerstände

Zeitdruck…

Was bedeutet gute Qualität?

Es ist zu kompliziert Metriken zu berechnen und sinnvolle

Schwellwerte zu definieren

Es ist aufwändig, die Architekturdokumentation mit der

Entwicklung abzugleichen

Die Abhängigkeiten zwischen Teilen der Software manuell zu

überprüfen ist nicht machbar

Fehlende Toolunterstützung, z.B. zeigt die IDE keine Warnung

an, wenn eine unerlaubte Abhängigkeit eingebaut wird.

© 2012, hello2morrow GmbH 5

Page 6: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Und das ist oft die Folge:

© 2012, hello2morrow GmbH 6

Page 7: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

7

Einige Gründe für die strukturelle Erosion

Wissen und Fähigkeiten im Team sind ungleich verteilt

Kopplung und Komplexität wachsen schnell

Vielfach gibt es keine formale Architektur

In den meisten Projekten wird die Qualität am Schluss betrachtet

Desinteresse an Qualität: Management betrachtet die Software

als “black box”

Das Gesetz der Software Entropy

Eine Software, die benutzt wird, wird verändert werden.

Wenn eine Software verändert wird, steigt die Komplexität, es sei

denn, man arbeitet aktiv dagegen.

© 2012, hello2morrow GmbH

Page 8: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

8

Man weiß, dass man ein Problem hat, wenn…

… das System schwierig ist anzupassen, weil jede Änderung viele

andere Änderungen nach sich zieht. [Rigidity]

… Änderungen zu Fehlern in konzeptionell verschiedenen Stellen

führen. [Fragility]

… es schwierig ist, das System in wiederverwendbare

Komponenten zu unterteilen. [Immobility]

… es schwieriger ist etwas richtig zu machen als falsch. [Viscosity]

… der Source Code schwierig zu verstehen ist. [Opacity]

“The software starts to rot like a bad piece of meat”

[Robert C. Martin in ASD]

© 2012, hello2morrow GmbH

Page 9: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Was ist technische Qualität?

Unsere Definition: “Technical quality of software can be defined as the level of

conformance of a software system to a set a set of rules and guidelines derived from

common sense and best practices. Those rules should cover software architecture,

programming in general, testing and coding style.”

Technische Qualität lässt sich nicht allein durch Testen erreichen

Technische Qualität manifestiert sich in jeder Codezeile

Vier Aspekte technischer Qualität:

Architektur und Abhängigkeitsstruktur

Software Metriken

Programmierregeln

Testbarkeit und Testabdeckung

Welcher dieser Aspekte hat den größten Einfluss auf die Gesamtkosten?

Messung erfolgt über Metriken und Zählung von Regelverletzungen

9 © 2012, hello2morrow GmbH

Page 10: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Kosten von struktureller Erosion / Technical Debt

10 © 2012, hello2morrow GmbH

Page 11: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Motivation

Theoretischer Hintergrund

Entwicklungsprozess

Demonstration von Sonargraph Architect

© 2012, hello2morrow GmbH 11

Page 12: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Sichtbares Verhalten und interne Struktur

Das sichtbare Verhalten wäre ausreichend zu verifizieren, wenn

sich Anforderungen nicht ändern würden

Software fehlerfrei wäre

Technologien sich nicht ändern würden

Aber…

Software muss angepasst, erweitert und korrigiert werden! Die

“maintenance” Phase ist für ca. 90% aller Entwicklungskosten

verantwortlich. [The Mythical Man Month]

Der Aufwand für die “maintenance” ist hauptsächlich bestimmt

durch die technische Qualität und die interne Struktur

Software muss normalerweise eine gewisse Zeit erfolgreich

eingesetzt werden, um sich zu armortisieren.

12 © 2012, hello2morrow GmbH

Page 13: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Makro Ebene:

Bsp einer einfachen “relaxed layered architecture”

13 © 2012, hello2morrow GmbH

Page 14: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Was ist mit fachlichen Aspekten?

Technische Aspekte sind die Grundlage für die Geschäftslogik

Fachliche Aspekte sind orthogonal zu technischen Schichten

Auch fachliche Aspekte müssen klare Abhängigkeiten aufweisen

14 © 2012, hello2morrow GmbH

Page 15: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

15

Eine logische Architektur mit fachlichen Schnitten

15

© 2012, hello2morrow GmbH

Page 16: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

16

Presentation

Domain

Persistence

Erstellen einer logischen Architektur

• Schritt 1: Teile horizontal in technische Aspekte

• Schritt 2: Teile vertikal in fachliche Aspekte

Con

tract

Custo

me

r

Use

r

Com

mo

n

• Schritt 3: Definiere erlaubte Abhängigkeiten

© 2012, hello2morrow GmbH

Page 17: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Der Source Code implementiert die logische Architektur

Entwickler setzen use cases um …

…, indem sie Klassen und Interfaces in Paketen anlegen

… und berücksichtigen die vorhandenen Architektur-Restriktionen

… und ordnen über eine Namenskonvention die physikalischen Artefakte in

die logische Architektur ein.

Der Source Code ist nicht isoliert

Es ist keine Magie involviert – es gibt nichts Expliziteres als den

Source Code

“The software is the design” [Robert C. Martin in ASD]

17 © 2012, hello2morrow GmbH

Page 18: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Abhängigkeiten und Level

Element A

Element B

Element A

Element C

Element B

Element C

LEVEL

1

2

3

cyclic acyclic

18 © 2012, hello2morrow GmbH

Page 19: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Der Effekt von zyklischen Abhängigkeiten

Zyklische Abhängigkeiten haben einen negativen Einfluss auf:

Testen

Verständlichkeit

Wiederverwendung

Erweiterbarkeit

Team building

“Cyclic physical dependencies in large, low-level subsystems have

the greatest capacity to increase the overall cost of maintaining a

system“ [John Lakos in LSD]

© 2012, hello2morrow GmbH 19

Page 20: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Beispiel für eine Zyklengruppe

© 2012, hello2morrow GmbH 20

Page 21: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

21

Berechnung des Kopplungsgrades [LSD]

Depends upon = Die Anzahl von Komponenten, von der eine

Komponente abhängt (+1 für sich selbst).

In Java gilt Source File == Komponete.

ACD (Average Component Dependency) = Die Summe aller

“depends upon” Werte, geteilt durch die Anzahl aller

Komponenten

6

3 3

1 1 1

ACD = 15/6 = 2,5

3

1 1

2 3 2

Dependency Inversion

ACD = 12/6 = 2

6

6 6

1 6 1

Cycles

ACD = 26/6 = 4,33

21

© 2012, hello2morrow GmbH

Page 22: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Bsp für das Auflösen eines Zyklus

© 2012, hello2morrow GmbH 22

Page 23: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Umkehrung der Abhängigkeit durch ein Callback

Interface

© 2012, hello2morrow GmbH 23

Page 24: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Regeln für die Mikro Ebene

Methoden implementieren Verhalten Beschränkung der Komplexität (Cyclomatic Complexity)

Typen gruppieren Methoden Typen sollten klare Abstraktionen repräsentieren

Typen sollten klare Verantwortlichkeiten haben

Compilation units / Komponenten / Typen Zyklen sollten vermieden werden

Beschränkung der Größe

Kopplungsgrad im Auge behalten

Packages gruppieren compilation units Zyklen sollten verboten sein

Auch packages sollten klare Verantwortlichkeiten haben

Beschränkung der Anzahl enthaltener compilation units

24 © 2012, hello2morrow GmbH

Page 25: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Motivation

Theoretischer Hintergrund

Entwicklungsprozess

Demonstration von Sonargraph Architect

© 2012, hello2morrow GmbH 25

Page 26: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

26

Workflow

Ein Architektur Team etabliert die strukturellen Regeln.

Aufgaben können definiert werden, basierend auf

vorgeschlagenen Refactorings oder erkannten Verletzungen.

Entwickler können leicht die Einhaltung der Regeln in ihrer IDE

überprüfen.

Entwickler können leicht ihnen zugeordnete Aufgaben erkennen.

Das Architekturteam bekommt Rückmeldung zu den gelösten

Aufgaben.

Die Qualität (== Einhaltung der Regeln) wird kontinuierlich

überprüft.

26

© 2012, hello2morrow GmbH

Page 27: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Architektur Workflow

© 2012, hello2morrow GmbH 27

Definiert

Architektur,

Schwellwerte und

Aufgaben

Implementieren Use

Cases und Aufgaben

unter Beachtung der

Architektur und

Schwellwerten

Überprüft die

Einhaltung der

Regeln

BUILD Server

DEVELOPERS ARCHITECT

Page 28: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Architecture Workflow with Sonargraph

28

BUILD

DEVELOPER

TASK MANAGEMENT METRIC HISTORY

Version Control System ARCHITECT

Reports

© 2012, hello2morrow GmbH

Page 29: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Motivation

Theoretischer Hintergrund

Entwicklungsprozess

Demonstration von Sonargraph Architect

© 2012, hello2morrow GmbH 29

Page 30: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 1: Define the workspace

© 2012, hello2morrow GmbH 30

Page 31: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 1: Status after initial workspace setup

© 2012, hello2morrow GmbH 31

Page 32: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 2: Definition of Layer Groups

© 2012, hello2morrow GmbH 32

Page 33: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 2: Definition of Layers

© 2012, hello2morrow GmbH 33

Page 34: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 2: Using Stereotypes

<<public>> : If an element has the stereotype public, it may be

accessed by any other non-public element in the same container.

<<unrestricted>> : If a non-public element has the stereotype

unrestricted, it may access any other element in the same

container. A public element which is unrestricted may access any

other public element in the same container.

<<hidden>> : If an element has the stereotype hidden, it may not

be accessed from outside its parent container.

<<local>> : If an element has the stereotype local, it may not

access any other element outside its parent container, except

external elements.

© 2012, hello2morrow GmbH 34

Page 35: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 2: Assignement of types

© 2012, hello2morrow GmbH 35

Page 36: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 3: Definition of vertical slices

© 2012, hello2morrow GmbH 36

Page 37: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 4: Definition of dependencies

© 2012, hello2morrow GmbH 37

Page 38: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 5: Exploration of the System

© 2012, hello2morrow GmbH 38

Page 39: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 6: Cut dependency and move types

© 2012, hello2morrow GmbH 39

Page 40: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Step 7: Overview of Tasks

© 2012, hello2morrow GmbH 40

Page 41: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Sonargraph Eclipse Integration into Source

Editor

© 2012, hello2morrow GmbH 41

Page 42: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Sonargraph Sonar Plugin - Dashboard

© 2012, hello2morrow GmbH 42

Page 43: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Sonargraph Sonar Plugin – Violation Drilldown

© 2012, hello2morrow GmbH 43

Page 44: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

Sonargraph Adapter for

Atlassian JIRA Task Management

© 2012, hello2morrow GmbH 44

Page 45: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

45

Take away: Wenige Regeln können viel bewirken

Definition einer Zyklen-freien logische Architektur und einer

konsistente Package Namenskonvention. Alle Packages müssen

logischen Architekturelementen zugeordnet werden.

Keine Zyklen zwischen Packages

Kontrolle des Kopplungsgrades (ACD und NCCD mit

vernünftigen Schwellwerten)

Beschränkung der Größe von Java Sourcen (700 Zeilen)

Beschränkung der Zyklomatischen Komplexität von Methoden

(z.B. 20)

Regelmäßige Überprüfung der Regeln

45

© 2012, hello2morrow GmbH

Page 46: Continuous Architecture Management · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH April 2012 Continuous Architecture Management

46

Weitere Informationen

Whitepaper auf unserer Web-Seite:

http://www.hello2morrow.com

Community Lizenz für Projekte < 50 000 Byte Code Instructions

14 Tage Evaluierung ohne Einschränkung

Referenzen

[GOF] Design Patterns, Gamma et al., Addison-Wesley 1994

[LSD] Large-Scale C++ Software Design, John Lakos, Addison-Wesley 1996

[EXP] Extreme Programming, Kent Beck, Addison-Wesley 1999

[AUP] Applying UML and Patterns, Craig Larman, Prentice Hall 2000

[TOS] Testing Object-Oriented Systems, Beizer, Addison-Wesley 2000

[ASD] Agile Software Development, Robert C. Martin, Prentice Hall 2003

46

© 2012, hello2morrow GmbH