SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
Una fugace occhiata al
Test Driven Development
Roberto Bettazzoni
roberto@bettazzoni.it

http://creativecommons.org/licenses/by-sa/3.0/
1
Cosa è il TDD?

2
Cosa è il TDD?
Una pratica agile.

3
Pratiche agili ... cosa sono?

Pratiche agili ... cosa sono?
Sono le pratiche utilizzate nelle
metodologie agili.

4
Metodologie agili ... cosa sono?

Metodologie agili ... cosa sono?
Sono le metodologie basate sui valori
dell'Agile Manifesto

5
Il Manifesto dell'Alleanza Agile
Stiamo portando alla luce metodi migliori di sviluppare software
facendolo in prima persona e aiutando altri a farlo. Attraverso
questo tipo di lavoro siamo giunti ai seguenti valori:
Persone e interazioni più che processi e tools
Software che funziona più che una documentazione esaustiva
Collaborazione con il cliente più che negoziazione contrattuale
Rispondere al cambiamento più che seguire un piano prestabilito
Cioè, mentre c'è un valore nelle voci sulla destra,
attribuiamo un valore maggiore a quelle sulla sinistra.
Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith,
Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas.
© 2001, gli autori sopra citati. Questa dichiarazione può essere copiata in ogni forma, ma solo nella sua interezza, compresa la presentenota.

6
Metodologie e pratiche
●

Pratica

●

Metodologia

Modalità per il
conseguimento di uno
scopo. Spesso è
formulata in sequenze di
passi.

Insieme di pratiche legate
tra loro da una visione
filosofica d'insieme.

Es: TDD

Es: Scrum

Queste definizioni, nella loro accezione generica, sono fonte di numerose discussioni.
Devono essere considerate come semplificazione per i nostri scopi.
7
Metodologie Agili

Rispondere al cambiamento
più che
seguire un piano prestabilito
Cambia il metodo di approccio al problema.

8
Metodologie Agili
Le metodologie 'storiche' hanno un
approccio

PREDITTIVO
(elaborare un piano e seguirlo)
Le metodologie agili hanno un approccio

ADATTATIVO
(rispondere al cambiamento)
9
Basi del TDD

Un linguaggio di programmazione
Un sistema di Test (unit test)
Il Refactoring

10
Refactoring

Processo di modifica evolutiva di un
sistema software in modo da non
modificarne il comportamento esterno
migliorandone la sua struttura

11
Refactoring

●

modifica il codice in piccoli passi

●

migliora continuamente il design

●

il codice diventa «parlante»

●

richiede disciplina

●

la pratica rende perfetti

●

richiede un buon «fiuto»

12
Refactoring
Alcune «puzze» comuni

...ed alcune soluzioni

1. codice duplicato
2. metodi/classi lunghe
3. lunghe liste di parametri
4. cambiamenti divergenti
5. shotgun surgery
6. codice «invidioso»
7. liste di switch/if
8. generalizzazione
speculativa: «astronauti»
9. commenti!

1. estrai la parte duplicata
2. separa le competenze
3. introduci/estrai oggetti
4. separa le competenze
5. riunire la responsabilità
6. muovi/estrai metodo
7. polimorfismo
8. canc, canc, canc, canc,
canc, canc, canc, canc
9. nascosto dal deodorante!
13
Test Driven Development (TDD)
Nei processi di sviluppo software tradizionali il
collaudo si fa alla fine...
Nella realtà il collaudo non viene mai fatto :(

Perchè?
+ stress => - test
- test => + stress
14
Test Driven Development (TDD)
In TDD i test guidano lo sviluppo!
Implementa

Scrivi i test per una
nuova funzionalità

Rifattorizza
il codice

Commit

15
Test Driven Development (TDD)
Per un buon TDD:
●

Pensa ai test prima di pensare l'implementazione

●

Una «barra rossa» è meglio di uno schermo bianco

●

I test devono essere semplici e leggibili

●

I test devono essere isolati

●

I test devono essere veloci e lanciati spesso

●

●

Verifica prima il risultato atteso, verifica i casi limite,
verifica le eccezioni
Rifattorizza sia l'implementazione che i test
16
Test Driven Development (TDD)
TDD significa anche «Test Driven Design»
●

●

●

●

Permette di definire l'interfaccia degli oggetti prima
di buttarsi sull'implementazione
Permette di concentrarsi sul comportamento
dell'oggetto
Permette di rifattorizzare il codice con maggiore
confidenza
Porta alla realizzazione di architetture con basso
accoppiamento

17
Test Driven Development (TDD)
Con TDD posso anche...
●

Documentare l'utilizzo dei miei componenti
attraverso i test

●

Evitare la regressione dei bug

●

Isolare codice legacy

●

Dormire un po' più tranquillo la sera dopo il rilascio

18
Test Driven Development (TDD)
TDD non è Unit Testing
●

...ma sono ottimi amici :)

