Your SlideShare is downloading. ×
0
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

TDD reloaded - JUGTAA 24 Ottobre 2012

466

Published on

Seconda serata di introduzione al Test-Driven Development, tenuta in XPeppers a Trento il 24 Ottobre 2012. …

Seconda serata di introduzione al Test-Driven Development, tenuta in XPeppers a Trento il 24 Ottobre 2012.
Nelle slide c'è anche la descrizione del coding dojo sullo string calculator che abbiamo svolto assieme.

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

No Downloads
Views
Total Views
466
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Test-Driven Development Pietro Di Bello pietro.di.bello@xpeppers.com twitter: @pierodibello www.xpeppers.com JUG Trentino Alto-Adige Ottobre 2012
  • 2. Test-Driven Development reloaded Pietro Di Bello pietro.di.bello@xpeppers.com twitter: @pierodibello www.xpeppers.com JUG Trentino Alto-Adige Ottobre 2012
  • 3. Che cos’è il TDD?
  • 4. Che cos’è il TDD?TDD = Test-driven development
  • 5. Che cos’è il TDD?TDD = Test-driven development è una tecnica di sviluppo
  • 6. Che cos’è il TDD?TDD = Test-driven development è una tecnica di sviluppo inventata da uno sviluppatore
  • 7. Che cos’è il TDD?TDD = Test-driven designè una tecnica di design e di sviluppo
  • 8. Qual’è l’obbiettivo del TDD? L’obbiettivo del TDD è scrivere “codice pulito che funziona”
  • 9. Qual’è l’obbiettivo del TDD? Clean code that works • is out of reach of even the best programmers, some of the time, • and out of reach of most programmers (like me) most of the time -- Kent Beck
  • 10. Che cos’è il TDD?TDD = Test-driven development guidata dalla scrittura di test automatici unitari
  • 11. Che cos’è il TDD? Test automatici e unitari automatici = le verifiche le fa la macchina al posto mio
  • 12. Che cos’è il TDD? Test automatici e unitari unitari = non verifico l’intero sistema ma una singola unità (classe, modulo, funzione)
  • 13. e allora?Nel TDD si usano i testautomatici per guidare il designe lo sviluppo del codice
  • 14. Il ritmo del TDD
  • 15. Il ritmo del TDDRed — Write a little test that doesntwork, and perhaps doesnt evencompile at first.
  • 16. Il ritmo del TDDRed — Write a little test that doesntwork, and perhaps doesnt evencompile at first.Green — Make the test work quickly,committing whatever sins necessary inthe process.
  • 17. Il ritmo del TDDRed — Write a little test that doesntwork, and perhaps doesnt evencompile at first.Green — Make the test work quickly,committing whatever sins necessary inthe process.Refactor — Eliminate all of theduplication created in merelygetting the test to work.
  • 18. Write a testpublic class AdderTest { @Test public void testTwoPlusThree() { Adder a = new Adder(); assertEquals(5, a.add(2, 3)); }}
  • 19. Now it compilespublic class AdderTest { @Test public void testTwoPlusThree() { Adder a = new Adder(); assertEquals(5, a.add(2, 3)); }}public class Adder { public int add(int a, int b) { return 0; }}
  • 20. Red bar!public class AdderTest { @Test public void testTwoPlusThree() { Adder a = new Adder(); assertEquals(5, a.add(2, 3)); }}public class Adder { public int add(int a, int b) { return 0; }}Expected 5, was 0
  • 21. Do the simplest thingpublic class AdderTest { @Test public void testTwoPlusThree() { Adder a = new Adder(); assertEquals(5, a.add(2, 3)); }}public class Adder { public int add(int a, int b) { return 5; }}
  • 22. Refactorpublic class AdderTest { @Test public void testTwoPlusThree() { Adder a = new Adder(); assertEquals(5, a.add(2, 3)); }}public class Adder { public int add(int a, int b) { return a+b; }}
  • 23. The procedure1. Write a test2. Make it compile Expected 5, was 03. Make it pass quickly4. Refactor to remove duplication
  • 24. The procedure RedRefactor Green Repeat every 2-10 min.
  • 25. Prima un test che fallisceRed — Write a little test that doesntwork, and perhaps doesnt evencompile at first.
  • 26. Il codice visto dalla barra rossa When we write a test, we imagine the perfect interface for our operation. We are telling ourselves a story about how the operation will look from the outside. Our story wont always come true, but its better to start from the best-possible application program interface (API) and work backward than to make things complicated, ugly, and "realistic" from the get-go. Kent Beck
  • 27. Maialino time... :)Green — Make the test work quickly,committing whatever sins necessary inthe process.
  • 28. Paga per i tuoi debiti...Refactor — Eliminate all of theduplication created in merely gettingthe test to work.
  • 29. Qual’è l’essenza del TDD?L’essenza del TDD è “sapere semprequale sarà il prossimo passo”
  • 30. Qual’è l’essenza del TDD?L’essenza del TDD è “sapere semprequale sarà il prossimo passo”Avere chiara la strada
  • 31. L’essenza del TDDMeno stress
  • 32. L’essenza del TDD Meno stress• Progresso misurabile e verificabile• Copertura di test• Controllo dello scope• Riduzione del bug rate
  • 33. L’essenza del TDDProgresso misurabile e verificabile
  • 34. L’essenza del TDD A piccoli passi
  • 35. L’essenza del TDD Copertura di test
  • 36. L’essenza del TDDControllo dello scope funzionale
  • 37. Uso della TODO list• Utile per gestire la complessità • elencare i diversi aspetti del problema• NON si elencano i test da implementare • non è TDD• Riduce lo stress• Bussola per farci capire a che punto siamo e non ci perdere la strada• Se mi viene in mente qualcosa la scrivo nella todolist e continuo sulla mia strada senza perdere focus
  • 38. Quando usare il TDD è difficile? • Quando si sviluppare codice multithreaded • Quando si lavora su codice legacy • Quando si padroneggia poco il linguaggio di programmazione usato
  • 39. Cosa non è uno unit-test? A test is not a unit test if: • It talks to the database • It communicates across the network • It touches the file system • It cant run at the same time as any of your other unit tests • You have to do special things to your environment (such as editing config files) to run it. Michael Feathers (“A Set of Unit Testing Rules”)
  • 40. The Three Rules Of TDD • You are not allowed to write any production code unless it is to make a failing unit test pass. • You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures. • You are not allowed to write any more production code than is sufficient to pass the one failing unit test.Robert “Uncle Bob” Martin (“The Three Laws of TDD”)
  • 41. Debugging Sucks Testing Rocks
  • 42. Coding DojoString Calculator • by Roy Osherove • (http://osherove.com/tdd-kata-1)
  • 43. StringCalculator Kata• Create a simple String calculator with a method • int Add(string numbers)• The method can take zero, one or two numbers, and will return their sum • for example “” or “1” or “1,2” • for an empty string it will return 0 Start with the simplest test case of an empty string and move to one and two numbers
  • 44. StringCalculator Kata• Remember to solve things as simply as possible so that you force yourself to write tests you did not think about• Remember to refactor after each passing test
  • 45. StringCalculator KataAllow the Add method to handle an unknownamount of numbers
  • 46. StringCalculator Kata Allow the Add method to handle new lines between numbers (instead of commas).• the following input is ok:  “1n2,3”  (will equal 6)• the following input is NOT ok:  “1,n” (not need to prove it - just clarifying)
  • 47. StringCalculator KataSupport different delimitersto change a delimiter, the beginning of the string willcontain a separate line that looks like this:“//[delimiter]n[numbers…]”for example “//;n1;2” should return three where thedefault delimiter is ‘;’ .the first line is optional.all existing scenarios should still be supported
  • 48. StringCalculator KataCalling Add with a negative number willthrow an exception “negatives not allowed” -and the negative that was passed.If there are multiple negatives, show all ofthem in the exception message
  • 49. StringCalculator KataNumbers bigger than 1000 should be ignored.So adding 2 + 1001 = 2
  • 50. StringCalculator KataDelimiters can be of any length with thefollowing format:“//[delimiter]n”For example:“//[***]n1***2***3” returns 6.
  • 51. StringCalculator KataMake sure you can also handle multipledelimiters with length longer than one char
  • 52. Contacts• Website www.xpeppers.com• E-Mail info@xpeppers.com• Twitter @xpeppers

×