#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 kon...
• Clean Code & Refactoring
• Design Prinzipien anwenden
• Automatisierte Tests erstellen
• Code kontinuierlich integrieren...
Smells als Auslöser
• Kommentare
• Duplikate
• Unverständlicher Code
• Enge Kopplung
• Toter Code
• Komplexer Code
• zu gr...
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...
Design Prinzipien
S
O
L
I
D
ingle Responsibility Principle
pen Closed Principle
iskov Substitution Principle
nterface Segr...
©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 Ob...
Beispiel
Rechteck
Quadrat
?
Beispiel
Rechteck
Quadrat
Lösung
Polygon
Quadrat
Rechteck
©Telerik,	
  Inc.
Interface Segregation
ISP

!
Die Methoden einer
Schnittstelle sollen eine
hohe Kohäsion aufweisen
Interface Segregation
Database
Service
Suchanfrage
Entitäten
manipulieren
Administration
Database
Service
Impl
Interface Segregation
QueryServiceSuchanfrage
Entitäten
manipulieren
Administration
Persistence
Service
DBAdminService
Dat...
©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...
Testpyramide
Unit-Tests
Akzeptanz- /
Integrationstests
explorative Tests
Automatisierungsgrad
Testpyramide
Unit-Tests
Akzeptanz- /
Integrationstests
explorative Tests
fachlicheBreite
Testdriven Development
Red
GreenRefactor
ATDD - Akzeptanztestdriven Development
• Clean Code & Refactoring
• Design Prinzipien anwenden
• Automatisierte Tests erstellen
• Code kontinuierlich integrieren...
Keine Big Bang Integration
Kein Code Freeze
Length of
Feedback
Cycle
Cost
• Clean Code & Refactoring
• Design Prinzipien anwenden
• Automatisierte Tests erstellen
• Code kontinuierlich integrieren...
Fragen?
Sven Günther
@inevs
sven.guenther@it-agile.de
Mit agilen Praktiken SOLIDe Systeme bauen
Mit agilen Praktiken SOLIDe Systeme bauen
Nächste SlideShare
Wird geladen in …5
×

Mit agilen Praktiken SOLIDe Systeme bauen

354 Aufrufe

Veröffentlicht am

Seit einiger Zeit sind agile Entwicklungsprozesse im Mainstream angekommen. Viele Teams entwickeln Software mit agilen Methoden. Doch reicht es, den Prozess umzustellen? Wie sollen wir spät erkannte Anforderungen in unsere Software integrieren, wenn diese nicht flexibel ist? Wie soll ich nach jedem Commit alles integrieren, wenn schon der Build 3 Stunden braucht? Wie sollen wir nach jedem 2-Wochen-Sprint ausliefern, wenn schon das Testen 4 Wochen dauert?
Die Erfahrung der letzten Jahre hat gezeigt, dass es vielen Scrum-Teams nicht gelingt, Iterations-Ergebnisse mit ausreichend hoher Qualität zu erstellen. Martin Fowler bezeichnete dies als Flaccid Scrum und auch Ken Schwaber gestand ein, dass viele Entwicklungsteams nicht ausreichend mit modernen Entwicklungspraktiken vertraut sind. Zu agiler Entwicklung gehört also mehr, als nur den Prozess umzustellen. Dieser Vortrag zeigt, welche agilen Entwicklungspraktiken helfen, flexible Systeme zu bauen, die leicht änderbar und wartbar sind. Wie sieht der Werkzeugkasten aus, den ein Entwickler im agilen Umfeld benötigt? Welche Techniken und Tools helfen ihm, nach jedem Sprint ein potentiell auslieferbares Produktinkrement zu erstellen?

