Slide 1

Slide 1 text

Test-Driven Development Code-Kata Eine Einführung Markus Hanses 1

Slide 2

Slide 2 text

1.  Was ist Test-Driven Development? 2.  Was ist eine Kata? 3.  Was ist eine Code-Kata? 4.  Warum sollten Software Entwickler TDD Code-Katas durchführen? 5.  Praktiken bei der Durchführung einer TDD Code-Kata 6.  Ein Beispiel: Die String Calculator Kata 7.  Welche TDD Code-Katas gibt es noch? 8.  Fragen & Diskussionen Agenda 2

Slide 3

Slide 3 text

1.  Einen Testfall schreiben, der die Erwartung an den produktiven Code prüft. 2.  Den produktiven Code erstellen oder anpassen, bis dieser der Erwartung des Testfalles genügt. 3.  Refaktorierung des produktiven Codes, bis dieser frei von Redundanzen ist. 4.  Schritt 1 bis 3 Wiederholen, bis alle Funktionalitäten realisiert sind. Was ist Test-Driven Development? 3 RED GREEN REFACTOR TDD Mantra

Slide 4

Slide 4 text

The three rules of TDD Over the years I have come to describe Test Driven Development in terms of three simple rules. They are: 1.  You are not allowed to write any production code unless it is to make a failing unit test pass. 2.  You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures. 3.  You are not allowed to write any more production code than is sufficient to pass the one failing unit test. Robert Martin (Uncle Bob) Was ist Test-Driven Development? 4 Quelle: http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd Quelle des Bildes: http://memegenerator.net/instance/39552583?urlName=Uncle-Bob&browsingOrder=New&browsingTimeSpan=AllTime

Slide 5

Slide 5 text

1.  Was ist Test-Driven Development? 2.  Was ist eine Kata? 3.  Was ist eine Code-Kata? 4.  Warum sollten Software Entwickler TDD Code-Katas durchführen? 5.  Praktiken bei der Durchführung einer TDD Code-Kata 6.  Ein Beispiel: Die String Calculator Kata 7.  Welche TDD Code-Katas gibt es noch? 8.  Fragen & Diskussionen Agenda 5

Slide 6

Slide 6 text

6 •  In den Kampfkünsten ist es eine genau festgelegte Abfolge von Bewegungen wie Angriffe, Verteidigungen und Gegenangriffe. Was ist eine Kata? Quelle des Bildes: http://kbl.bplaced.net/images/karate-Dateien/kata/0-Kata-Heian-Shodan.jpg

Slide 7

Slide 7 text

1.  Was ist Test-Driven Development? 2.  Was ist eine Kata? 3.  Was ist eine Code-Kata? 4.  Warum sollten Software Entwickler TDD Code-Katas durchführen? 5.  Praktiken bei der Durchführung einer TDD Code-Kata 6.  Ein Beispiel: Die String Calculator Kata 7.  Welche TDD Code-Katas gibt es noch? 8.  Meine Buchempfehlung 9.  Fragen & Diskussionen Agenda 7

Slide 8

Slide 8 text

8 •  In der Programmierung bezeichnet eine Kata eine kleine abgeschlossene Übung zur Verbesserung der Fertigkeiten eines Programmierers. •  Eine solche Code-Kata stellt ein Problem, welches von dem Programmierer gelöst werden soll. •  Der programmierte Code zur Lösung des Problems ist nur ein Teil der Übung. Was ist eine Code-Kata?

Slide 9

Slide 9 text

1.  Was ist Test-Driven Development? 2.  Was ist eine Kata? 3.  Was ist eine Code-Kata? 4.  Warum sollten Software Entwickler TDD Code-Katas durchführen? 5.  Praktiken bei der Durchführung einer TDD Code-Kata 6.  Ein Beispiel: Die String Calculator Kata 7.  Welche TDD Code-Katas gibt es noch? 8.  Fragen & Diskussionen Agenda 9

Slide 10

Slide 10 text

10 •  Eine Code-Kata fordert und fördert... -  die Fähigkeit zur Lösung von Problemen. -  die Kreativität. -  die Disziplin. •  Eine TDD Code-Kata vermittelt... -  die Prinzipien der testgetriebenen Entwicklung. -  den Unterschied zwischen TDD und Pseudo-TDD. -  eine Arbeitsweise, bei der ein Debugger nicht benötigt wird. Warum sollten Software Entwickler TDD Code-Katas durchführen?

Slide 11

Slide 11 text

11 Warum sollten Software Entwickler TDD Code-Katas durchführen? „A kata a day keeps the debugger away“ Robert Martin (Uncle Bob) & Stuart Halloway

Slide 12

Slide 12 text

