Test Driven Development hoe en waarom van een test driven aanpak van software development
Roelof Reitsma teamleider Coconut development team (@OGD) interesses: - Agile development (Scrum) - webdevelopment (Ruby o...
inhoud <ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul...
<ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><l...
waarom automated tests? <ul><ul><li>aantonen dat code het juiste resultaat geeft </li></ul></ul><ul><ul><li>handmatig test...
We value code that is easy to maintain over code that is easy to write Steve Freeman / Nathan Price
dus wat willen we? <ul><li>code die </li></ul><ul><li>  </li></ul><ul><ul><li>goed onderhoudbaar is </li></ul></ul><ul><ul...
Doel van test driven development: clean code that works
waarom clean code? <ul><ul><li>veel makkelijker onderhoudbaar </li></ul></ul><ul><ul><ul><li>je collega's zullen je dankba...
<ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><l...
wat is test driven development? <ul><li>simpel idee:  schrijf eerst je tests, daarna de code </li></ul><ul><li>test als de...
TDD Mantra:   Red, green, refactor
wat is test driven development? <ul><ul><li>alleen nieuwe code toevoegen als een test faalt </li></ul></ul><ul><ul><li>daa...
<ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><l...
waarom test first? <ul><ul><li>omdat test-last niet werkt </li></ul></ul><ul><ul><ul><li>je hebt geen zin meer </li></ul><...
waarom test driven? <ul><ul><li>complexe features of omgevingen </li></ul></ul><ul><ul><ul><li>venturing into unknown terr...
Developers should be having fun! Jeff Sutherland
inhoud <ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul...
Chatten met een gebruiker Product owner: ik wil kunnen chatten met een andere gebruiker
Chatten met een gebruiker <ul><li>Als gebruiker wil ik met een andere gebruiker kunnen chatten, zodat ik snel en eenvoudig...
Chatten met een gebruiker grafisch ontwerp chatfunctie
Chatten met een gebruiker <ul><li>Acceptatietest chatfunctie mbv Cucumber features </li></ul><ul><li>( zie voor meer info:...
Chatten met een gebruiker <ul><li>eerste schets model voor chatfunctie </li></ul>
Chatten met een gebruiker <ul><li>begin bij het model (de backend) en schrijf de eerste test </li></ul>
Chatten met een gebruiker <ul><li>RED: </li></ul><ul><li>de test faalt met een NameError: de klasse Conversation bestaat n...
Chatten met een gebruiker <ul><li>RED:   er wordt nog steeds geen nieuwe conversatie aangemaakt! </li></ul>
Chatten met een gebruiker <ul><li>GREEN: </li></ul><ul><li>de test slaagt met minimale effort </li></ul>
 
Chatten met een gebruiker REFACTOR: nog heel weinig om te refactoren, maar we hebben nu een conversatie zonder gebruikers!...
Chatten met een gebruiker <ul><li>RED: </li></ul><ul><li>nu heb ik weer een falende test, omdat de start functie nu een ar...
Chatten met een gebruiker <ul><li>GREEN: </li></ul><ul><li>code en test weer in orde. Hoewel.... </li></ul>
Chatten met een gebruiker <ul><li>REFACTOR: </li></ul><ul><li>de duplicate code verwijderen </li></ul>
Chatten met een gebruiker <ul><li>REFACTOR: </li></ul><ul><li>de naamgeving verbeteren (started_by vind ik beter) </li></ul>
Chatten met een gebruiker <ul><li>REFACTOR: </li></ul><ul><li>starter veranderd in started_by, tests uitvoeren en gelukkig...
Hoe verder? <ul><ul><li>stap voor stap, bijvoorbeeld: hoe koppel je de andere gebruiker aan de conversatie?  </li></ul></u...
<ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><l...
wat heb ik nodig om te beginnen? <ul><ul><li>kies een testtool </li></ul></ul><ul><ul><li>een definitie van DONE </li></ul...
Vandaag is een mooie dag om het anders te gaan doen Roelof Reitsma
<ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><l...
Wat handige URL's <ul><li>Testing frameworks: </li></ul><ul><ul><li>Jasmine (javascript): http://pivotal.github.com/jasmin...
Test driven development by example - Kent Beck
xUnit Test Patterns - Gerard Meszaros
Growing object-oriented software - Steve Freeman / Nat Pryce
Working effectively with legacy code - Michael Feathers
Tot slot <ul><li>Download presentatie:  </li></ul><ul><li>http://ryreitsma.blogspot.com </li></ul><ul><li>  </li></ul><ul>...
Upcoming SlideShare
Loading in …5
×

Test Driven Development

2,530 views

Published on

het hoe, wat en waarom van Test Driven Development

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,530
On SlideShare
0
From Embeds
0
Number of Embeds
1,019
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Red IS ECHT NODIG! Hoe vaak zie tests die nooit falen? Dit garandeert dat je echt iets test.
  • LET OP: dit is in dit geval het design dat ik voor deze belachelijk kleine feature moet doen. In de praktijk is veel meer nodig!
  • Testttool is belangrijk, 1 plek waar alle tests gerund worden en iedereen kan ze op dezelfde manier runnen
  • Test Driven Development

    1. 1. Test Driven Development hoe en waarom van een test driven aanpak van software development
    2. 2. Roelof Reitsma teamleider Coconut development team (@OGD) interesses: - Agile development (Scrum) - webdevelopment (Ruby on Rails) - geautomatiseerd testen
    3. 3. inhoud <ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><li>waarom test driven development? </li></ul></ul><ul><ul><li>praktijkvoorbeeld: chatten met een gebruiker </li></ul></ul><ul><ul><li>randvoorwaarden </li></ul></ul><ul><ul><li>interessante urls & literatuur </li></ul></ul>
    4. 4. <ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><li>waarom test driven development? </li></ul></ul><ul><ul><li>praktijkvoorbeeld: chatten met een gebruiker </li></ul></ul><ul><ul><li>randvoorwaarden </li></ul></ul><ul><ul><li>interessante urls & literatuur </li></ul></ul>
    5. 5. waarom automated tests? <ul><ul><li>aantonen dat code het juiste resultaat geeft </li></ul></ul><ul><ul><li>handmatig testen kost teveel tijd </li></ul></ul><ul><ul><li>betrouwbare systemen </li></ul></ul><ul><ul><li>eenvoudiger wijzigingen maken  </li></ul></ul><ul><ul><li>voorkomen van regressie </li></ul></ul><ul><ul><ul><li>tests zijn ons vangnet  </li></ul></ul></ul><ul><ul><ul><li>maakt refactoring mogelijk </li></ul></ul></ul>
    6. 6. We value code that is easy to maintain over code that is easy to write Steve Freeman / Nathan Price
    7. 7. dus wat willen we? <ul><li>code die </li></ul><ul><li>  </li></ul><ul><ul><li>goed onderhoudbaar is </li></ul></ul><ul><ul><li>makkelijk aan te passen </li></ul></ul><ul><ul><li>leesbaar is </li></ul></ul><ul><ul><li>duidelijk in wat het doet </li></ul></ul><ul><ul><li>zo klein mogelijk is </li></ul></ul>
    8. 8. Doel van test driven development: clean code that works
    9. 9. waarom clean code? <ul><ul><li>veel makkelijker onderhoudbaar </li></ul></ul><ul><ul><ul><li>je collega's zullen je dankbaar zijn </li></ul></ul></ul><ul><ul><li>minder code betekent minder onderhoud </li></ul></ul><ul><ul><li>het is fijn om te schrijven </li></ul></ul>
    10. 10. <ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><li>waarom test driven development? </li></ul></ul><ul><ul><li>praktijkvoorbeeld: chatten met een gebruiker </li></ul></ul><ul><ul><li>randvoorwaarden </li></ul></ul><ul><ul><li>interessante urls & literatuur </li></ul></ul>
    11. 11. wat is test driven development? <ul><li>simpel idee: schrijf eerst je tests, daarna de code </li></ul><ul><li>test als design instrument voor developers   </li></ul><ul><li>om features te leren begrijpen en analyseren </li></ul><ul><li>het maakt de manier waarop je software ontwikkelt radicaal anders </li></ul>
    12. 12. TDD Mantra:   Red, green, refactor
    13. 13. wat is test driven development? <ul><ul><li>alleen nieuwe code toevoegen als een test faalt </li></ul></ul><ul><ul><li>daarna refactoring: </li></ul></ul><ul><ul><ul><li>duplicatie verwijderen </li></ul></ul></ul><ul><ul><ul><li>slechte naamgeving verbeteren </li></ul></ul></ul><ul><ul><li>incrementeel, stap voor stap design </li></ul></ul>
    14. 14. <ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><li>waarom test driven development? </li></ul></ul><ul><ul><li>praktijkvoorbeeld: chatten met een gebruiker </li></ul></ul><ul><ul><li>randvoorwaarden </li></ul></ul><ul><ul><li>interessante urls & literatuur </li></ul></ul>
    15. 15. waarom test first? <ul><ul><li>omdat test-last niet werkt </li></ul></ul><ul><ul><ul><li>je hebt geen zin meer </li></ul></ul></ul><ul><ul><ul><li>je hebt geen tijd meer </li></ul></ul></ul><ul><ul><ul><li>code blijkt lastig te testen </li></ul></ul></ul><ul><ul><ul><li>er is iets veel belangrijkers te doen (?) </li></ul></ul></ul>
    16. 16. waarom test driven? <ul><ul><li>complexe features of omgevingen </li></ul></ul><ul><ul><ul><li>venturing into unknown territory </li></ul></ul></ul><ul><ul><li>focus - 'scope creep' voorkomen </li></ul></ul><ul><ul><ul><li>eerst weten wat je wilt bereiken </li></ul></ul></ul><ul><ul><ul><li>stoppen als je dat bereikt hebt </li></ul></ul></ul><ul><ul><li>beperken afhankelijkheid en samenhang code  </li></ul></ul><ul><ul><li>ritme - continu naar een doel werken </li></ul></ul>
    17. 17. Developers should be having fun! Jeff Sutherland
    18. 18. inhoud <ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><li>waarom test driven development? </li></ul></ul><ul><ul><li>praktijkvoorbeeld: chatten met een gebruiker </li></ul></ul><ul><ul><li>randvoorwaarden </li></ul></ul><ul><ul><li>interessante urls & literatuur </li></ul></ul>
    19. 19. Chatten met een gebruiker Product owner: ik wil kunnen chatten met een andere gebruiker
    20. 20. Chatten met een gebruiker <ul><li>Als gebruiker wil ik met een andere gebruiker kunnen chatten, zodat ik snel en eenvoudig kennis en informatie kan delen </li></ul>userstory voor de chatfunctie
    21. 21. Chatten met een gebruiker grafisch ontwerp chatfunctie
    22. 22. Chatten met een gebruiker <ul><li>Acceptatietest chatfunctie mbv Cucumber features </li></ul><ul><li>( zie voor meer info: http://cukes.info/ ) </li></ul>
    23. 23. Chatten met een gebruiker <ul><li>eerste schets model voor chatfunctie </li></ul>
    24. 24. Chatten met een gebruiker <ul><li>begin bij het model (de backend) en schrijf de eerste test </li></ul>
    25. 25. Chatten met een gebruiker <ul><li>RED: </li></ul><ul><li>de test faalt met een NameError: de klasse Conversation bestaat nog niet! </li></ul>
    26. 26. Chatten met een gebruiker <ul><li>RED: er wordt nog steeds geen nieuwe conversatie aangemaakt! </li></ul>
    27. 27. Chatten met een gebruiker <ul><li>GREEN: </li></ul><ul><li>de test slaagt met minimale effort </li></ul>
    28. 29. Chatten met een gebruiker REFACTOR: nog heel weinig om te refactoren, maar we hebben nu een conversatie zonder gebruikers! Nog maar een test:
    29. 30. Chatten met een gebruiker <ul><li>RED: </li></ul><ul><li>nu heb ik weer een falende test, omdat de start functie nu een argument meekrijgt </li></ul>
    30. 31. Chatten met een gebruiker <ul><li>GREEN: </li></ul><ul><li>code en test weer in orde. Hoewel.... </li></ul>
    31. 32. Chatten met een gebruiker <ul><li>REFACTOR: </li></ul><ul><li>de duplicate code verwijderen </li></ul>
    32. 33. Chatten met een gebruiker <ul><li>REFACTOR: </li></ul><ul><li>de naamgeving verbeteren (started_by vind ik beter) </li></ul>
    33. 34. Chatten met een gebruiker <ul><li>REFACTOR: </li></ul><ul><li>starter veranderd in started_by, tests uitvoeren en gelukkig: groen licht </li></ul>
    34. 35. Hoe verder? <ul><ul><li>stap voor stap, bijvoorbeeld: hoe koppel je de andere gebruiker aan de conversatie?  </li></ul></ul><ul><ul><li>werk omhoog door de verschillende lagen </li></ul></ul><ul><ul><li>ga door tot je de eerste acceptatietest kunt laten slagen en STOP </li></ul></ul><ul><li>  </li></ul><ul><ul><li>naar de volgende feature, in dit voorbeeld: berichten sturen </li></ul></ul><ul><ul><li>belangrijk: blijf refactoren! denk aan 'clean code that works' </li></ul></ul>
    35. 36. <ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><li>waarom test driven development? </li></ul></ul><ul><ul><li>praktijkvoorbeeld: chatten met een gebruiker </li></ul></ul><ul><ul><li>randvoorwaarden </li></ul></ul><ul><ul><li>interessante urls & literatuur </li></ul></ul>
    36. 37. wat heb ik nodig om te beginnen? <ul><ul><li>kies een testtool </li></ul></ul><ul><ul><li>een definitie van DONE </li></ul></ul><ul><ul><li>snelle feedback (Continuous Integration) </li></ul></ul><ul><ul><li>kennis van OOP, refactoring, patterns </li></ul></ul><ul><ul><li>maar je kunt NU al beginnen! </li></ul></ul><ul><ul><ul><li>test drive een bugfix </li></ul></ul></ul><ul><ul><ul><li>test drive een modelfunctie </li></ul></ul></ul><ul><ul><ul><li>test drive een javascript methode </li></ul></ul></ul><ul><ul><ul><li>etcetera... </li></ul></ul></ul>
    37. 38. Vandaag is een mooie dag om het anders te gaan doen Roelof Reitsma
    38. 39. <ul><ul><li>waarom automated testing? </li></ul></ul><ul><ul><li>wat is test driven development? </li></ul></ul><ul><ul><li>waarom test driven development? </li></ul></ul><ul><ul><li>praktijkvoorbeeld: chatten met een gebruiker </li></ul></ul><ul><ul><li>randvoorwaarden </li></ul></ul><ul><ul><li>interessante urls & literatuur </li></ul></ul>
    39. 40. Wat handige URL's <ul><li>Testing frameworks: </li></ul><ul><ul><li>Jasmine (javascript): http://pivotal.github.com/jasmine/ </li></ul></ul><ul><ul><li>NUnit (.NET): http://www.nunit.org/ </li></ul></ul><ul><ul><li>Moq (.NET, mocks & stubs): http://code.google.com/p/moq/ </li></ul></ul><ul><ul><li>PHPUnit (PHP): http://phpunit.sourceforge.net/ </li></ul></ul><ul><ul><li>Fitnesse (acceptance testing): http://fitnesse.org/ </li></ul></ul><ul><ul><li>Specflow (acceptance testing, .NET): http://www.specflow.org/ </li></ul></ul><ul><ul><li>Cuke4PHP (acceptance testing): https://github.com/olbrich/cuke4php </li></ul></ul><ul><li>Continuous integration: </li></ul><ul><ul><li>Teamcity: http://www.jetbrains.com/teamcity/ </li></ul></ul><ul><ul><li>Jenkins CI: http://jenkins-ci.org/ </li></ul></ul><ul><ul><li>Cruise Control: http://cruisecontrol.sourceforge.net/ </li></ul></ul>
    40. 41. Test driven development by example - Kent Beck
    41. 42. xUnit Test Patterns - Gerard Meszaros
    42. 43. Growing object-oriented software - Steve Freeman / Nat Pryce
    43. 44. Working effectively with legacy code - Michael Feathers
    44. 45. Tot slot <ul><li>Download presentatie:  </li></ul><ul><li>http://ryreitsma.blogspot.com </li></ul><ul><li>  </li></ul><ul><li>Vragen? </li></ul>

    ×