Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von...

52
Die Kunst der kleinen Schritte David Völkel XP Days Germany 09.11.2018

Transcript of Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von...

Page 1: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Die Kunst der

kleinen SchritteDavid Völkel XP Days Germany 09.11.2018

Page 2: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

David Völkel XP Days Germany 09.11.2018

@davidvoelkelcodecentric

Software Craft Meetup Munich

#TDD

Page 3: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Disclaimer!

Page 4: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

"It's the small steps part that distinguishes the TDD amateurs from the TDD experts ...

Experts are able to take smaller Steps.“*

*James Shore

Page 5: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Leap*

* Leap Pattern aus Kent Becks "Responsive Design" https://www.infoq.com/presentations/responsive-design

Image by Thor

Page 6: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Hohes Risiko

Initial State Target State Step 1 State 1 Step 2 State 2 State n-1 Step n Steps …

Leap

Page 7: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Initial State Target State Step 1 State 1 Step 2 State 2 State n-1 Step n Steps …

Fehler?

Wer

teac

hse

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

Erfo

lgsw

ahrs

chei

nlic

hkei

t

Anzahl Mikroschritte

Page 8: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Initial State Target State Step 1 State 1 Step 2 State 2 State n-1 Step n Steps …

Kosten bei Fehler

zeitaufwändige Suche nach Ursache{

Page 9: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Stepping Stone*

* Stepping Stone Pattern aus Kent Becks "Responsive Design" https://www.infoq.com/presentations/responsive-design

Image by Seattle Municipal Archives

Page 10: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Stepping Stone*

Initial State Target State Step 1 State 1 Step 2 State 2 State n-1 Step n Steps …

Undo is your friend Fehler schnell finden

Aber auch Tests häufig ausführen!

Page 11: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

"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"; }

Page 12: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Refactoring?

Page 13: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Refactoring Von außen beobachtbares

Verhalten

bleibt gleich

Page 14: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Refactoring

Transformation*

Von außen beobachtbares

Verhalten

bleibt gleich

wird erweitert

* aus Transformation Priority Premise , Uncle Bob

Page 15: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Arten von Changes

RED GREEN

REFACTOR

Transformation

Refactoring

Triangulation

Page 16: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

TDDRED GREEN

REFACTORGreen Bar Patterns*

* aus "Test -Drivene Development by Example“, Kent Beck

Page 18: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Triangulation

Fake it

Obvious Implementation

Fake Response

Fake Response Test 2 Test 2 Generisch gemacht

„Refactoring" macht generisch

Alles implementieren Test 1 Test 1

Test 1

Test 1

Test 1

Test 1

Page 19: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Triangulation

Fake it

Obvious Implementation

„Refactoring" macht generisch Fake Response

Fake Response Test 2 Test 2 Generisch gemacht

Alles implementieren Test 1 Test 1

Test 1

Test 1

Test 1

Test 1

Aufwand

Page 20: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Triangulation

Fake it

Obvious Implementation

„Refactoring" macht generisch Fake Response

Fake Response Test 2 Test 2 Generisch gemacht

Alles implementieren Test 1 Test 1

Test 1

Test 1

Test 1

Test 1

Aufwand vs

Risiko

Page 21: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Green Bar PatternsSweetspot

Triangulation

Fake it

Obvious Implementation

Logik

Struktur

Trivial

Page 22: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

RED GREEN

„Klassisches Refactoring“

REFACTOR

Cleanup Remove Duplication

Express Intent

Ziel Wartbarkeit

Page 23: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

RED GREEN

REFACTOR

Preparatory Refactoring*

"An example of preparatory refactoring",Martin Fowler

Page 24: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

"Green Phase"

Implementation Test grün

„Grün Phase“ beim Triangulieren

Page 25: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

"Green Phase"

TransformationPreparatory Refactoring

Ziel: Rot verkürzen

Test grün

Test grün

Implementation

Page 26: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

"Green Phase"

Preparatory Refactoring

Test auskommentieren

Test

Test grün

Test grün

Implementation

TransformationTest

Page 27: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Transformation Priority Premise*

Kontext

Versprechen

Auswahl nächster Testcase

Kleinere Schritte Weniger „Steckenbleiben“

* "The Transformation Priority Premise", Uncle Bob

Page 28: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Prio 1 Trafo Prio 2 Trafo

Prio n Trafo

Simpel

Komplex

Transformation Priority Premise

Transformation in nächstem Test

