SlideShare uma empresa Scribd logo
1 de 61
TEST-DRIVEN DEVELOPMENT Ennio Masi – 961/85 Prof. Sergio Di Martino Ingegneria del software 2 – 2007/08
Sommario ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Cos’è? ,[object Object],[object Object],[object Object]
Cos’è? (2) ,[object Object],[object Object]
TDD e l’XP ,[object Object],[object Object]
TDD e l’XP (2) ,[object Object],[object Object],[object Object]
TDD e l’XP (3) ,[object Object],[object Object],[object Object],[object Object]
Obiettivi del TDD ,[object Object],[object Object],[object Object],[object Object]
Unit Testing e xUnit Framework
Unit Test ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],“ Unit tests run fast. If they don’t run fast, they aren’t unit tests.”
Unit Test ed il TDD ,[object Object],[object Object],[object Object],[object Object]
I Mock Objects ,[object Object],[object Object],[object Object],[object Object],[object Object]
I Mock Objects (2) ,[object Object],[object Object],[object Object]
Esempio ,[object Object],[object Object],L’esempio classico è quello di implementare un mock object che simuli la connessione ad  un database:
Esempio (2) DBConnection.java public   interface  DBConnection { void  connect(); void  close(); } public   class  MockDBConnection  implements  DBConnection { private   boolean  connected = false; private   boolean  closed = false; public void  connect() {connected = true;} public void  close() {closed = true;} public boolean  validate(){ return  connected && closed;} } MockDBConnection.java
xUnit Framework ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],E’ un tool software che consente di scrivere e lanciare unit test. E’ il core del TDD
xUnit Framework (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Nel 1999 Kent Beck presentò uno unit test framework per il linguaggio  Smalltalk  (SUnit) Da quel framework sono stati effettuati molti porting:
L’architettura
Assert Dal seminario su JUnit: “ Gli Assert sono metodi che consentono di asserire che una certa condizione è vera o falsa.”
Assert (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Assert (3) ,[object Object],[object Object]
Testing degli errori ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],E’ fondamentale testare la gestione degli errori. Viene utilizzato il metodo  fail .
Testing degli errori (2) public   void   testXXX () { try { //an operation } catch  (Exception e) { fail(e.getMessage()); } ... } E’ fondamentale testare la gestione degli errori. Viene utilizzato il metodo  fail . ,[object Object],[object Object],[object Object],[object Object]
Il processo di sviluppo: TDD Mantra
Le regole d’oro del TDD ,[object Object],[object Object],Test-First Programming + Refactoring
Implicazioni tecniche ,[object Object],[object Object],[object Object]
TDD Mantra Primo step Think Think  : ragionare per piccoli passi Focalizzarsi sul  comportamento  che il codice deve avere.
TDD Mantra Think “ Vogliamo sviluppare una libreria aritmetica che agisca solo su numeri non negativi” Esempio aritLib.py
TDD Mantra Think Esempio ,[object Object],[object Object],[object Object],[object Object]
TDD Mantra Secondo step Think Red Bar  : scrittura dei test. Focalizzarsi sul  comportamento  della classe e la sua interfaccia pubblica. Red bar
TDD Mantra Secondo step Think import  aritLib import  unittest class   AritLibTest ( unittest.TestCase ): knownValues = ((0, 0, 0), (1, 1, 2), (2, 3, 5), (-1, -1, -1), (-10, 10, -1),(10, -5, -1), ) def   testAdd ( self ): for  x, y, sum  in   self .knownValues: result = aritLib.add(x, y) self .assertEquals(sum, result) Red bar
TDD Mantra Secondo step Think ERROR : testAdd (__main__.AritLibTest) ---------------------------------------------------------------------- Traceback (most recent call last): File “AritLibTest.py”, line 11, in testAdd result = aritLib.add(x,y) AttributeError : 'module' object has no attribute 'add' ---------------------------------------------------------------------- Ran 1 test in 0.000s FAILED  (errors=1) Red bar class   AritLibTest ( unittest.TestCase ): knownValues = ((0, 0, 0), (1, 1, 2), (2, 3, 5), (-1, -1, -1), (-10, 10, -1),(10, -5, -1), ) def   testAdd ( self ): for  x, y, sum  in   self .knownValues: result = aritLib.add(x, y) self .assertEquals(sum, result) IL TEST FALLISCE PERCHE’ LA FUNZIONE ANCORA NON ESISTE!
TDD Mantra Terzo step Think Red bar Green Bar Test fallito Green Bar  : scrittura del codice. Scrivere  solo  il codice necessario per superare i test scritti in precedenza.
TDD Mantra Terzo step Think Red bar Green Bar Test fallito aritLib.py def   add (x, y): if  x < 0: return  -1 if  y < 0: return  -1 return  x+y
TDD Mantra Terzo step Think Red bar Green Bar Test fallito aritLib.py def   add (x, y): if  x < 0: return  -1 if  y < 0: return  -1 return  x+y ---------------------------------------------------------------------- Ran 1 test in 0.000 s ---------------------------------------------------------------------- OK Vengono lanciati i test scritti in precedenza  senza modificarli.
TDD Mantra Quarto step Think Red bar Green Bar Test fallito Refactoring Refactoring  : semplificare ed aggiustare il desing della funzionalità sviluppata. In questa fase non bisogna assolutamente modificare la semantica della funzionalità implementata!
TDD Mantra Quarto step Think Red bar Green Bar Test fallito Prima def   add (x, y): if  x < 0: return  -1 if  y < 0: return  -1 return  x+y Refactoring Dopo def   add (x, y): if  x < 0  or  y < 0: return  -1 return  x+y
TDD Mantra Quarto step Think Red bar Green Bar Test fallito Refactoring Dopo def   add (x, y): if  x < 0  or  y < 0: return  -1 return  x+y ---------------------------------------------------------------------- Ran 1 test in 0.000 s ---------------------------------------------------------------------- OK Vengono lanciati i test scritti in precedenza  senza modificarli.
I princìpi Think Red bar Green Bar Test fallito Refactoring ,[object Object],[object Object],[object Object],[object Object]
Quando fermarsi? ,[object Object],[object Object],[object Object],[object Object]
Bad smells … ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Implicazioni sociali ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Implicazioni sociali (2) ,[object Object],[object Object],[object Object],[object Object]
La velocità ,[object Object],[object Object],[object Object],“ Unit tests run fast. If they don’t run fast, they aren’t unit tests.”
Le linee guida
TDD Patterns ,[object Object],[object Object],[object Object],[object Object],[object Object]
TDD Patterns ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
TDD Patterns ,[object Object],[object Object],[object Object],[object Object]
Focused integration testing  ed  End-to-End testing
Focused integration testing ,[object Object],[object Object],[object Object],[object Object],[object Object],Gli unit test da soli non bastano, il codice deve comunicare con l’esterno.
Focused integration testing (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Focused integration testing (2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Un miglior design prevede che vi sia un’unica classe che parli con il database.
End-to-end Testing ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
La velocità di esecuzione dei test ,[object Object],[object Object],[object Object]
Il TDD ed il Legacy Code
Legacy Code ,[object Object],[object Object],[object Object],[object Object],“ Legacy code is code without tests”
Legacy Code (2) ,[object Object],[object Object],[object Object]
Legacy Code (3) ,[object Object],[object Object],[object Object],[object Object],Difficile avere una visione d’insieme del codice
Benefici del TDD ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Limiti del TDD ,[object Object],[object Object],[object Object],[object Object],[object Object]
Riferimenti ,[object Object],[object Object],[object Object]

Mais conteúdo relacionado

Mais procurados

Java Unit Testing - JUnit (1)
Java Unit Testing - JUnit (1)Java Unit Testing - JUnit (1)
Java Unit Testing - JUnit (1)fgianneschi
 
Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)fgianneschi
 
Java Unit Testing - Introduction
Java Unit Testing - IntroductionJava Unit Testing - Introduction
Java Unit Testing - Introductionfgianneschi
 
Java Unit Testing - In container and database testing
Java Unit Testing - In container and database testingJava Unit Testing - In container and database testing
Java Unit Testing - In container and database testingfgianneschi
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testingMajong DevJfu
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capturefcospito
 
Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern ComportamentaliRiccardo Cardin
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 
Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)
Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)
Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)DotNetMarche
 
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...Davide Cerbo
 
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Idriss Riouak
 
Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Davide Carboni
 

Mais procurados (19)

Unit Testing
Unit TestingUnit Testing
Unit Testing
 
iContract
iContractiContract
iContract
 
Java Unit Testing - JUnit (1)
Java Unit Testing - JUnit (1)Java Unit Testing - JUnit (1)
Java Unit Testing - JUnit (1)
 
Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)
 