Veröffentlicht in: Software
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
354
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
4
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Mit agilen Praktiken SOLIDe Systeme bauen

  1. 1. #dwx14 Mit agilen Praktiken SOLIDe Systeme bauen Sven Günther it-agile GmbH
  2. 2. 2 Kennen Sie das?
  3. 3. … und das? Red GreenRefactor
  4. 4. … und das? S O L I D
  5. 5. Kurz vor Sprintende TODO DOING DONE
  6. 6. gerade noch geschafft! TODO DOING DONE
  7. 7. technische Schulden
  8. 8. Velocity z.B. 20 Storypoints Velocity z.B. 30 Storypoints
  9. 9. TODO DOING DONE Fertig! eigentlich müsste man mal
  10. 10. TODO DOING DONE Visualisiert es!
  11. 11. Culture eats strategy for breakfast
  12. 12. Software Craftsmanship
  13. 13. Agile Developer Skills • Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI)
  14. 14. • Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI) Agile Developer Skills
  15. 15. Smells als Auslöser • Kommentare • Duplikate • Unverständlicher Code • Enge Kopplung • Toter Code • Komplexer Code • zu große Module / Klassen / Methoden
  16. 16. Don’t boil Frogs React Early, React Small
  17. 17. Broken Window
  18. 18. Boy Scout Rule
  19. 19. Wie mache ich Refactoring richtig?
  20. 20. Tiny little Babysteps …
  21. 21. … auf dem grünen Pfad
  22. 22. Mikado Method http://mikadomethod.org
  23. 23. Bridge Pattern
  24. 24. • Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI) Agile Developer Skills
  25. 25. Design Prinzipien S O L I D ingle Responsibility Principle pen Closed Principle iskov Substitution Principle nterface Segregation Principle ependency Inversion Principle
  26. 26. ©Telerik,  Inc.
  27. 27. Single Responsibility Principle SRP ! Jede Klasse hat nur einen Grund sich zu ändern.
  28. 28. Currency Converter hole die aktuellen Kurse parse das Ergebnis rechne um mit gegebenem Kurs Verteile Verantwortlichkeiten
  29. 29. ©Telerik,  Inc.
  30. 30. Open Closed Principle OCP ! Eine Klasse ist offen für Erweiterungen aber geschlossen gegenüber Änderungen
  31. 31. unflexibel und fragil
  32. 32. flexibel erweiterbar
  33. 33. ©Telerik,  Inc.
  34. 34. 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.
  35. 35. Beispiel Rechteck Quadrat ?
  36. 36. Beispiel Rechteck Quadrat
  37. 37. Lösung Polygon Quadrat Rechteck
  38. 38. ©Telerik,  Inc.
  39. 39. Interface Segregation ISP ! Die Methoden einer Schnittstelle sollen eine hohe Kohäsion aufweisen
  40. 40. Interface Segregation Database Service Suchanfrage Entitäten manipulieren Administration Database Service Impl
  41. 41. Interface Segregation QueryServiceSuchanfrage Entitäten manipulieren Administration Persistence Service DBAdminService Database Service Impl
  42. 42. ©Telerik,  Inc.
  43. 43. Dependency Inversion Principle DIP ! High-Level-Konzepte sollen nicht von Low-Level-Konzepten abhängen
  44. 44. Dependency Inversion Principle Copy Write PrinterRead Keyboard <<uses>> HighLevel LowLevel
  45. 45. … write to disk Copy Write PrinterRead Keyboard <<uses>> HighLevel LowLevelWrite Disk
  46. 46. Copy <<uses>> HighLevel LowLevel <<interface>> File Keyboard Reader Printer Writer
  47. 47. Copy Keyboard Reader Printer Writer <<interface>> File HighLevel LowLevel DIP + SRP + ISP
  48. 48. Copy Keyboard Reader <<interface>> Reader Printer Writer <<interface>> Writer HighLevel LowLevel DIP + SRP + ISP
  49. 49. • Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI) Agile Developer Skills
  50. 50. Testpyramide Unit-Tests Akzeptanz- / Integrationstests explorative Tests Automatisierungsgrad
  51. 51. Testpyramide Unit-Tests Akzeptanz- / Integrationstests explorative Tests fachlicheBreite
  52. 52. Testdriven Development Red GreenRefactor
  53. 53. ATDD - Akzeptanztestdriven Development
  54. 54. • Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI) Agile Developer Skills
  55. 55. Keine Big Bang Integration
  56. 56. Kein Code Freeze
  57. 57. Length of Feedback Cycle Cost
  58. 58. • Clean Code & Refactoring • Design Prinzipien anwenden • Automatisierte Tests erstellen • Code kontinuierlich integrieren (CI) Agile Developer Skills
  59. 59. Fragen? Sven Günther @inevs sven.guenther@it-agile.de

×