61
#dwx14 Mit agilen Praktiken SOLIDe Systeme bauen Sven Günther it-agile GmbH

Mit agilen Praktiken SOLIDe Systeme bauen

Embed Size (px)

Citation preview

Page 1: Mit agilen Praktiken SOLIDe Systeme bauen

#dwx14

Mit agilen Praktiken SOLIDe

Systeme bauen

Sven Günther it-agile GmbH

Page 2: Mit agilen Praktiken SOLIDe Systeme bauen

2

Kennen Sie das?

Page 3: Mit agilen Praktiken SOLIDe Systeme bauen

… und das?

Red

GreenRefactor

Page 4: Mit agilen Praktiken SOLIDe Systeme bauen

… und das?

S O L I D

Page 5: Mit agilen Praktiken SOLIDe Systeme bauen

Kurz vor Sprintende

TODO DOING DONE

Page 6: Mit agilen Praktiken SOLIDe Systeme bauen

gerade noch geschafft!

TODO DOING DONE

Page 7: Mit agilen Praktiken SOLIDe Systeme bauen

technische Schulden

Page 8: Mit agilen Praktiken SOLIDe Systeme bauen

Velocity z.B. 20

Storypoints

Velocity z.B. 30

Storypoints

Page 9: Mit agilen Praktiken SOLIDe Systeme bauen

TODO DOING DONE

Fertig!

eigentlich müsste man mal

Page 10: Mit agilen Praktiken SOLIDe Systeme bauen

TODO DOING DONE

Visualisiert es!

Page 11: Mit agilen Praktiken SOLIDe Systeme bauen

Culture eats strategy for

breakfast

Page 12: Mit agilen Praktiken SOLIDe Systeme bauen

Software Craftsmanship

Page 13: Mit agilen Praktiken SOLIDe Systeme bauen

Agile Developer Skills

• Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI)

Page 14: Mit agilen Praktiken SOLIDe Systeme bauen

• Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI)

Agile Developer Skills

Page 15: Mit agilen Praktiken SOLIDe Systeme bauen

Smells als Auslöser

• Kommentare • Duplikate • Unverständlicher Code • Enge Kopplung • Toter Code • Komplexer Code • zu große Module / Klassen / Methoden

Page 16: Mit agilen Praktiken SOLIDe Systeme bauen

Don’t boil Frogs

React Early, React Small

Page 17: Mit agilen Praktiken SOLIDe Systeme bauen

Broken Window

Page 18: Mit agilen Praktiken SOLIDe Systeme bauen

Boy Scout Rule

Page 19: Mit agilen Praktiken SOLIDe Systeme bauen

Wie mache ich Refactoring richtig?

Page 20: Mit agilen Praktiken SOLIDe Systeme bauen

Tiny little Babysteps …

Page 21: Mit agilen Praktiken SOLIDe Systeme bauen

… auf dem grünen Pfad

Page 22: Mit agilen Praktiken SOLIDe Systeme bauen

Mikado Method

http://mikadomethod.org

Page 23: Mit agilen Praktiken SOLIDe Systeme bauen

Bridge Pattern

Page 24: Mit agilen Praktiken SOLIDe Systeme bauen

• Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI)

Agile Developer Skills

Page 25: Mit agilen Praktiken SOLIDe Systeme bauen

Design Prinzipien

SOLID

ingle Responsibility Principle

pen Closed Principle

iskov Substitution Principle

nterface Segregation Principle

ependency Inversion Principle

Page 26: Mit agilen Praktiken SOLIDe Systeme bauen

©Telerik,  Inc.

Page 27: Mit agilen Praktiken SOLIDe Systeme bauen

Single Responsibility Principle

SRP!Jede Klasse hat nur einen

Grund sich zu ändern.

Page 28: Mit agilen Praktiken SOLIDe Systeme bauen
Page 29: Mit agilen Praktiken SOLIDe Systeme bauen

Currency Converter

hole die aktuellen Kurse

parse das Ergebnis

rechne um mit gegebenem Kurs

Verteile Verantwortlichkeiten

Page 30: Mit agilen Praktiken SOLIDe Systeme bauen

©Telerik,  Inc.

Page 31: Mit agilen Praktiken SOLIDe Systeme bauen

Open Closed Principle

OCP!

Eine Klasse ist offen für Erweiterungen aber

geschlossen gegenüber Änderungen

Page 32: Mit agilen Praktiken SOLIDe Systeme bauen

unflexibel und fragil