Java Unit Testing - Introduction
Java Unit Testing - IntroductionJava Unit Testing - Introduction
Java Unit Testing - Introduction
 
Java Unit Testing - In container and database testing
Java Unit Testing - In container and database testingJava Unit Testing - In container and database testing
Java Unit Testing - In container and database testing
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
Concurrency
ConcurrencyConcurrency
Concurrency
 
Workshop: Introduzione ad TDD
Workshop: Introduzione ad TDDWorkshop: Introduzione ad TDD
Workshop: Introduzione ad TDD
 
Detailed Model Capture
Detailed Model CaptureDetailed Model Capture
Detailed Model Capture
 
Design Pattern Comportamentali
Design Pattern ComportamentaliDesign Pattern Comportamentali
Design Pattern Comportamentali
 
TDD Casi Studio
TDD Casi StudioTDD Casi Studio
TDD Casi Studio
 
Jpnde
JpndeJpnde
Jpnde
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 
Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)
Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)
Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)
 
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...
 
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
 
Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)
 
Metodi asincroni in spring
Metodi asincroni in springMetodi asincroni in spring
Metodi asincroni in spring
 

Destaque

Beacons in Context
Beacons in ContextBeacons in Context
Beacons in ContextRex St. John
 
Test driven development v1.0
Test driven development v1.0Test driven development v1.0
Test driven development v1.0Ganesh Kondal
 
