30
Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH Mai 2012 Continuous Architecture Management

Continuous Architecture Management - Entwicklertag · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH Mai 2012 Continuous Architecture Management

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

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

Erkennen und Verhindern von struktureller Erosion

Ingmar Kellner

hello2morrow GmbH

Mai 2012

Continuous Architecture Management

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

Agenda

Motivation des Software Architekten

Ursachen und Folgen struktureller Erosion

Lösungsansätze

Entwicklungsprozess

© 2012, hello2morrow GmbH 2

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

Motivation

Als Software Architekt will ich …

… dass meine Software eine hohe Qualität hat

… wissen, wie die interne Struktur wirklich aussieht

… strukturelle Erosion verhindern

… wissen, wo aktuell die Problemstellen sind

… eine aktuelle Dokumentation der Architektur

… existierende Software Module wiederverwenden

© 2012, hello2morrow GmbH 3

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

Und dennoch sieht es oft so aus:

© 2012, hello2morrow GmbH 4

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

Offensichtliche Widerstände

Zeitdruck

Was bedeutet gute Qualität?

Es ist zu kompliziert Metriken zu berechnen und sinnvolle

Schwellenwerte 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 - Entwicklertag · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH Mai 2012 Continuous Architecture Management

Realitätscheck

Gibt es bei Ihnen verbindliche Qualitätsregeln?

Werden diese Regeln täglich automatisch geprüft?

Gibt es eine formelle Architekturdefinition?

Wird der Code automatisch und täglich auf Einhaltung der

Architekturdefinition geprüft?

Denken Sie, dass in diesem Bereich mehr zu tun ist?

© 2012, hello2morrow GmbH 6

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

Motivation

Ursachen und Folgen der strukturellen Erosion

Lösungsansätze

Entwicklungsprozess

© 2012, hello2morrow GmbH 7

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

8

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 (aktuelle) formale Architektur

Mythos der agilen Superhelden

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 [Lehmann]

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 9: Continuous Architecture Management - Entwicklertag · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH Mai 2012 Continuous Architecture Management

© 2012, hello2morrow GmbH 9

Symptome der Erosion (Robert C. Martin)

Rigidity – The system is hard to change because every change

forces many other changes.

Fragility – Changes cause the system to break in conceptually

unrelated places.

Immobility – It's hard to disentangle the system into reusable

components.

Viscosity – Doing things right is harder than doing things wrong.

Opacity – It is hard to read and understand. It does not express

its intent well.

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

Page 10: Continuous Architecture Management - Entwicklertag · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH Mai 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 (inkl. Abhängigkeitsstruktur)

Software Metriken

Programmierregeln

Testbarkeit und Testabdeckung

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

Messung der Qualität über Metriken und Zählung von Regelverletzungen

© 2012, hello2morrow GmbH 10

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

Kosten struktureller Erosion

© 2012, hello2morrow GmbH 11

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

Motivation

Ursachen und Folgen der strukturellen Erosion

Lösungsansätze

Entwicklungsprozess

© 2012, hello2morrow GmbH 12

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

Architektur - Definition

“The architecture represents the software structures that form the

skeleton of the application.” [ASD]

Architecture is the fundamental organization of a system

embodied in its components, their relationships to each other,

and to the environment, and the principles guiding its design

and evolution. [IEEE 1471]

© 2012, hello2morrow GmbH 13

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

14

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

Softwaresystem

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

Etwas komplexere Logische Architektur

© 2012, hello2morrow GmbH 15

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

16

Metrik für den Kopplungsgrad [LSD]

Depends upon = Die Anzahl von Komponenten, von der eine

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

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

16

© 2012, hello2morrow GmbH

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

Der Effekt von zyklischen Abhängigkeiten

Zyklische Abhängigkeiten haben u.a. einen negativen Einfluss auf:

Testbarkeit

Verständlichkeit

Wiederverwendung

Erweiterbarkeit

Build & Release Management

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 17

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

Strukturelle Erosion am Bsp des JDK 1.6

© 2012, hello2morrow GmbH 18

Zyklengruppe von 29 Packages

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

Strukturelle Erosion am Bsp des JDK 1.6

© 2012, hello2morrow GmbH 19

Zyklengruppe von 50 Packages

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

Strukturelle Erosion am Bsp des JDK 1.6

© 2012, hello2morrow GmbH 20

Zyklengruppe von 250 Packages

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

Bsp für das Auflösen eines Zyklus

© 2012, hello2morrow GmbH 21

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

Umkehrung der Abhängigkeit durch ein Callback

Interface

© 2012, hello2morrow GmbH 22

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

Regeln für die Mikro Ebene

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

Beschränkung von Parametern

Klassen gruppieren Methoden Zyklen sollten vermieden werden

Beschränkung der Größe (LOC, Anzahl Methoden)

Kopplungsgrad im Auge behalten

Packages gruppieren Klassen Zyklen sollten verboten sein

Beschränkung der Anzahl enthaltener Klassen

23 © 2012, hello2morrow GmbH

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

Motivation

Ursachen und Folgen der strukturellen Erosion

Lösungsansätze

Entwicklungsprozess

© 2012, hello2morrow GmbH 24

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

Prinzipien aus dem Agile Manifesto:

“[…] Through this work we have come to value:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

That is, while there is value in the items on the right, we value the

items on the left more.”

Trugschluss: Man braucht keine Prozesse, Werkzeuge,

Architekturdefinitionen, etc.

© 2012, hello2morrow GmbH 25

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

Verbesserungen erfordern Transparenz

© 2012, hello2morrow 26

Define

Measure

Analyze Improve

Control

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

Architektur Workflow

© 2012, hello2morrow GmbH 27

Definiert Architektur,

Schwellenwerte und

Aufgaben

Implementieren Use

Cases und Aufgaben

unter Beachtung der

Architektur und

Schwellenwerten

Überprüft die

Einhaltung der Regeln

BUILD Server

DEVELOPERS ARCHITECT

Page 28: Continuous Architecture Management - Entwicklertag · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH Mai 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 - Entwicklertag · Erkennen und Verhindern von struktureller Erosion Ingmar Kellner hello2morrow GmbH Mai 2012 Continuous Architecture Management

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 Schwellenwerten)

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

Beschränkung der Zyklomatischen Komplexität von Methoden

(z.B. 20)

Regelmäßige, automatische Überprüfung der Regeln

Qualität muss als Zielvorgabe von allen Managementebenen

mitgetragen werden!

29 © 2012, hello2morrow GmbH

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

30

Weitere Informationen

Whitepaper, DZone RefCard, etc. auf unserer Web-Seite:

http://www.hello2morrow.com

Meine e-mail: [email protected]

Referenzen

[MMM] The Mythical Man-Month, F. P. Brooks, Addison-Wesley, 1975, 1995

[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

© 2012, hello2morrow GmbH