Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Hendrik Lösch [email protected]@HerrLoesch
Test Driven Development Mysterium und Wagnis?!?
„Wer als einziges Werkzeug einen Hammerhat, sieht in jedem Problem einen Nagel.“
Paul Watzlawick
Test
Implementierung
Refaktorisierung
Hump of Pain“New teams are often expected to adopt practices such as TDD
and refactoring, which are difficult to learn. Without good coaching, plenty of time to master new skills, and string
management support, they're easily discouraged.”
Quelle: Agile Testing: A Practical Guide for Testers and Agile Teams
Vertrauen
AufwandFeedback
„Klassisches“ TDD
Test
Implementierung
Refaktorisierung
• Schreibe nur Code, der verlangt wird.• Entwickle schrittweise Deinen Code.• Wähle möglichst kleine Schritte.• Je allgemeingültiger der Code desto spezifischer der
Test.
Die Regeln
({} → nil)(nil → constant)(constant → constant+)(constant → scalar) (statement → statements)(unconditional → if) (scalar → array)(array → container)(statement → recursion)(if → while)(expression → function)(variable → assignment)
→ Keinen Code in Code umwandeln, der nichts implementiert.→ Einführen einer Konstanten.→ Einfache Konstante in komplexere Konstante überführen.→ Konstante durch Variable oder Argument ersetzen.→ Anweisung durch zusätzliche Anweisungen erweitern.→ Bedingungslose Codepfade in bedingte Codepfade ändern.→ Zahlenwert in Array wandeln.→ Array in eine Liste oder komplexeren Container überführen.→ Anweisung rekursiv umsetzen.→ Fallunterscheidungen in Schleifen ändern.→ Ausdruck durch Funktion ersetzen.→ Variablen mit Zuweisungen erweitern.
Transformation Priority Premise
DEMO!!!
„Pragmatisches“ TDD
DEMO!!!
Vertrauen
AufwandFeedback
FastIsolatedIndependentRepeatableSelf-VerifyingTimely
Pragmatisch Klassisch
Eher Test First als Test DrivenEher Komponententests als Unit-TestsEher interaktionsbasierend als statusbasierend
Eher Test Driven als Test First Eher Unit-Tests als Komponententests Eher statusbasierend als interaktionsbasierend
public void Push(int value){}
public void Push(int value){
content = value;}
public void Push(int value){
Count++;content[Count] = value;
}
public void Push(int value){
Count++;content[Count] = value;
}
Red-Green-Implement
Erfolg
Implementierung
Refaktorisierung
Fehlschlag
Systemtest
Integrationstest
Unit-Test
Quelle: Succeeding with Agile
Unit-Test???
Unit-TestSystemtest
Integrationstest
Unit-Test???
Systemtest
Integrationstest
Komponententest
Unit-Test
Systemtests
Integrationtests
Komponententests
Unit-Tests
Systemtests
Integrationstests
Komponententests
Unit-Tests
Zusammenfassung