Format per incubatore di idee 14 apr
Format per incubatore di idee   14 aprFormat per incubatore di idee   14 apr
Format per incubatore di idee 14 aprio ci sto
 
Safe check up - Firmware_aggiornamento - 22feb2012
Safe check up - Firmware_aggiornamento - 22feb2012Safe check up - Firmware_aggiornamento - 22feb2012
Safe check up - Firmware_aggiornamento - 22feb2012M.Ela International Srl
 
Better Software 2010 - Applicazione pratica di un processo di sviluppo Agile ...
Better Software 2010 - Applicazione pratica di un processo di sviluppo Agile ...Better Software 2010 - Applicazione pratica di un processo di sviluppo Agile ...
Better Software 2010 - Applicazione pratica di un processo di sviluppo Agile ...Paolo Quaglia
 
Unit Testing Mockito
Unit Testing MockitoUnit Testing Mockito
Unit Testing MockitoLuca S Lopomo
 
Che cosa twittiamo? Brand Report Italia (Maggio 2010)
Che cosa twittiamo? Brand Report Italia (Maggio 2010)Che cosa twittiamo? Brand Report Italia (Maggio 2010)
Che cosa twittiamo? Brand Report Italia (Maggio 2010)Elife Brasil
 
Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...
Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...
Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...Pierfranco Ravotto
 
Time Management - Thomas Grones - edizeta
Time Management - Thomas Grones - edizetaTime Management - Thomas Grones - edizeta
Time Management - Thomas Grones - edizetaBtheONE Automotive
 
G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...
G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...
G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...Istituto nazionale di statistica
 
Software Testing & Test Driven Development
Software Testing & Test Driven DevelopmentSoftware Testing & Test Driven Development
Software Testing & Test Driven DevelopmentSergio Santoro
 
Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...
Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...
Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...Progetto Crescere Cooperativa Sociale
 
Time management - Luca Foresti
Time management - Luca ForestiTime management - Luca Foresti
Time management - Luca ForestiLuca Foresti
 
Unit Testing Concepts and Best Practices
Unit Testing Concepts and Best PracticesUnit Testing Concepts and Best Practices
Unit Testing Concepts and Best PracticesDerek Smith
 
#angels4bologna - SCE 2014
#angels4bologna - SCE 2014#angels4bologna - SCE 2014
#angels4bologna - SCE 2014EPOCA
 
UNIT TESTING PPT
UNIT TESTING PPTUNIT TESTING PPT
UNIT TESTING PPTsuhasreddy1
 
Time management
Time managementTime management
Time managementCDPV
 

Destaque (20)

Beacons in Context
Beacons in ContextBeacons in Context
Beacons in Context
 
Mocking
MockingMocking
Mocking
 
Test driven development v1.0
Test driven development v1.0Test driven development v1.0
Test driven development v1.0
 
Da programmatore a CEO
Da programmatore a CEODa programmatore a CEO
Da programmatore a CEO
 
Format per incubatore di idee 14 apr
Format per incubatore di idee   14 aprFormat per incubatore di idee   14 apr
Format per incubatore di idee 14 apr
 