Come testare le interfacce utente?
●

Utilizzando tool ad-hoc

●

Rimuovendo la logica dalle interfacce

Come testare liberandosi da risorse esterne?
●

Mock

TDD può creare dipendenza! :)
19
Test Driven Development (TDD)
Strumenti:
●

*Unit: JUnit, PyUnit, NUnit, CPPUnit, PHPUnit, ...

●

DBUnit, SQLUnit, PL/SQL Unit, ...

●

EasyMock, Moquer, MockEJB, ...

●

Selenium, HttpUnit, Jmeter, ...

●

Fit, Fitnesse, ...

...forse pure troppi

20
Test Driven Development (TDD)

DOMANDE?

21
Esempi di TDD
(Test Driven Development)

Roberto Bettazzoni
roberto@bettazzoni.it

http://creativecommons.org/licenses/by-sa/3.0/
22
Primo Esempio di TDD

Prima User Story.
Una funzione XML-RPC che, dato il nome di un
file presente sul server, ne ritorni il contenuto
Primo Esempio di TDD
Acceptance test.
#!/usr/bin/env python
from xmlrpclib import ServerProxy
srv = ServerProxy('http://localhost:8000')
f = open(__file__, "rt")
try:
assert srv.load(__file__) == f.read()
finally:
f.close()
test.py
import unittest, os
from load import *
class Test(unittest.TestCase):
def test_load_file_not_exists(self):
assert load("") == ""
try:
os.remove("DoNotExist")
except OSError: pass
assert load("DoNotExist") == ""
def test_load_an_existing_file(self):
text = "I'm a lumberjack and I'm okay"
fname = "TEST.tmp"
f = open(fname, "wt")
f.write(text)
f.close()
assert load(fname) == text
os.remove(fname)
if __name__ == '__main__':
unittest.main()
load.py

def load(name):
try:
f = open(name, "rt")
try:
return f.read()
finally:
f.close()
except IOError:
return ""
test.py
import unittest, os, pyprocess, xmlrpclib
from load import *
def createFile(fname, text):
f = open(fname, "wt")
f.write(text)
f.close()
class Test(unittest.TestCase):
def test_load_file_not_exists(self):
def test_load_an_existing_file(self):

...
...

class TestServer(unittest.TestCase):
def test(self):
proc = pyprocess.PyProcess("load.py")
proc.start()
createFile("other", "text")
try:
rpc = xmlrpclib.ServerProxy('http://localhost:8000')
assert rpc.load("other") == "text"
finally:
proc.kill()
os.remove("other")
load.py
import os, SimpleXMLRPCServer
def load(name):
try:
f = open(name, "rt")
try:
return f.read()
finally:
f.close()
except IOError:
return ""
if __name__ == '__main__':
srv = SimpleXMLRPCServer.SimpleXMLRPCServer(("",8000))
srv.register_function(load)
srv.serve_forever()
Primo Esempio di TDD

Eseguendo il file “load.py”
il test di accettazione gira senza errori.
End of Job (?)

Weitere ähnliche Inhalte

Ähnlich wie Una fugace occhiata al Test Driven Development (2006)

Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...Commit University
 
