SlideShare a Scribd company logo
1 of 15
TESTARE L’INTESTABILE
Ferdinando Santacroce
@jesuswasrasta #IAD19
Topics
•Mob Programming
•Strong-style pair programming
•Legacy code
•Characterization tests
•Bare-handed
•Golden Master
•Approval tests
Testing
• Vuol dire tante cose
• Unit testing, TDD, e2e, esplorativi, manuali, …
• In genere lo si intende come un modo per validare il
comportamento di un’applicazione
• Questo implica che si abbia, per iscritto o nella propria
testa, un’idea di cosa il codice faccia, una specifica
• Ma cosa fare quando non ce l’abbiamo?
(e chi può affermare di averne mai visto una esaustiva? )
Working with existing code
•Spesso si lavora con codice esistente
•Si deve modificare o sistemare qualcosa che
non si conosce
•Altrettanto spesso risulta difficile capire cosa
faccia il codice che osserviamo
•Ah, e quasi sempre in questi casi i test
scarseggiano...
The Legacy Code Dilemma
You can’t refactor code
without test coverage
You have to refactor
some code to add tests
Characterization tests
• Invece di spendere energie preziose nel tentare
di capire «il giro del fumo», scriviamo test di
caratterizzazione che ci permettano di delinearne
il comportamento, aiutandoci a capire cosa fa
veramente il sistema sotto test
• Scrivi un test senza fare ipotesi, eseguilo, prendi i
risultati come la verità
Workshop setup
•Mob programming
•Io farò Navigatore/Facilitatore
•Strong-style pair programming
•4L’s retrospective
Mob programming
“All the brilliant people working at the
same time, in the same space, at the
same computer, on the same thing”
Woody Zuill
Strong style pair programming
“For an idea to go from your head
into the computer, it MUST go
through someone else’s hands”
Llewellyn Falco
The Driver
Traduce linguaggio naturale in codice.
E’ una sorta di device di input intelligente.
Non può prendere iniziativa, non scrive una riga di
codice senza che gliel’abbia detto il Navigator. Può
contribuire con idee.
The Navigator
Programma senza toccare la tastiera.
Traduce le idee che emergono in istruzioni per il driver
* In questa speciale occasione assumerò spesso un ruolo
più direttivo, impartendo istruzioni per arrivare a mostare
alcuni passaggi
The Mob
E’ dove nascono le idee.
Sentitevi liberi di proporre idee e soluzioni: ne
discuteremo ed eventualmente ne testeremo l’efficacia
implementandole.
Timebox
•Ruotiamo ogni 20 minuti
•Ne approfittiamo per fare un piccolo break
con retrospettiva (4L’s)
Continuous retrospective
4L’s retrospective (notare il codice colore dei post-it)
Scriveteli mentre lavoriamo, nei break li discutiamo
Liked
Cose che ti sono piaciute
Learned
Cose che hai imparato
Lacked
Cose che abbiamo fatto, ma
che possiamo migliorare
Longed for
Desideri non soddisfatti
Let’s start writing the first test!
• Scrivi un test alla volta, il più piccolo che ti permetta di
scoprire qualcosa sul SUT (System Under Test)
• Non perdere tempo a pensare a un nome significativo per il
test, chiamalo «test»
• Non fare ipotesi: lascia che il codice riveli il risultato
• Sistema l'asserzione in modo che corrisponda alla realtà
• Dai al test un nome significativo

More Related Content

Similar to Testare l'intestabile - Italian Agile Days 2019 #IAD19

Similar to Testare l'intestabile - Italian Agile Days 2019 #IAD19 (20)

Una fugace occhiata al Test Driven Development (2006)
Una fugace occhiata al Test Driven Development  (2006)Una fugace occhiata al Test Driven Development  (2006)
Una fugace occhiata al Test Driven Development (2006)
 
Consigli pratici per affrontare una Game Jam
Consigli pratici per affrontare una Game JamConsigli pratici per affrontare una Game Jam
Consigli pratici per affrontare una Game Jam
 
Corso Java - Introduzione
Corso Java - IntroduzioneCorso Java - Introduzione
Corso Java - Introduzione
 
GAE python GDG Milano - L02
GAE python GDG Milano - L02GAE python GDG Milano - L02
GAE python GDG Milano - L02
 
Coding
CodingCoding
Coding
 
Instilling Scrum Workshop
Instilling Scrum WorkshopInstilling Scrum Workshop
Instilling Scrum Workshop
 
Instilling Scrum Workshop
Instilling Scrum WorkshopInstilling Scrum Workshop
Instilling Scrum Workshop
 
Agile versioning with Git
Agile versioning with GitAgile versioning with Git
Agile versioning with Git
 
La fatina dei denti
La fatina dei dentiLa fatina dei denti
La fatina dei denti
 
Software ...e tutto ciò che comporta
Software ...e tutto ciò che comportaSoftware ...e tutto ciò che comporta
Software ...e tutto ciò che comporta
 
06 Refactoring
06 Refactoring06 Refactoring
06 Refactoring
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
Corso per dsa: utilizzo dei software
Corso per dsa: utilizzo dei softwareCorso per dsa: utilizzo dei software
Corso per dsa: utilizzo dei software
 
Idea generation
Idea generationIdea generation
Idea generation
 
Le 12 pratiche
Le 12 praticheLe 12 pratiche
Le 12 pratiche
 
Francesco Malatesta - What You Give is What You Get - Codemotion Milan 2017
Francesco Malatesta - What You Give is What You Get - Codemotion Milan 2017Francesco Malatesta - What You Give is What You Get - Codemotion Milan 2017
Francesco Malatesta - What You Give is What You Get - Codemotion Milan 2017
 