Page 29: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Transformationen1.({}–>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

*

Page 30: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Hypothese1.({}–>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

Page 31: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

WahrscheinlichkeitEr

folg

swah

rsch

einl

ichk

eit

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,990,950,90,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.RefactoringsErfolgswahrscheinlichkeit

pro Schritt

Page 32: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Vorbereitende Refactorings Trivialtestcases

Fake it "Refactoring"

Triangulation

Obvious Implementation Mutual 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)

Page 33: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

magnifier by Artem Yurov from the Noun Project

Page 34: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Kategorien-SpielGreen Bar Patterns Obvious Implementation Fake it Triangulation

Transformationen

Page 35: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Fake it Outside-In

„Test 3“ Fake 3 result

Logik

Struktur & DekompositionFake it

Triangulation

*Fake it Outside-In

*

Page 36: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Fake it Outside-In

Fake it "Refactoring“„Test 3“

TrafoFake 3 result

Preparatory Refactoring

Logik

Struktur & DekompositionFake it

Triangulation

Page 37: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Fake it Outside-In

Fake it "Refactoring“„Test 3“

TrafoFake 3 result

Preparatory Refactoring

Logik

Struktur & DekompositionFake it

TriangulationGgf. nachtriangulieren

Page 38: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Dekomposition durch

Refactoring

Page 39: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Aufgabe Dekomposition

1.„Test 3“ („Normalfall“, nicht „Trivialfall“) 2.Fake Ergebnis 3.dekomponiere durch Refactoring 4.Fake it generisch machen 5.trianguliere „null-safe“

expect(renderName('David', ‚Voelkel')) .toBe('Firstname: David\nLastname: Voelkel');

expect(renderName(null, null)) .toBe('Firstname: -\nLastname: -');

Page 40: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Rückwärts rechnen

„Virtuelle Fake Daten“

Page 41: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

1.„Test 3“ 2.Fake Ergebnis 3.dekomponiere durch Refactoring 4.rechne Stück für Stück zurück mit virtuellen Fake Daten in jedem Schritt

5.join() zum konkatenieren

assertThat(renderMethods(asList("a", "b", "b"))) .isEqualTo(„a(), b(), c()");

Aufgabe rückwärts rechnen

Page 43: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Aufgabe

Constraints Trianguliere mit TPP Verwende vorbereitendes Refactoring Implementierung mit Collection Pipeline* (oder For Loop)

expect(concatenate(['a', 'b', 'c'])).toBe('abc');

In JS: array.join() In Java: stream.collect(Collectors.joining())

* "Collection Pipeline", Martin Fowler

Page 44: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Aufgabe

Constraints Trianguliere sauber mit TPP Verwende vorbereitendes Refactoring Implementierung mit Rekursion

expect(splitByComma(['a,b,c'])) .toBe(['a', 'b', 'c']);

ohne "split()" aus Lib sonstige wie „indexOf()“ … erlaubt

Page 45: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Stärken?Triangulation Fake it

Page 46: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Stärken?Fake it

Struktur Templating Mapping Dekomposition Berechnungen Collections/Iterationen

Triangulation

Logik Conditionals Rekursionen Algorithmen

Page 47: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Neuer Test nötig?

Sicherheit Scope zu groß

Aufwand

Einsparen Trivialtestfälle Verwendung von Libs implizit in Testdaten Triangulation mit Daten

Daumenregel: neuer Ausführungszweig?

Page 48: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Zu große SchritteRisiken Steckenbleiben beim TDD Lange Fehlersuche

Gegenmittel Hochpriore Changes zuerst => „Zeit im Rot“ minimieren

Page 49: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

Kleine SchritteTriangulation Vorbereitende Refactorings

Fake it Rückwärts rechnen / Problem Dekomposition Iterationen

Page 50: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

RetroWas hat Dich überascht?

Was glaubst Du ist praxistauglich?

Page 51: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

1.„Test 3“ 2.Fake Ergebnis 3.Alles was wir heute gelernt haben!

assertThat(renderMethods(asList("C"))) .isEqualTo(asList(“__A__“, “_B_B_“, “C___C“));

Fallback Aufgabe

Page 52: Die Kunst der kleinen Schritte...* aus Transformation Priority Premise , Uncle Bob . Arten von Changes RED GREEN REFACTOR Transformation Refactoring Triangulation. TDD RED GREEN REFACTOR

LicenseCreative Commons Attribution-ShareAlike 3.0