Agile web development - Forum IISF - 2016
Agile web development - Forum IISF - 2016Agile web development - Forum IISF - 2016
Agile web development - Forum IISF - 2016Luciano Amodio
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingMarco Breveglieri
 
ATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven DevelopmentATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven DevelopmentGiorgio Marchetti
 
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming LanguagePasquale Paola
 
Essere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio SavarinoEssere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio SavarinoPMexpo
 
Clean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech SummitClean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech SummitDavide Muzzarelli
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSGiovanni Buffa
 
Fe05 test drivenjavascriptdevelopment
Fe05   test drivenjavascriptdevelopmentFe05   test drivenjavascriptdevelopment
Fe05 test drivenjavascriptdevelopmentDotNetCampus
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelFrancesca1980
 
AgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agiliAgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agiliLuca Minudel
 
Stop Meeting, Start Coding!
Stop Meeting, Start Coding!Stop Meeting, Start Coding!
Stop Meeting, Start Coding!Giulio Roggero
 
Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...
Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...
Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...Roberto Bettazzoni
 
Intoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie AgiliIntoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie AgiliStefano Leli
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capturefcospito
 

Ähnlich wie Una fugace occhiata al Test Driven Development (2006) (20)

Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
Collaborazione, Decisionalità e Gestione della Complessità nel Tempo: cosa ...
 
Le 12 pratiche
Le 12 praticheLe 12 pratiche
Le 12 pratiche
 
Agile web development - Forum IISF - 2016
Agile web development - Forum IISF - 2016Agile web development - Forum IISF - 2016
Agile web development - Forum IISF - 2016
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del Testing
 
TDD - una introduzione
TDD -  una introduzioneTDD -  una introduzione
TDD - una introduzione
 
ATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven DevelopmentATDD - Acceptance Test Driven Development
ATDD - Acceptance Test Driven Development
 
Java Programming Language
Java Programming LanguageJava Programming Language
Java Programming Language
 
Essere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio SavarinoEssere project manager senza rinunciare all'agilità integrata - Fabio Savarino
Essere project manager senza rinunciare all'agilità integrata - Fabio Savarino
 
Test automatizzati & serenity bdd
Test automatizzati & serenity bddTest automatizzati & serenity bdd
Test automatizzati & serenity bdd
 
Clean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech SummitClean programming 2020-01-25 @ Modena Tech Summit
Clean programming 2020-01-25 @ Modena Tech Summit
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
 
Fe05 test drivenjavascriptdevelopment
Fe05   test drivenjavascriptdevelopmentFe05   test drivenjavascriptdevelopment
Fe05 test drivenjavascriptdevelopment
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
Smart api
Smart apiSmart api
Smart api
 
AgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agiliAgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agili
 
Agile software lifecycle
Agile software lifecycleAgile software lifecycle
Agile software lifecycle
 
Stop Meeting, Start Coding!
Stop Meeting, Start Coding!Stop Meeting, Start Coding!
Stop Meeting, Start Coding!
 
Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...
Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...
Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...
 
Intoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie AgiliIntoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie Agili
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
 

Mehr von Roberto Bettazzoni

Giornat Mondiale della Retrospettiva 2020 - Riassunto Meetup Remoto
Giornat Mondiale della Retrospettiva 2020 - Riassunto Meetup RemotoGiornat Mondiale della Retrospettiva 2020 - Riassunto Meetup Remoto
Giornat Mondiale della Retrospettiva 2020 - Riassunto Meetup RemotoRoberto Bettazzoni
 
Complexity indicators: estimation precision and test types
Complexity indicators: estimation precision and test typesComplexity indicators: estimation precision and test types
Complexity indicators: estimation precision and test typesRoberto Bettazzoni
 
Why you need to change your way of working
Why you need to change your way of workingWhy you need to change your way of working
Why you need to change your way of workingRoberto Bettazzoni
 