Safe check up - Firmware_aggiornamento - 22feb2012
Safe check up - Firmware_aggiornamento - 22feb2012Safe check up - Firmware_aggiornamento - 22feb2012
Safe check up - Firmware_aggiornamento - 22feb2012
 
DESKTOP VIRTUALIZZATIONS
DESKTOP VIRTUALIZZATIONSDESKTOP VIRTUALIZZATIONS
DESKTOP VIRTUALIZZATIONS
 
Better Software 2010 - Applicazione pratica di un processo di sviluppo Agile ...
Better Software 2010 - Applicazione pratica di un processo di sviluppo Agile ...Better Software 2010 - Applicazione pratica di un processo di sviluppo Agile ...
Better Software 2010 - Applicazione pratica di un processo di sviluppo Agile ...
 
Unit Testing Mockito
Unit Testing MockitoUnit Testing Mockito
Unit Testing Mockito
 
Che cosa twittiamo? Brand Report Italia (Maggio 2010)
Che cosa twittiamo? Brand Report Italia (Maggio 2010)Che cosa twittiamo? Brand Report Italia (Maggio 2010)
Che cosa twittiamo? Brand Report Italia (Maggio 2010)
 
Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...
Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...
Valutare e certificare le competenze di asse e cittadinanza: LE COMPETENZE DI...
 
Time Management - Thomas Grones - edizeta
Time Management - Thomas Grones - edizetaTime Management - Thomas Grones - edizeta
Time Management - Thomas Grones - edizeta
 
G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...
G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...
G. D'Angiolini: Server Istat di classificazioni ufficiali, gli sviluppi in co...
 
Software Testing & Test Driven Development
Software Testing & Test Driven DevelopmentSoftware Testing & Test Driven Development
Software Testing & Test Driven Development
 
Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...
Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...
Manuale di valutazione delle capacità genitoriali - APS-I: Assessment of Pare...
 
Time management - Luca Foresti
Time management - Luca ForestiTime management - Luca Foresti
Time management - Luca Foresti
 
Unit Testing Concepts and Best Practices
Unit Testing Concepts and Best PracticesUnit Testing Concepts and Best Practices
Unit Testing Concepts and Best Practices
 
#angels4bologna - SCE 2014
#angels4bologna - SCE 2014#angels4bologna - SCE 2014
#angels4bologna - SCE 2014
 
UNIT TESTING PPT
UNIT TESTING PPTUNIT TESTING PPT
UNIT TESTING PPT
 
Time management
Time managementTime management
Time management
 

Semelhante a Introduzione al Test Driven Development

Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Developmentsazilla
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERDotNetCampus
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerAlessandro Alpi
 
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...Donato Clun
 
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mockyuroller
 
Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningAndrea Ciccotta
 
Test double - un'introduzione (PHP)
Test double - un'introduzione (PHP)Test double - un'introduzione (PHP)
Test double - un'introduzione (PHP)Carmelantonio Zolfo
 
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...Boymix81
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
 
Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects PracticesGrUSP
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5Matteo Baccan
 
Workshop Test Drive Development
Workshop Test Drive DevelopmentWorkshop Test Drive Development
Workshop Test Drive DevelopmentCommit University
 
Junit tutorial
Junit tutorialJunit tutorial
Junit tutorialfdesimone
 
TDD patterns and TDD strategies
TDD patterns and TDD strategiesTDD patterns and TDD strategies
TDD patterns and TDD strategiesAlessandro Ceseno
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
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
 

Semelhante a Introduzione al Test Driven Development (20)

Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Development
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVER
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql Server
 
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
 
Software Testing e TDD
Software Testing e TDDSoftware Testing e TDD
Software Testing e TDD
 
Unit test
Unit testUnit test
Unit test
 
Googletest, tdd e mock
Googletest, tdd e mockGoogletest, tdd e mock
Googletest, tdd e mock
 
Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine Learining
 
Test double - un'introduzione (PHP)
Test double - un'introduzione (PHP)Test double - un'introduzione (PHP)
Test double - un'introduzione (PHP)
 
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
 
Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects Practices
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Workshop Test Drive Development
Workshop Test Drive DevelopmentWorkshop Test Drive Development
Workshop Test Drive Development
 
Junit tutorial
Junit tutorialJunit tutorial
Junit tutorial
 
TDD patterns and TDD strategies
TDD patterns and TDD strategiesTDD patterns and TDD strategies
TDD patterns and TDD strategies
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
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
 
Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
 

Último

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
 
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
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
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
 
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
 
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
 
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
 
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
 

