Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Die Kunst der kleinen Schritte - Softwerkskammer Lübeck

79 Aufrufe

Veröffentlicht am

Die Slides zu meiner (Remote-)Session "Die Kunst der kleinen Schritte" bei der Softwerkskammer Lübeck. Enthält auch Links auf die in der Session gezeigten Screencasts auf Youtube.

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Die Kunst der kleinen Schritte - Softwerkskammer Lübeck

  1. 1. Die Kunst der kleinen Schritte David Völkel Softwerkskammer Lübeck 14.11.2019
  2. 2. David Völkel XP Days Germany 09.11.2018 @davidvoelkel codecentric Software Craft Meetup Munich #TDD
  3. 3. Disclaimer!
  4. 4. "It's the small steps part that distinguishes the TDD amateurs from the TDD experts ... Experts are able to take smaller Steps.“* *James Shore
  5. 5. Leap* * Leap Pattern aus Kent Becks "Responsive Design" https://www.infoq.com/presentations/responsive-design Image by Thor
  6. 6. Hohes Risiko Initial State Target StateStep 1 State 1 Step 2 State 2 State n-1 Step nSteps … Leap
  7. 7. Initial State Target StateStep 1 State 1 Step 2 State 2 State n-1 Step nSteps … Fehler?Werteachse 0,00 0,25 0,50 0,75 1,00 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 Erfolgswahrscheinlichkeit pro Schritt 0,95 Erfolgswahrscheinlichkeit Anzahl Mikroschritte
  8. 8. Initial State Target StateStep 1 State 1 Step 2 State 2 State n-1 Step nSteps … Kosten bei Fehler zeitaufwändige Suche nach Ursache {
  9. 9. Stepping Stone* * Stepping Stone Pattern aus Kent Becks "Responsive Design" https://www.infoq.com/presentations/responsive-design Image by Seattle Municipal Archives
  10. 10. Stepping Stone* Initial State Target StateStep 1 State 1 Step 2 State 2 State n-1 Step nSteps … Undo is your friend Fehler schnell finden Aber auch Tests häufig ausführen!
  11. 11. Gegenmittel Schnelles Feedback Kleine Schritte Kontinuierlich Ausführen discussion by Artem Kovyazin from the Noun Project Refresh by creative outlet from the Noun Project
  12. 12. Leap Stepping Stone Trade Off?
  13. 13. "Test 3 Problem" String methodToImplement(String argument) { if (conditionOn(argument)) { return "Test 3 fake result"; } if (otherConditionOn(argument)) { return "Test 2 fake result"; } return "Test 1 fake result"; }
  14. 14. Refactoring?
  15. 15. Refactoring Von außen beobachtbares Verhalten bleibt gleich
  16. 16. Refactoring Transformation* Von außen beobachtbares Verhalten bleibt gleich wird erweitert * aus Transformation Priority Premise , Uncle Bob
  17. 17. TDD RED GREEN REFACTOR
  18. 18. Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation
  19. 19. TDD RED GREEN REFACTOR Green Bar Patterns** aus "Test -Drivene Development by Example“, Kent Beck
  20. 20. TDD RED GREEN REFACTOR Green Bar Patterns
  21. 21. Triangulation Fake it Obvious Implementation Fake Response Fake Response Test 2 Test 2Generisch gemacht „Refactoring" macht generisch Alles implementierenTest 1 Test 1 Test 1 Test 1 Test 1 Test 1
  22. 22. Triangulation Fake it Obvious Implementation „Refactoring" macht generischFake Response Fake Response Test 2 Test 2Generisch gemacht Alles implementierenTest 1 Test 1 Test 1 Test 1 Test 1 Test 1 Aufwand
  23. 23. Triangulation Fake it Obvious Implementation „Refactoring" macht generischFake Response Fake Response Test 2 Test 2Generisch gemacht Alles implementierenTest 1 Test 1 Test 1 Test 1 Test 1 Test 1 Aufwand vs Risiko
  24. 24. Green Bar Patterns Sweetspot Triangulation Fake it Obvious Implementation Logik Struktur Trivial
  25. 25. RED GREEN „Klassisches Refactoring“ REFACTOR Cleanup Remove Duplication Express Intent Ziel Wartbarkeit
  26. 26. RED GREEN REFACTOR Preparatory Refactoring* "An example of preparatory refactoring", Martin Fowler
  27. 27. Preparatory Refactoring
  28. 28. "Green Phase" Implementation Test grün „Grün Phase“ beim Triangulieren
  29. 29. "Green Phase" TransformationPreparatory Refactoring Ziel: Rot verkürzen Test grün Test grün Implementation
  30. 30. RED GREEN REFACTOR Preparatory Refactoring* "An example of preparatory refactoring", Martin Fowler
  31. 31. "Green Phase" Preparatory Refactoring Test auskommentieren Test Test grün Test grün Implementation TransformationTest
  32. 32. Parallel Change* aka Expand & Contract old create new delete old old not used anymore Parallel Change Pattern aus Kent Becks "Responsive Design" https://www.infoq.com/presentations/responsive-design Auch beschrieben von Martin Fowler https://martinfowler.com/bliki/ParallelChange.html
  33. 33. Transformation Priority Premise* Kontext Versprechen Auswahl nächster Testcase Kleinere Schritte Weniger „Steckenbleiben“ * "The Transformation Priority Premise", Uncle Bob
  34. 34. Prio 1 Trafo Prio 2 Trafo … Prio n Trafo Simpel Komplex Transformation Priority Premise Transformation in nächstem Test
  35. 35. Transformationen 1.({}–>nil) 2.(nil->constant) 3.(constant->constant+) WTF? 4.(constant->scalar) 5.(statement->statements) 6.(unconditional->if) 7.(scalar->array) 8.(array->container) 9.(statement->recursion) 10.(if->while) 11.(expression->function) 12.(variable->assignment) * "The Transformation Priority Premise", Uncle Bob *
  36. 36. Hypothese 1.({}–>nil) 2.(nil->constant) 3.(constant->constant+) 4.(constant->scalar) 5.(statement->statements) 6.(unconditional->if) 7.(scalar->array) 8.(array->container) 9.(statement->recursion) 10.(if->while) 11.(expression->function) 12.(variable->assignment) 0.Refactorings
  37. 37. Wahrscheinlichkeit Erfolgswahrscheinlichkeit Anzahl Mikroschritte 0 0,25 0,5 0,75 1 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 0,99 0,95 0,9 0,8 1.({}–>nil) 2.(nil->constant) 3.(constant->constant+) 4.(constant->scalar) 5.(statement->statements) 6.(unconditional->if) 7.(scalar->array) 8.(array->container) 9.(statement->recursion) 10.(if->while) 11.(expression->function) 12.(variable->assignment) 0.Refactorings Erfolgswahrscheinlichkeit pro Schritt
  38. 38. Vorbereitende Refactorings Trivialtestcases Fake it "Refactoring" Triangulation Obvious Implementation Mutable State Green Bar & TPP? 1.({}–>nil) 2.(nil->constant) 3.(constant->constant+) 4.(constant->scalar) 5.(statement->statements) 6.(unconditional->if) 7.(scalar->array) 8.(array->container) 9.(statement->recursion) 10.(if->while) 11.(expression->function) 12.(variable->assignment)
  39. 39. Dekomposition beim TDD Inside-Out Outside-In
  40. 40. BOTTOM UP / INSIDE OUT Unittest
  41. 41. BOTTOM UP / INSIDE OUT Unittest Unittest
  42. 42. BOTTOM UP / INSIDE OUT Akzeptanztest
  43. 43. Akzeptanz-Test GUI / Endpoint TOP-DOWN / "OUTSIDE-IN"
  44. 44. Unittest Mock OUTSIDE-IN
 MOCKING
  45. 45. Test OUTSIDE-IN
 MOCKING
  46. 46. GUI / Endpoint Akzeptanztest OUTSIDE-IN
 FAKE-IT
  47. 47. Fake Akzeptanztest OUTSIDE-IN
 FAKE-IT
  48. 48. Fake Akzeptanztest Fake OUTSIDE-IN
 FAKE-IT
  49. 49. Unittest Akzeptanztest OUTSIDE-IN
 FAKE-IT
  50. 50. Akzeptanztest OUTSIDE-IN
 FAKE-IT
  51. 51. Rückwärts rechnen & Triangulation mit virtuellen Fakedaten
  52. 52. Fake it Outside-In „Test 3“ Fake 3 result Logik Struktur & Dekomposition Fake it Triangulation *Fake it Outside-In *
  53. 53. Fake it Outside-In Fake it "Refactoring“ „Test 3“ Trafo Fake 3 result Preparatory Refactoring Logik Struktur & Dekomposition Fake it Triangulation
  54. 54. Fake it Outside-In Fake it "Refactoring“ „Test 3“ Trafo Fake 3 result Preparatory Refactoring Logik Struktur & Dekomposition Fake it Triangulation Ggf. nachtriangulieren
  55. 55. Fake it Outside-In
  56. 56. Use Cases? Fake it Triangulation
  57. 57. Use Cases? Fake it Struktur Templating Mapping Dekomposition Berechnungen Collections/Iterationen Triangulation Logik Conditionals Rekursionen Algorithmen
  58. 58. DATA GUIDES STRUCTURE Triangulation Fake It Structure Cumbersome Data guides well
  59. 59. # BRANCHES Triangulation Fake It # N 1 More confidence More effort
  60. 60. # BRANCHES Triangulation Fake It # N 1 Fake data easy to forget Omitting cases is tempting
  61. 61. TIME IN GREEN Triangulation Prep Refactoring Triangulation Fake It
  62. 62. Zu große Schritte Risiken Steckenbleiben beim TDD Lange Fehlersuche Gegenmittel Hochpriore Changes zuerst => „Zeit im Rot“ minimieren
  63. 63. Kleine Schritte Dekomposition Vorbereitende Refactorings Design bekannt: Outside-In/Inside-Out Rückwärts rechnen
  64. 64. LicenseCreative Commons Attribution-ShareAlike 3.0

×