Mit agilen Praktiken SOLIDe Systeme bauen

Preview:

Citation preview

#dwx14

Mit agilen Praktiken SOLIDe

Systeme bauen

Sven Günther it-agile GmbH

2

Kennen Sie das?

… und das?

Red

GreenRefactor

… und das?

S O L I D

Kurz vor Sprintende

TODO DOING DONE

gerade noch geschafft!

TODO DOING DONE

technische Schulden

Velocity z.B. 20

Storypoints

Velocity z.B. 30

Storypoints

TODO DOING DONE

Fertig!

eigentlich müsste man mal

TODO DOING DONE

Visualisiert es!

Culture eats strategy for

breakfast

Software Craftsmanship

Agile Developer Skills

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

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

Agile Developer Skills

Smells als Auslöser

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

Don’t boil Frogs

React Early, React Small

Broken Window

Boy Scout Rule

Wie mache ich Refactoring richtig?

Tiny little Babysteps …

… auf dem grünen Pfad

Mikado Method

http://mikadomethod.org

Bridge Pattern

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

Agile Developer Skills

Design Prinzipien

SOLID

ingle Responsibility Principle

pen Closed Principle

iskov Substitution Principle

nterface Segregation Principle

ependency Inversion Principle

©Telerik,  Inc.

Single Responsibility Principle

SRP!Jede Klasse hat nur einen

Grund sich zu ändern.

Currency Converter

hole die aktuellen Kurse

parse das Ergebnis

rechne um mit gegebenem Kurs

Verteile Verantwortlichkeiten

©Telerik,  Inc.

Open Closed Principle

OCP!

Eine Klasse ist offen für Erweiterungen aber

geschlossen gegenüber Änderungen

unflexibel und fragil

flexibel erweiterbar

©Telerik,  Inc.

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.

Beispiel

Rechteck

Quadrat

?

Beispiel

Rechteck

Quadrat

Lösung

Polygon

QuadratRechteck

©Telerik,  Inc.

Interface Segregation

ISP!

Die Methoden einer Schnittstelle sollen eine

hohe Kohäsion aufweisen

Interface Segregation

DatabaseService

Suchanfrage

Entitäten manipulieren

Administration

Database Service

Impl

Interface Segregation

QueryServiceSuchanfrage

Entitäten manipulieren

Administration

Persistence Service

DBAdminService

Database Service

Impl

©Telerik,  Inc.

Dependency Inversion Principle

DIP!

High-Level-Konzepte sollen nicht von

Low-Level-Konzepten abhängen

Dependency Inversion Principle

Copy

Write PrinterRead Keyboard

<<uses>>

HighLevel

LowLevel

… write to disk

Copy

Write PrinterRead Keyboard

<<uses>>

HighLevel

LowLevelWrite Disk

Copy <<uses>>HighLevel

LowLevel

<<interface>> File

Keyboard Reader

Printer Writer

Copy

Keyboard Reader

Printer Writer

<<interface>> File

HighLevel

LowLevel

DIP + SRP + ISP

Copy

Keyboard Reader

<<interface>> Reader

Printer Writer

<<interface>> Writer

HighLevel

LowLevel

DIP + SRP + ISP

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

Agile Developer Skills

Testpyramide

Unit-Tests

Akzeptanz- / Integrationstests

explorative Tests

Auto

mat

isier

ungs

grad

Testpyramide

Unit-Tests

Akzeptanz- / Integrationstests

explorative Tests

fach

liche

Bre

ite

Testdriven Development

Red

GreenRefactor

ATDD - Akzeptanztestdriven Development

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

Agile Developer Skills

Keine Big Bang Integration

Kein Code Freeze

Length of Feedback

Cycle

Cost

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

Agile Developer Skills

Fragen?

Sven Günther @inevs sven.guenther@it-agile.de

Recommended