Último (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 ...
 
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...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
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...
 
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...
 
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...
 
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...
 
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”
 

Introduzione al Test Driven Development

  • 1. TEST-DRIVEN DEVELOPMENT Ennio Masi – 961/85 Prof. Sergio Di Martino Ingegneria del software 2 – 2007/08
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. Unit Testing e xUnit Framework
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15. Esempio (2) DBConnection.java public interface DBConnection { void connect(); void close(); } public class MockDBConnection implements DBConnection { private boolean connected = false; private boolean closed = false; public void connect() {connected = true;} public void close() {closed = true;} public boolean validate(){ return connected && closed;} } MockDBConnection.java
  • 16.
  • 17.
  • 19. Assert Dal seminario su JUnit: “ Gli Assert sono metodi che consentono di asserire che una certa condizione è vera o falsa.”
  • 20.
  • 21.
  • 22.
  • 23.
  • 24. Il processo di sviluppo: TDD Mantra
  • 25.
  • 26.
  • 27. TDD Mantra Primo step Think Think : ragionare per piccoli passi Focalizzarsi sul comportamento che il codice deve avere.
  • 28. TDD Mantra Think “ Vogliamo sviluppare una libreria aritmetica che agisca solo su numeri non negativi” Esempio aritLib.py
  • 29.
  • 30. TDD Mantra Secondo step Think Red Bar : scrittura dei test. Focalizzarsi sul comportamento della classe e la sua interfaccia pubblica. Red bar
  • 31. TDD Mantra Secondo step Think import aritLib import unittest class AritLibTest ( unittest.TestCase ): knownValues = ((0, 0, 0), (1, 1, 2), (2, 3, 5), (-1, -1, -1), (-10, 10, -1),(10, -5, -1), ) def testAdd ( self ): for x, y, sum in self .knownValues: result = aritLib.add(x, y) self .assertEquals(sum, result) Red bar
  • 32. TDD Mantra Secondo step Think ERROR : testAdd (__main__.AritLibTest) ---------------------------------------------------------------------- Traceback (most recent call last): File “AritLibTest.py”, line 11, in testAdd result = aritLib.add(x,y) AttributeError : 'module' object has no attribute 'add' ---------------------------------------------------------------------- Ran 1 test in 0.000s FAILED (errors=1) Red bar class AritLibTest ( unittest.TestCase ): knownValues = ((0, 0, 0), (1, 1, 2), (2, 3, 5), (-1, -1, -1), (-10, 10, -1),(10, -5, -1), ) def testAdd ( self ): for x, y, sum in self .knownValues: result = aritLib.add(x, y) self .assertEquals(sum, result) IL TEST FALLISCE PERCHE’ LA FUNZIONE ANCORA NON ESISTE!
  • 33. TDD Mantra Terzo step Think Red bar Green Bar Test fallito Green Bar : scrittura del codice. Scrivere solo il codice necessario per superare i test scritti in precedenza.
  • 34. TDD Mantra Terzo step Think Red bar Green Bar Test fallito aritLib.py def add (x, y): if x < 0: return -1 if y < 0: return -1 return x+y
  • 35. TDD Mantra Terzo step Think Red bar Green Bar Test fallito aritLib.py def add (x, y): if x < 0: return -1 if y < 0: return -1 return x+y ---------------------------------------------------------------------- Ran 1 test in 0.000 s ---------------------------------------------------------------------- OK Vengono lanciati i test scritti in precedenza senza modificarli.
  • 36. TDD Mantra Quarto step Think Red bar Green Bar Test fallito Refactoring Refactoring : semplificare ed aggiustare il desing della funzionalità sviluppata. In questa fase non bisogna assolutamente modificare la semantica della funzionalità implementata!
  • 37. TDD Mantra Quarto step Think Red bar Green Bar Test fallito Prima def add (x, y): if x < 0: return -1 if y < 0: return -1 return x+y Refactoring Dopo def add (x, y): if x < 0 or y < 0: return -1 return x+y
  • 38. TDD Mantra Quarto step Think Red bar Green Bar Test fallito Refactoring Dopo def add (x, y): if x < 0 or y < 0: return -1 return x+y ---------------------------------------------------------------------- Ran 1 test in 0.000 s ---------------------------------------------------------------------- OK Vengono lanciati i test scritti in precedenza senza modificarli.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 46.
  • 47.
  • 48.
  • 49. Focused integration testing ed End-to-End testing
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55. Il TDD ed il Legacy Code
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.