Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TDD Code-Kata - Eine Einführung

TDD Code-Kata - Eine Einführung

Die Folien beinhalten Aufgaben, deren Lösungen in der Originalversion als Screencast eingebunden sind. Die Screencasts ermöglichen es dem Zuschauer TDD in Aktion zu sehen. Diese Screencasts können hier jedoch nicht hochgeladen werden.

Markus Hanses

February 07, 2014
Tweet

More Decks by Markus Hanses

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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?
  8. 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
  9. 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?
  10. 11 Warum sollten Software Entwickler TDD Code-Katas durchführen? „A kata

    a day keeps the debugger away“ Robert Martin (Uncle Bob) & Stuart Halloway
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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/
  16. 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/
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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?
  25. 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
  26. •  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