#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