1.  Was ist Test-Driven Development? 2.  Was ist eine Kata? 3.  Was ist eine Code-Kata? 4.  Warum sollten Software Entwickler TDD Code-Katas durchführen? 5.  Praktiken bei der Durchführung einer TDD Code-Kata 6.  Ein Beispiel: Die String Calculator Kata 7.  Welche TDD Code-Katas gibt es noch? 8.  Fragen & Diskussionen Agenda 12

Slide 13

Slide 13 text

13 •  Driver & Navigator •  Ping-Pong •  Silent Programming •  Taking Baby Steps •  TDD as if you meant it Praktiken bei der Durchführung einer TDD Code-Kata

Slide 14

Slide 14 text

14 •  Zwei Programmierer wählen jeweils eine Rolle. Die des Fahrers und die des Navigators. •  Der Fahrer... -  schreibt nach TDD sowohl die Testfälle, als auch den produktiven Code. -  spricht laut über das, was er gedenkt zu programmieren. •  Der Navigator... -  sitzt neben dem Fahrer und denkt voraus. Er versucht die Route des Fahrers im Kopf abzufahren, bevor der Fahrer soweit ist. -  behält die Übersicht und bleibt auf einer Meta-Ebene. -  sagt dem Fahrer welchen Entwicklungsschritt er als nächstes durchführen sollte. -  widerspricht dem Fahrer, wenn er die falsche Richtung einschlägt. •  Ist der Fahrer erschöpft oder kommt nicht weiter, sollte der Navigator das „Steuer“ übernehmen und mit dem Fahrer die Rollen tauschen. Praktiken bei der Durchführung einer TDD Code-Kata Driver & Navigator

Slide 15

Slide 15 text

15 1.  Programmierer 1 schreibt einen neuen fehlschlagenden Testfall, für eine noch nicht realisierte Funktionalität. 2.  Programmierer 2 schreibt den produktiven Code, der von dem Testfall von Programmierer 1 erwartet wird. 3.  Programmierer 2 schreibt einen neuen fehlschlagenden Testfall, für eine weitere noch nicht realisierte Funktionalität. 4.  Programmierer 1 schreibt den produktiven Code, der von dem Testfall von Programmierer 2 erwartet wird. Praktiken bei der Durchführung einer TDD Code-Kata Ping-Pong

Slide 16

Slide 16 text

16 •  Die Programmierer dürfen nicht miteinander reden. •  Es wird nur durch den Code kommuniziert. •  Notizen sind weder auf Papier, noch als Kommentar im Code erlaubt. Praktiken bei der Durchführung einer TDD Code-Kata Silent Programming Quelle: http://blog.adrianbolboaca.ro/2013/10/pair-programming-game-silent-programming/

Slide 17

Slide 17 text

17 1.  Setze ein Projekt in einem VCS deiner Wahl auf 2.  Stelle einen Timer auf 2 Minuten und starte ihn 3.  Schreibe einen Testfall und den produktiven Code 1.  Wenn der Timer klingelt und die Tests schlagen fehl, dann lösche die Änderungen (Revert im VCS) 2.  Sind die Tests erfolgreich, wenn der Timer klingelt, dann übernehme die Änderungen (Commit im VCS) 4.  Starte den Timer erneut 5.  Refaktoriere den Code 1.  Wenn der Timer klingelt und die Tests schlagen fehl, dann lösche die Änderungen (Revert im VCS) 2.  Sind die Tests erfolgreich, wenn der Timer klingelt, dann übernehme die Änderungen (Commit im VCS) 6.  Starte den Timer erneut 7.  Starte erneut mit Schritt 3 Praktiken bei der Durchführung einer TDD Code-Kata Taking Baby Steps Quelle: http://blog.adrianbolboaca.ro/2013/03/taking-baby-steps/

Slide 18

Slide 18 text

18 1.  Schreibe einen Test der so klein ist, dass er den kleinsten möglichen Schritt zu der eigentlichen Anforderung abbildet. 2.  Lasse den Test laufen, um den Fehlschlag des Tests zu sehen. 3.  Programmiere den produktiven Code innerhalb der Testmethode, um die Erwartung des Tests zu erfüllen. 4.  Refaktoriere den produktiven Code, um Redundanzen zu entfernen oder das Design der Software zu verbessern. 5.  Starte erneut mit Schritt 1 und schreibe einen neuen Test. Praktiken bei der Durchführung einer TDD Code-Kata TDD as if you meant it Quelle: http://coderetreat.org/facilitating/activities/tdd-as-if-you-meant-it

Slide 19

Slide 19 text

19 •  Zusatz zu Schritt 4 -  Erzeuge nur dann neue Abstraktionen wie Methoden oder Klassen usw., wenn diese das Design der Software verbessern! -  Extrahiere nur dann eine neue Methode, wenn innerhalb der Testmethoden in dem produktiven Code ein Duplikat existiert. -  Erzeuge nur dann eine neue Klasse und bewege Methoden aus der Testklasse hinein, wenn eine Gruppierung von Methoden erkennbar wird. Praktiken bei der Durchführung einer TDD Code-Kata TDD as if you meant it Quelle: http://coderetreat.org/facilitating/activities/tdd-as-if-you-meant-it