TDD Dojo - Test Driven Development Coding Dojo
TDD Dojo - Test Driven Development Coding DojoTDD Dojo - Test Driven Development Coding Dojo
TDD Dojo - Test Driven Development Coding DojoRoberto Bettazzoni
 
Presentation of agile engineering practices
Presentation of agile engineering practicesPresentation of agile engineering practices
Presentation of agile engineering practicesRoberto Bettazzoni
 
Cynefin Lego Game Agenda (versione 2.0 in Italiano)
Cynefin Lego Game Agenda (versione 2.0 in Italiano) Cynefin Lego Game Agenda (versione 2.0 in Italiano)
Cynefin Lego Game Agenda (versione 2.0 in Italiano) Roberto Bettazzoni
 
Pair programming and pair training
Pair programming and pair trainingPair programming and pair training
Pair programming and pair trainingRoberto Bettazzoni
 
Presentazione eXtreme Programming
Presentazione eXtreme ProgrammingPresentazione eXtreme Programming
Presentazione eXtreme ProgrammingRoberto Bettazzoni
 
Programmazione android per esseri umani
Programmazione android per esseri umaniProgrammazione android per esseri umani
Programmazione android per esseri umaniRoberto Bettazzoni
 
Useful Lean Tools: Value Stream Mapping and Kanban
Useful Lean Tools: Value Stream Mapping and KanbanUseful Lean Tools: Value Stream Mapping and Kanban
Useful Lean Tools: Value Stream Mapping and KanbanRoberto Bettazzoni
 

Mehr von Roberto Bettazzoni (16)

Giornat Mondiale della Retrospettiva 2020 - Riassunto Meetup Remoto
Giornat Mondiale della Retrospettiva 2020 - Riassunto Meetup RemotoGiornat Mondiale della Retrospettiva 2020 - Riassunto Meetup Remoto
Giornat Mondiale della Retrospettiva 2020 - Riassunto Meetup Remoto
 
Complexity indicators: estimation precision and test types
Complexity indicators: estimation precision and test typesComplexity indicators: estimation precision and test types
Complexity indicators: estimation precision and test types
 
Why you need to change your way of working
Why you need to change your way of workingWhy you need to change your way of working
Why you need to change your way of working
 
TDD Dojo - Test Driven Development Coding Dojo
TDD Dojo - Test Driven Development Coding DojoTDD Dojo - Test Driven Development Coding Dojo
TDD Dojo - Test Driven Development Coding Dojo
 
Presentation of agile engineering practices
Presentation of agile engineering practicesPresentation of agile engineering practices
Presentation of agile engineering practices
 
Unit test in a nutshell
Unit test in a nutshellUnit test in a nutshell
Unit test in a nutshell
 
Presentation TDD in Python
Presentation TDD in PythonPresentation TDD in Python
Presentation TDD in Python
 
Cynefin Lego Game Agenda (versione 2.0 in Italiano)
Cynefin Lego Game Agenda (versione 2.0 in Italiano) Cynefin Lego Game Agenda (versione 2.0 in Italiano)
Cynefin Lego Game Agenda (versione 2.0 in Italiano)
 
Pair programming and pair training
Pair programming and pair trainingPair programming and pair training
Pair programming and pair training
 
Presentazione eXtreme Programming
Presentazione eXtreme ProgrammingPresentazione eXtreme Programming
Presentazione eXtreme Programming
 
Agile e Open Source
Agile e Open SourceAgile e Open Source
Agile e Open Source
 
Esempio di code kata
Esempio di code kataEsempio di code kata
Esempio di code kata
 
Scrum in a nutshell
Scrum in a nutshellScrum in a nutshell
Scrum in a nutshell
 
The BDD live show (ITA)
The BDD live show (ITA)The BDD live show (ITA)
The BDD live show (ITA)
 
Programmazione android per esseri umani
Programmazione android per esseri umaniProgrammazione android per esseri umani
Programmazione android per esseri umani
 
Useful Lean Tools: Value Stream Mapping and Kanban
Useful Lean Tools: Value Stream Mapping and KanbanUseful Lean Tools: Value Stream Mapping and Kanban
Useful Lean Tools: Value Stream Mapping and Kanban
 