Design è come funziona: introduzione allo sviluppo per dispositivi mobili
Design è come funziona: introduzione allo sviluppo per dispositivi mobiliDesign è come funziona: introduzione allo sviluppo per dispositivi mobili
Design è come funziona: introduzione allo sviluppo per dispositivi mobili
 
Cody Design - Come disegna un Robot?
Cody Design - Come disegna un Robot?Cody Design - Come disegna un Robot?
Cody Design - Come disegna un Robot?
 
Le basi della SEO | Quando il posizionamento ha un'anima
Le basi della SEO | Quando il posizionamento ha un'animaLe basi della SEO | Quando il posizionamento ha un'anima
Le basi della SEO | Quando il posizionamento ha un'anima
 
Guida galattica per frontendisti!
Guida galattica per frontendisti!Guida galattica per frontendisti!
Guida galattica per frontendisti!
 

More from Ferdinando Santacroce

More from Ferdinando Santacroce (9)

Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
Growing Teams - Agile Venture Milano - #avmi2020
Growing Teams - Agile Venture Milano - #avmi2020Growing Teams - Agile Venture Milano - #avmi2020
Growing Teams - Agile Venture Milano - #avmi2020
 
I'm a mediocre developer
I'm a mediocre developerI'm a mediocre developer
I'm a mediocre developer
 
Working software
Working softwareWorking software
Working software
 
I'm a mediocre developer
I'm a mediocre developerI'm a mediocre developer
I'm a mediocre developer
 
Object Calisthenics - Agile Venture Prato 2018
Object Calisthenics - Agile Venture Prato 2018Object Calisthenics - Agile Venture Prato 2018
Object Calisthenics - Agile Venture Prato 2018
 
Object Calisthenics - TDD Milano
Object Calisthenics - TDD MilanoObject Calisthenics - TDD Milano
Object Calisthenics - TDD Milano
 
Object calisthenics
Object calisthenicsObject calisthenics
Object calisthenics
 
TDD a piccoli passi
TDD a piccoli passiTDD a piccoli passi
TDD a piccoli passi
 

Testare l'intestabile - Italian Agile Days 2019 #IAD19

  • 2. Topics •Mob Programming •Strong-style pair programming •Legacy code •Characterization tests •Bare-handed •Golden Master •Approval tests
  • 3. Testing • Vuol dire tante cose • Unit testing, TDD, e2e, esplorativi, manuali, … • In genere lo si intende come un modo per validare il comportamento di un’applicazione • Questo implica che si abbia, per iscritto o nella propria testa, un’idea di cosa il codice faccia, una specifica • Ma cosa fare quando non ce l’abbiamo? (e chi può affermare di averne mai visto una esaustiva? )
  • 4. Working with existing code •Spesso si lavora con codice esistente •Si deve modificare o sistemare qualcosa che non si conosce •Altrettanto spesso risulta difficile capire cosa faccia il codice che osserviamo •Ah, e quasi sempre in questi casi i test scarseggiano...
  • 5. The Legacy Code Dilemma You can’t refactor code without test coverage You have to refactor some code to add tests
  • 6. Characterization tests • Invece di spendere energie preziose nel tentare di capire «il giro del fumo», scriviamo test di caratterizzazione che ci permettano di delinearne il comportamento, aiutandoci a capire cosa fa veramente il sistema sotto test • Scrivi un test senza fare ipotesi, eseguilo, prendi i risultati come la verità
  • 7. Workshop setup •Mob programming •Io farò Navigatore/Facilitatore •Strong-style pair programming •4L’s retrospective
  • 8. Mob programming “All the brilliant people working at the same time, in the same space, at the same computer, on the same thing” Woody Zuill
  • 9. Strong style pair programming “For an idea to go from your head into the computer, it MUST go through someone else’s hands” Llewellyn Falco
  • 10. The Driver Traduce linguaggio naturale in codice. E’ una sorta di device di input intelligente. Non può prendere iniziativa, non scrive una riga di codice senza che gliel’abbia detto il Navigator. Può contribuire con idee.
  • 11. The Navigator Programma senza toccare la tastiera. Traduce le idee che emergono in istruzioni per il driver * In questa speciale occasione assumerò spesso un ruolo più direttivo, impartendo istruzioni per arrivare a mostare alcuni passaggi
  • 12. The Mob E’ dove nascono le idee. Sentitevi liberi di proporre idee e soluzioni: ne discuteremo ed eventualmente ne testeremo l’efficacia implementandole.
  • 13. Timebox •Ruotiamo ogni 20 minuti •Ne approfittiamo per fare un piccolo break con retrospettiva (4L’s)
  • 14. Continuous retrospective 4L’s retrospective (notare il codice colore dei post-it) Scriveteli mentre lavoriamo, nei break li discutiamo Liked Cose che ti sono piaciute Learned Cose che hai imparato Lacked Cose che abbiamo fatto, ma che possiamo migliorare Longed for Desideri non soddisfatti
  • 15. Let’s start writing the first test! • Scrivi un test alla volta, il più piccolo che ti permetta di scoprire qualcosa sul SUT (System Under Test) • Non perdere tempo a pensare a un nome significativo per il test, chiamalo «test» • Non fare ipotesi: lascia che il codice riveli il risultato • Sistema l'asserzione in modo che corrisponda alla realtà • Dai al test un nome significativo

Editor's Notes

  1. Quanti di voi sono o sono stati programmatori?