Slide 20

Slide 20 text

1.  Was ist Test-Driven Development? 2.  Was ist eine Kata? 3.  Was ist eine Code-Kata? 4.  Warum sollten Software Entwickler TDD Code-Katas durchführen? 5.  Praktiken bei der Durchführung einer TDD Code-Kata 6.  Ein Beispiel: Die String Calculator Kata 7.  Welche TDD Code-Katas gibt es noch? 8.  Fragen & Diskussionen Agenda 20

Slide 21

Slide 21 text

21 •  Lege ein Projekt in einer Entwicklungsumgebung Deiner Wahl an. •  Ein Testframework wie JUnit wird benötigt. ODER •  Lade das vorbereitete Projekt herunter: -  Web Addresse: https://github.com/marhan/StringCalculatorKata -  Git Repo: [email protected]:marhan/StringCalculatorKata.git Ein Beispiel: Die String Calculator Kata Setup der Entwicklungsumgebung

Slide 22

Slide 22 text

22 •  Erzeuge einen einfachen StringCalculator mit der Methode int add(String number) -  Die Methode nimmt Nummern entgegen und berechnet ihre Summe. -  Bei einer leeren Eingabe wird „0“ zurück gegeben. -  Nummern können durch ein Komma getrennt sein. -  Beispieleingaben: „“ oder „1“ oder „1,2“ Ein Beispiel: Die String Calculator Kata Aufgabe 1

Slide 23

Slide 23 text

23 Ein Beispiel: Die String Calculator Kata Aufgabe 1

Slide 24

Slide 24 text

24 •  Diese Kata besteht aus 9 Aufgaben. •  Anfänger bis Aufgabe 5. •  Fortgeschrittene bis Aufgabe 9. -  Als fortgeschritten gilt, wer die Aufgaben 1-5 in weniger als 30 Minuten beendet. Ein Beispiel: Die String Calculator Kata Weitere Aufgaben

Slide 25

Slide 25 text

1.  Was ist Test-Driven Development? 2.  Warum sollte man Test-Driven Development einsetzen? 3.  Was ist eine Kata? 4.  Was ist eine Code-Kata? 5.  Warum sollten Software Entwickler TDD Code-Katas durchführen? 6.  Praktiken bei der Durchführung einer TDD Code-Kata 7.  Ein Beispiel: Die String Calculator Kata 8.  Welche TDD Code-Katas gibt es noch? 9.  Fragen & Diskussionen Agenda 25

Slide 26

Slide 26 text

26 •  Prime Factors Kata -  http://www.butunclebob.com/ArticleS.UncleBob.ThePrimeFactorsKata •  FizzBuzz Kata -  http://codingkata.net/Katas/Beginner/FizzBuzz •  Roman Numbers Kata -  http://codingdojo.org/cgi-bin/wiki.pl?KataRomanNumerals •  Conway‘s Game of Life -  http://coderetreat.org/gol •  Bowling Game Kata -  http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata Welche TDD Code-Katas gibt es noch?

Slide 27

Slide 27 text

1.  Was ist Test-Driven Development? 2.  Warum sollte man Test-Driven Development einsetzen? 3.  Was ist eine Kata? 4.  Was ist eine Code-Kata? 5.  Warum sollten Software Entwickler TDD Code-Katas durchführen? 6.  Praktiken bei der Durchführung einer Code-Kata 7.  Ein Beispiel: Die String Calculator Kata 8.  Welche TDD Code-Katas gibt es noch? 9.  Fragen & Diskussionen Agenda 27

Slide 28

Slide 28 text

28 Fragen & Diskussionen Quelle des Bildes: http://darrenasmithmtm.com/wp-content/uploads/2013/10/questions.jpg

Slide 29

Slide 29 text

www.msg-systems.com Vielen Dank für Ihre Aufmerksamkeit Dammtorwall 7a 20354 Hamburg Telefon: +49 173 6172920 E-Mail: [email protected] www.msg-systems.com 29

Slide 30

Slide 30 text

•  Coders Dojo von Stefan Roock -  http://content.codersdojo.org/documentation/ •  Coding Dojo von Emmanuel Gaillot -  http://codingdojo.org/ •  Blog Artikel von Peter Provost -  http://www.peterprovost.org/blog/2012/05/02/kata-the-only-way-to-learn-tdd •  Blog Artikel von Dan Bunea -  http://bloggingabout.net/blogs/danbunea/archive/2005/12/07/10480.aspx •  Blog von Adrian Bolboaca -  http://blog.adrianbolboaca.ro/ •  Kata Liste von Dave Thomas -  http://codekata.pragprog.com/codekata/ •  Kata Manifesto -  http://codingkata.net/KataManifesto Quellen 30