Page 33: Mit agilen Praktiken SOLIDe Systeme bauen

flexibel erweiterbar

Page 34: Mit agilen Praktiken SOLIDe Systeme bauen

©Telerik,  Inc.

Page 35: Mit agilen Praktiken SOLIDe Systeme bauen

Liskov Substitution Principle

LSP!

Sei q(x) eine beweisbare Eigenschaft von Objekten x des

Typs T. Dann soll q(y) für Objekte y des Typs S wahr sein, wobei S ein

Untertyp von T ist.

Page 36: Mit agilen Praktiken SOLIDe Systeme bauen

Beispiel

Rechteck

Quadrat

?

Page 37: Mit agilen Praktiken SOLIDe Systeme bauen

Beispiel

Rechteck

Quadrat

Page 38: Mit agilen Praktiken SOLIDe Systeme bauen

Lösung

Polygon

QuadratRechteck

Page 39: Mit agilen Praktiken SOLIDe Systeme bauen

©Telerik,  Inc.

Page 40: Mit agilen Praktiken SOLIDe Systeme bauen

Interface Segregation

ISP!

Die Methoden einer Schnittstelle sollen eine

hohe Kohäsion aufweisen

Page 41: Mit agilen Praktiken SOLIDe Systeme bauen

Interface Segregation

DatabaseService

Suchanfrage

Entitäten manipulieren

Administration

Database Service

Impl

Page 42: Mit agilen Praktiken SOLIDe Systeme bauen

Interface Segregation

QueryServiceSuchanfrage

Entitäten manipulieren

Administration

Persistence Service

DBAdminService

Database Service

Impl

Page 43: Mit agilen Praktiken SOLIDe Systeme bauen

©Telerik,  Inc.

Page 44: Mit agilen Praktiken SOLIDe Systeme bauen

Dependency Inversion Principle

DIP!

High-Level-Konzepte sollen nicht von

Low-Level-Konzepten abhängen

Page 45: Mit agilen Praktiken SOLIDe Systeme bauen

Dependency Inversion Principle

Copy

Write PrinterRead Keyboard

<<uses>>

HighLevel

LowLevel

Page 46: Mit agilen Praktiken SOLIDe Systeme bauen

… write to disk

Copy

Write PrinterRead Keyboard

<<uses>>

HighLevel

LowLevelWrite Disk

Page 47: Mit agilen Praktiken SOLIDe Systeme bauen

Copy <<uses>>HighLevel

LowLevel

<<interface>> File

Keyboard Reader

Printer Writer

Page 48: Mit agilen Praktiken SOLIDe Systeme bauen

Copy

Keyboard Reader

Printer Writer

<<interface>> File

HighLevel

LowLevel

DIP + SRP + ISP

Page 49: Mit agilen Praktiken SOLIDe Systeme bauen

Copy

Keyboard Reader

<<interface>> Reader

Printer Writer

<<interface>> Writer

HighLevel

LowLevel

DIP + SRP + ISP

Page 50: Mit agilen Praktiken SOLIDe Systeme bauen

• Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI)

Agile Developer Skills

Page 51: Mit agilen Praktiken SOLIDe Systeme bauen

Testpyramide

Unit-Tests

Akzeptanz- / Integrationstests

explorative Tests

Auto

mat

isier

ungs

grad

Page 52: Mit agilen Praktiken SOLIDe Systeme bauen

Testpyramide

Unit-Tests

Akzeptanz- / Integrationstests

explorative Tests

fach

liche

Bre

ite

Page 53: Mit agilen Praktiken SOLIDe Systeme bauen

Testdriven Development

Red

GreenRefactor

Page 54: Mit agilen Praktiken SOLIDe Systeme bauen

ATDD - Akzeptanztestdriven Development

Page 55: Mit agilen Praktiken SOLIDe Systeme bauen

• Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI)

Agile Developer Skills

Page 56: Mit agilen Praktiken SOLIDe Systeme bauen

Keine Big Bang Integration

Page 57: Mit agilen Praktiken SOLIDe Systeme bauen

Kein Code Freeze

Page 58: Mit agilen Praktiken SOLIDe Systeme bauen

Length of Feedback

Cycle

Cost

Page 59: Mit agilen Praktiken SOLIDe Systeme bauen

• Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI)

Agile Developer Skills

Page 60: Mit agilen Praktiken SOLIDe Systeme bauen
Page 61: Mit agilen Praktiken SOLIDe Systeme bauen

Fragen?

Sven Günther @inevs [email protected]