Kürzlich hochgeladen

Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 

Kürzlich hochgeladen (9)

Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 

Una fugace occhiata al Test Driven Development (2006)

  • 1. Una fugace occhiata al Test Driven Development Roberto Bettazzoni roberto@bettazzoni.it http://creativecommons.org/licenses/by-sa/3.0/ 1
  • 2. Cosa è il TDD? 2
  • 3. Cosa è il TDD? Una pratica agile. 3
  • 4. Pratiche agili ... cosa sono? Pratiche agili ... cosa sono? Sono le pratiche utilizzate nelle metodologie agili. 4
  • 5. Metodologie agili ... cosa sono? Metodologie agili ... cosa sono? Sono le metodologie basate sui valori dell'Agile Manifesto 5
  • 6. Il Manifesto dell'Alleanza Agile Stiamo portando alla luce metodi migliori di sviluppare software facendolo in prima persona e aiutando altri a farlo. Attraverso questo tipo di lavoro siamo giunti ai seguenti valori: Persone e interazioni più che processi e tools Software che funziona più che una documentazione esaustiva Collaborazione con il cliente più che negoziazione contrattuale Rispondere al cambiamento più che seguire un piano prestabilito Cioè, mentre c'è un valore nelle voci sulla destra, attribuiamo un valore maggiore a quelle sulla sinistra. Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas. © 2001, gli autori sopra citati. Questa dichiarazione può essere copiata in ogni forma, ma solo nella sua interezza, compresa la presentenota. 6
  • 7. Metodologie e pratiche ● Pratica ● Metodologia Modalità per il conseguimento di uno scopo. Spesso è formulata in sequenze di passi. Insieme di pratiche legate tra loro da una visione filosofica d'insieme. Es: TDD Es: Scrum Queste definizioni, nella loro accezione generica, sono fonte di numerose discussioni. Devono essere considerate come semplificazione per i nostri scopi. 7
  • 8. Metodologie Agili Rispondere al cambiamento più che seguire un piano prestabilito Cambia il metodo di approccio al problema. 8
  • 9. Metodologie Agili Le metodologie 'storiche' hanno un approccio PREDITTIVO (elaborare un piano e seguirlo) Le metodologie agili hanno un approccio ADATTATIVO (rispondere al cambiamento) 9
  • 10. Basi del TDD Un linguaggio di programmazione Un sistema di Test (unit test) Il Refactoring 10
  • 11. Refactoring Processo di modifica evolutiva di un sistema software in modo da non modificarne il comportamento esterno migliorandone la sua struttura 11
  • 12. Refactoring ● modifica il codice in piccoli passi ● migliora continuamente il design ● il codice diventa «parlante» ● richiede disciplina ● la pratica rende perfetti ● richiede un buon «fiuto» 12
  • 13. Refactoring Alcune «puzze» comuni ...ed alcune soluzioni 1. codice duplicato 2. metodi/classi lunghe 3. lunghe liste di parametri 4. cambiamenti divergenti 5. shotgun surgery 6. codice «invidioso» 7. liste di switch/if 8. generalizzazione speculativa: «astronauti» 9. commenti! 1. estrai la parte duplicata 2. separa le competenze 3. introduci/estrai oggetti 4. separa le competenze 5. riunire la responsabilità 6. muovi/estrai metodo 7. polimorfismo 8. canc, canc, canc, canc, canc, canc, canc, canc 9. nascosto dal deodorante! 13
  • 14. Test Driven Development (TDD) Nei processi di sviluppo software tradizionali il collaudo si fa alla fine... Nella realtà il collaudo non viene mai fatto :( Perchè? + stress => - test - test => + stress 14
  • 15. Test Driven Development (TDD) In TDD i test guidano lo sviluppo! Implementa Scrivi i test per una nuova funzionalità Rifattorizza il codice Commit 15
  • 16. Test Driven Development (TDD) Per un buon TDD: ● Pensa ai test prima di pensare l'implementazione ● Una «barra rossa» è meglio di uno schermo bianco ● I test devono essere semplici e leggibili ● I test devono essere isolati ● I test devono essere veloci e lanciati spesso ● ● Verifica prima il risultato atteso, verifica i casi limite, verifica le eccezioni Rifattorizza sia l'implementazione che i test 16
  • 17. Test Driven Development (TDD) TDD significa anche «Test Driven Design» ● ● ● ● Permette di definire l'interfaccia degli oggetti prima di buttarsi sull'implementazione Permette di concentrarsi sul comportamento dell'oggetto Permette di rifattorizzare il codice con maggiore confidenza Porta alla realizzazione di architetture con basso accoppiamento 17
  • 18. Test Driven Development (TDD) Con TDD posso anche... ● Documentare l'utilizzo dei miei componenti attraverso i test ● Evitare la regressione dei bug ● Isolare codice legacy ● Dormire un po' più tranquillo la sera dopo il rilascio 18
  • 19. Test Driven Development (TDD) TDD non è Unit Testing ● ...ma sono ottimi amici :) Come testare le interfacce utente? ● Utilizzando tool ad-hoc ● Rimuovendo la logica dalle interfacce Come testare liberandosi da risorse esterne? ● Mock TDD può creare dipendenza! :) 19
  • 20. Test Driven Development (TDD) Strumenti: ● *Unit: JUnit, PyUnit, NUnit, CPPUnit, PHPUnit, ... ● DBUnit, SQLUnit, PL/SQL Unit, ... ● EasyMock, Moquer, MockEJB, ... ● Selenium, HttpUnit, Jmeter, ... ● Fit, Fitnesse, ... ...forse pure troppi 20
  • 21. Test Driven Development (TDD) DOMANDE? 21
  • 22. Esempi di TDD (Test Driven Development) Roberto Bettazzoni roberto@bettazzoni.it http://creativecommons.org/licenses/by-sa/3.0/ 22
  • 23. Primo Esempio di TDD Prima User Story. Una funzione XML-RPC che, dato il nome di un file presente sul server, ne ritorni il contenuto
  • 24. Primo Esempio di TDD Acceptance test. #!/usr/bin/env python from xmlrpclib import ServerProxy srv = ServerProxy('http://localhost:8000') f = open(__file__, "rt") try: assert srv.load(__file__) == f.read() finally: f.close()
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31. test.py import unittest, os from load import * class Test(unittest.TestCase): def test_load_file_not_exists(self): assert load("") == "" try: os.remove("DoNotExist") except OSError: pass assert load("DoNotExist") == "" def test_load_an_existing_file(self): text = "I'm a lumberjack and I'm okay" fname = "TEST.tmp" f = open(fname, "wt") f.write(text) f.close() assert load(fname) == text os.remove(fname) if __name__ == '__main__': unittest.main()
  • 32. load.py def load(name): try: f = open(name, "rt") try: return f.read() finally: f.close() except IOError: return ""
  • 33. test.py import unittest, os, pyprocess, xmlrpclib from load import * def createFile(fname, text): f = open(fname, "wt") f.write(text) f.close() class Test(unittest.TestCase): def test_load_file_not_exists(self): def test_load_an_existing_file(self): ... ... class TestServer(unittest.TestCase): def test(self): proc = pyprocess.PyProcess("load.py") proc.start() createFile("other", "text") try: rpc = xmlrpclib.ServerProxy('http://localhost:8000') assert rpc.load("other") == "text" finally: proc.kill() os.remove("other")
  • 34. load.py import os, SimpleXMLRPCServer def load(name): try: f = open(name, "rt") try: return f.read() finally: f.close() except IOError: return "" if __name__ == '__main__': srv = SimpleXMLRPCServer.SimpleXMLRPCServer(("",8000)) srv.register_function(load) srv.serve_forever()
  • 35. Primo Esempio di TDD Eseguendo il file “load.py” il test di accettazione gira senza errori. End of Job (?)