SlideShare a Scribd company logo
Software Testing
e
Test Driven Development
Cassino, 29 ottobre 2015
Mi presento
Sergio Santoro
Web developer
PHP e Python
In Facile.it da un anno
@taueres
FOSS enthusiast
Contributor di MediaWiki e Pywikibot
Problema
Monitorare l'evoluzione del software ed evitare
carenze di affidabilità e di attinenza ai requisiti.
Soluzioni:
– Ispezioni software (QA)
– Software Testing
Software Testing
Cos'è?
Attività d'indagine per rilevare e prevenire carenze
di affidabilità e correttezza in un sistema software.
Cosa NON è?
Attività che ci consente di dimostrare
l'assenza di errori in un sistema software
NO
COM
PLETEZZA
NO
COM
PLETEZZA
Software Failures
Si ha una failure quando il software espone un
comportamento erroneo.
Il comportamento effettivo è diverso da quello atteso.
Esempio: 5 + 2 = 6
Le failures sono spesso causate da bug
d'implementazione.
Problemi hardware?
PEBKAC?
Obiettivi del software testing
● Rilevare il maggior numero di failures possibili.
● …
Il software testing non si occupa di:
● Individuare e sistemare i bug
● Migliorare il desing
● Formalizzare il problema
Solo?
Testing, perché?
Il testing è un'attività costosa e non dà certezze.
Perché attuarla?
– Meno failures
– Bolder developers
– Refactor più semplice
– Documentazione aggiuntiva per il codice
– Miglior design
– Ispezioni software aggiuntive
– Non riguarda solo i software developers
Modalità d'esecuzione dei test
● Software Testing manuale
Eseguire il programma manualmente e
verificarne il corretto funzionamento.
● Software Testing automatico
Esercitare il software mediante l'uso di altri
programmi. Valutare automaticamente la sua
correttezza.
Software Testing manuale
Esempi: acceptance test, beta test.
Vantaggi:
– Test molto efficaci con l'utente finale;
– Riproducono le effettive condizioni d'esercizio.
Svantaggi:
– Attività molto lenta e costosa;
– Errori lato utente;
– Solo per software già funzionante e completo.
Software Testing automatico
Vantaggi:
– Test più veloci;
– Test eseguibili continuamente;
– Test più formali;
– Applicabile in qualsiasi stadio di sviluppo;
– Code coverage.
Svantaggi:
– Ulteriore codice da produrre e manutenere;
– Simulazione ambiente di produzione;
– Solo per gli addetti ai lavori.
Tipologie Testing automatico
Testing funzionale (End-to-end)
Esercitare il sistema nella sua interezza.
Testing d'integrazione
Testare l'interazione tra componenti
Testing d'unità
Esercitare una singola componente
Esempio
Testing d'unità
Esercitare una singola componente in un
ambiente “ideale” per verificare il suo corretto
funzionamento.
Vantaggi:
– Bug ben localizzati.
– I risultati non sono influenzati da altre componenti.
– Test molto veloci e semplici.
Strumenti per il Testing d'unità
Testing-frameworks xUnit.
Ogni linguaggio ha la sua implementazione:
– Java, JUnit
– Python, PyUnit
– PHP, PHPUnit
ComponenteComponente
da testareda testare
Dip2 Dip3
Dip1 UserStub1
Stub2 Stub3
Test
Driver
Test driver
Esercitare la componente under-test e verificare
la correttezza dell'output.
Responsabilità:
– Definire le condizioni d'ingresso
– Definire l'oracolo
– Esercitare la componente
– Confrontare i risultati con l'oracolo
Test driver
Si realizza mediante la scrittura di uno o più
test cases
class ArrayUtilsTest extends PHPUnit_Framework_TestCase
{
public function testSumArray()
{
$inputArray = [1, 2, 3];
$expected = 6;
$arrayUtils = new ArrayUtils();
$actual = $arrayUtils->sumArray($inputArray);
$this->assertEquals($expected, $actual);
}
}
Stub e Mock
Rimpiazzare le componenti reali con
implementazioni fittizie.
Stub: Simula il comportamento della
componente reale.
Mock: Stub + expectations.
Esempio
Esempio Stub
class SubscriptionBuilderStub extends SubscriptionBuilder
{
public function __construct() {}
// Overrides
public function getSubscriptionFrom(Category $c, User $user)
{
return new Subscription();
}
}
Esempio Mock
class SubscriptionBuilderMock extends SubscriptionBuilder
{
public $userArg;
public function __construct() {}
// Overrides
public function getSubscriptionFrom(Category $c, User $user)
{
$this->userArg = $user;
return new Subscription();
}
public function checkExpectations($expectedUser)
{
return $this->userArg === $expectedUser;
}
}
Prophecy
Libreria inclusa in PHPUnit che semplifica
l'implementazione di Stub e Mock
Prophet Object Prophecy Method Prophecy
Stub / Mock
Check
Predictions
1 * 1 *
1
1
Prophecy
function testWithStub()
{
$p = new ProphecyProphet();
$builderStub = $p->prophesize('SubscriptionBuilder');
$builderStub->getSubscriptionFrom(Argument::cetera())
->willReturn(new Subscription());
$stub = $builderStub->reveal();
// ...
}
function testWithMock()
{
$p = new ProphecyProphet();
$user = new User();
$builderMock = $p->prophesize('SubscriptionBuilder');
$builderMock->getSubscriptionFrom(Argument::any(), $user)
->shouldBeCalledTimes(1)
->willReturn(new Subscription());
$mock = $builderMock->reveal();
// ...
$p->checkPredictions();
}
Prophecy
Test Driven Development
Cos'è?
È una metodologia per lo sviluppo software con
approccio Test-first.
I test occupano una posizione predominante.
“Come usare una componente?”
Solo testing d'unità.
Normal flow
Design
Implement
Test
TDD flow
Design
Test
Implement
Principi del TDD
● Si può aggiungere una nuova funzionalità solo
quando c'è un test corrispondente che fallisce.
● Si può riparare un bug solo quando esso viene
esercitato da un test che sta fallendo.
● Il Refactoring è l'unica operazione concessa con
test verdi.
Green
- New features
- Bug fixing
- Refactoring
Red
Test Driven Development
L'attività di sviluppo viene suddivisa in
molte piccole iterazioni.
Ogni iterazione è indipendente dalle altre.
Problem Solution
Partial
solution
Partial
solution
Iterazione TDD
Comprendere,
formalizzare il problema.
Definire l'API.
Rolvere il problema
senza preoccuparsi
del design.Migliorare la
qualità del codice
senza aggiungere
nuove
funzionalità.
Iterazione TDD
Quanto devono essere ampie le iterazioni?
Molto soggettivo:
– Comprensione del problema
– Comprensione del sistema
– Boldness
Generalmente durano una manciata di minuti.
Iterazione TDD
Quante iterazioni?
Almeno una iterazione per ogni caso d'uso della
componente.
Esempio:
+ * + = +
- * + = -
- * - = +
3 casi d'uso -> 3 iterazioni
Esempio iterazioni TDD
Problema: somma tra diverse valute.
1 € + 1 $ = ?
It. 1: somma con un solo addendo
It. 2: somma di addendi con la stessa valuta
It. 3: somma di addendi con valuta differente
Vantaggi TDD
● Forte comprensione del problema
● Continuo feedback, più boldness
● Risolvere il problema ≠ Design
● Be the user of your code!
● Divide et impera
TDD nel ciclo di sviluppo
Analisi del
problema
Analisi del
sistema
Design
Alto livello
TDD
Functional
Test
Acceptance
Test
Problem System Implementation

More Related Content

What's hot

Unit test
Unit testUnit test
Unit testing 2014
Unit testing 2014Unit testing 2014
Unit testing 2014
Giacomo Petronio
 
Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
Daniel Londero
 
Come rilasciare App di Qualità
Come rilasciare App di QualitàCome rilasciare App di Qualità
Come rilasciare App di Qualità
Luca Manara
 
Test e scrum un caso reale v3.2
Test e scrum   un caso reale v3.2Test e scrum   un caso reale v3.2
Test e scrum un caso reale v3.2
Ivan Fioravanti
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
Gian Maria Ricci
 
TMap: una metodologia di test business driven
TMap: una metodologia di test business drivenTMap: una metodologia di test business driven
TMap: una metodologia di test business driven
Codemotion
 
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
Codemotion
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
Andrea Tosato
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Developmentsazilla
 
Codice di qualità con VS2010 (TDD)
Codice di qualità con VS2010 (TDD)Codice di qualità con VS2010 (TDD)
Codice di qualità con VS2010 (TDD)XeDotNet
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
Andrea Della Corte
 
TDD patterns and TDD strategies
TDD patterns and TDD strategiesTDD patterns and TDD strategies
TDD patterns and TDD strategies
Alessandro Ceseno
 
Continuous integration per sviluppatori mobile
Continuous integration per sviluppatori mobileContinuous integration per sviluppatori mobile
Continuous integration per sviluppatori mobile
Antonio Liccardi
 
Automated UI testing for iOs and Android mobile apps
Automated UI testing for iOs and Android mobile appsAutomated UI testing for iOs and Android mobile apps
Automated UI testing for iOs and Android mobile apps
Massimo Bonanni
 
Xamarin Test Cloud
Xamarin Test CloudXamarin Test Cloud
Xamarin Test Cloud
Massimo Bonanni
 
Il dilemma del test: Manuale o Automatico?
Il dilemma del test: Manuale o Automatico?Il dilemma del test: Manuale o Automatico?
Il dilemma del test: Manuale o Automatico?
Microfocusitalia
 
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAMBenchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAMNicola Paoletti
 
AgileIoT, agile meets IoT - MEC 2016
AgileIoT, agile meets IoT - MEC 2016AgileIoT, agile meets IoT - MEC 2016
AgileIoT, agile meets IoT - MEC 2016
Felice Pescatore
 

What's hot (20)

Unit test
Unit testUnit test
Unit test
 
Unit testing 2014
Unit testing 2014Unit testing 2014
Unit testing 2014
 
Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
 
Come rilasciare App di Qualità
Come rilasciare App di QualitàCome rilasciare App di Qualità
Come rilasciare App di Qualità
 
Test e scrum un caso reale v3.2
Test e scrum   un caso reale v3.2Test e scrum   un caso reale v3.2
Test e scrum un caso reale v3.2
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
TMap: una metodologia di test business driven
TMap: una metodologia di test business drivenTMap: una metodologia di test business driven
TMap: una metodologia di test business driven
 
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
TPi: una metodologia per il miglioramento del processo di test, by Andrea Di ...
 
Sinossi
SinossiSinossi
Sinossi
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Android Test Driven Development
Android Test Driven DevelopmentAndroid Test Driven Development
Android Test Driven Development
 
Codice di qualità con VS2010 (TDD)
Codice di qualità con VS2010 (TDD)Codice di qualità con VS2010 (TDD)
Codice di qualità con VS2010 (TDD)
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
TDD patterns and TDD strategies
TDD patterns and TDD strategiesTDD patterns and TDD strategies
TDD patterns and TDD strategies
 
Continuous integration per sviluppatori mobile
Continuous integration per sviluppatori mobileContinuous integration per sviluppatori mobile
Continuous integration per sviluppatori mobile
 
Automated UI testing for iOs and Android mobile apps
Automated UI testing for iOs and Android mobile appsAutomated UI testing for iOs and Android mobile apps
Automated UI testing for iOs and Android mobile apps
 
Xamarin Test Cloud
Xamarin Test CloudXamarin Test Cloud
Xamarin Test Cloud
 
Il dilemma del test: Manuale o Automatico?
Il dilemma del test: Manuale o Automatico?Il dilemma del test: Manuale o Automatico?
Il dilemma del test: Manuale o Automatico?
 
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAMBenchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
Benchmarking - Architettura degli Elaboratori - AA 2010/2011 - UNICAM
 
AgileIoT, agile meets IoT - MEC 2016
AgileIoT, agile meets IoT - MEC 2016AgileIoT, agile meets IoT - MEC 2016
AgileIoT, agile meets IoT - MEC 2016
 

Viewers also liked

Mocking
MockingMocking
Test driven development v1.0
Test driven development v1.0Test driven development v1.0
Test driven development v1.0
Ganesh Kondal
 
Da programmatore a CEO
Da programmatore a CEODa programmatore a CEO
Da programmatore a CEO
Emanuele DelBono
 
Software testing
Software testingSoftware testing
Software testingIxmaSoft
 
Introduzione al Testing
Introduzione al TestingIntroduzione al Testing
Introduzione al Testing
DotNetMarche
 
Introduzione al Test Driven Development
Introduzione al Test Driven DevelopmentIntroduzione al Test Driven Development
Introduzione al Test Driven Development
Ennio Masi
 
Telecom Italia - Bilancio di sostenibilita' 2011
Telecom Italia - Bilancio di sostenibilita' 2011Telecom Italia - Bilancio di sostenibilita' 2011
Telecom Italia - Bilancio di sostenibilita' 2011
Gruppo TIM
 
Project enel ed-f_jv_nucleare
Project enel ed-f_jv_nucleareProject enel ed-f_jv_nucleare
Project enel ed-f_jv_nucleare
roberto giubila
 
Smau Firenze 2015 - Telecom Italia Digital Solutions
Smau Firenze 2015 - Telecom Italia Digital SolutionsSmau Firenze 2015 - Telecom Italia Digital Solutions
Smau Firenze 2015 - Telecom Italia Digital Solutions
SMAU
 
Telecom Italia
Telecom ItaliaTelecom Italia
Telecom Italia
Riccardo Mastellone
 
Smau Padova 2015 - Telecom Italia Digital Solutions
Smau Padova 2015 - Telecom Italia Digital SolutionsSmau Padova 2015 - Telecom Italia Digital Solutions
Smau Padova 2015 - Telecom Italia Digital Solutions
SMAU
 
Mario di Mauro - DEMO DAY - TIM #Wcap Accelerator
 Mario di Mauro - DEMO DAY -  TIM #Wcap Accelerator Mario di Mauro - DEMO DAY -  TIM #Wcap Accelerator
Mario di Mauro - DEMO DAY - TIM #Wcap Accelerator
Gruppo TIM
 
Report di corporate governance e relazione sulla remunerazione di Telecom Ita...
Report di corporate governance e relazione sulla remunerazione di Telecom Ita...Report di corporate governance e relazione sulla remunerazione di Telecom Ita...
Report di corporate governance e relazione sulla remunerazione di Telecom Ita...
Gruppo TIM
 
Teorie e tecniche dei test
Teorie e tecniche dei testTeorie e tecniche dei test
Teorie e tecniche dei testOlaudio Bia
 
2013 06 19_report_tim
2013 06 19_report_tim2013 06 19_report_tim
2013 06 19_report_tim
CarlottaVentura
 
Relazione finanziaria annuale Telecom Italia 2013
Relazione finanziaria annuale Telecom Italia 2013Relazione finanziaria annuale Telecom Italia 2013
Relazione finanziaria annuale Telecom Italia 2013
Gruppo TIM
 
Beacons in Context
Beacons in ContextBeacons in Context
Beacons in Context
Rex St. John
 

Viewers also liked (20)

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
 
Software testing
Software testingSoftware testing
Software testing
 
Introduzione al Testing
Introduzione al TestingIntroduzione al Testing
Introduzione al Testing
 
Introduzione al Test Driven Development
Introduzione al Test Driven DevelopmentIntroduzione al Test Driven Development
Introduzione al Test Driven Development
 
attestato_fastweb
attestato_fastwebattestato_fastweb
attestato_fastweb
 
Telecom Italia - Bilancio di sostenibilita' 2011
Telecom Italia - Bilancio di sostenibilita' 2011Telecom Italia - Bilancio di sostenibilita' 2011
Telecom Italia - Bilancio di sostenibilita' 2011
 
Project enel ed-f_jv_nucleare
Project enel ed-f_jv_nucleareProject enel ed-f_jv_nucleare
Project enel ed-f_jv_nucleare
 
Smau Firenze 2015 - Telecom Italia Digital Solutions
Smau Firenze 2015 - Telecom Italia Digital SolutionsSmau Firenze 2015 - Telecom Italia Digital Solutions
Smau Firenze 2015 - Telecom Italia Digital Solutions
 
Telecom Italia
Telecom ItaliaTelecom Italia
Telecom Italia
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Smau Padova 2015 - Telecom Italia Digital Solutions
Smau Padova 2015 - Telecom Italia Digital SolutionsSmau Padova 2015 - Telecom Italia Digital Solutions
Smau Padova 2015 - Telecom Italia Digital Solutions
 
Mario di Mauro - DEMO DAY - TIM #Wcap Accelerator
 Mario di Mauro - DEMO DAY -  TIM #Wcap Accelerator Mario di Mauro - DEMO DAY -  TIM #Wcap Accelerator
Mario di Mauro - DEMO DAY - TIM #Wcap Accelerator
 
Rapporto-Finale-2015_Osservatorio-Corporate-Governance-TEH-A
Rapporto-Finale-2015_Osservatorio-Corporate-Governance-TEH-ARapporto-Finale-2015_Osservatorio-Corporate-Governance-TEH-A
Rapporto-Finale-2015_Osservatorio-Corporate-Governance-TEH-A
 
Report di corporate governance e relazione sulla remunerazione di Telecom Ita...
Report di corporate governance e relazione sulla remunerazione di Telecom Ita...Report di corporate governance e relazione sulla remunerazione di Telecom Ita...
Report di corporate governance e relazione sulla remunerazione di Telecom Ita...
 
Teorie e tecniche dei test
Teorie e tecniche dei testTeorie e tecniche dei test
Teorie e tecniche dei test
 
2013 06 19_report_tim
2013 06 19_report_tim2013 06 19_report_tim
2013 06 19_report_tim
 
Relazione finanziaria annuale Telecom Italia 2013
Relazione finanziaria annuale Telecom Italia 2013Relazione finanziaria annuale Telecom Italia 2013
Relazione finanziaria annuale Telecom Italia 2013
 
Beacons in Context
Beacons in ContextBeacons in Context
Beacons in Context
 

Similar to Software Testing & Test Driven Development

Java Unit Testing - Introduction
Java Unit Testing - IntroductionJava Unit Testing - Introduction
Java Unit Testing - Introduction
fgianneschi
 
Unit Test di Gabriele Seroni
Unit Test di Gabriele SeroniUnit Test di Gabriele Seroni
Unit Test di Gabriele Seroni
Giuneco S.r.l
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del SoftwareYeser Rema
 
PASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous IntegrationPASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous Integration
Alessandro Alpi
 
L'Occhio di Ra sul Testing
L'Occhio di Ra sul TestingL'Occhio di Ra sul Testing
L'Occhio di Ra sul Testing
Felice Pescatore
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql Server
Alessandro Alpi
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVER
DotNetCampus
 
TDD in WordPress
TDD in WordPressTDD in WordPress
TDD in WordPress
lucatume
 
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
Emerasoft, solutions to collaborate
 
Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
Zend by Rogue Wave Software
 
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
Microfocusitalia
 
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
 
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
Marco Breveglieri
 
MuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdfMuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdf
Florence Consulting
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
Massimo Groppelli
 
Fe05 test drivenjavascriptdevelopment
Fe05   test drivenjavascriptdevelopmentFe05   test drivenjavascriptdevelopment
Fe05 test drivenjavascriptdevelopmentDotNetCampus
 
Continuos Integration
Continuos IntegrationContinuos Integration
Continuos Integration
Alessandro Ceseno
 
Workshop: Introduzione ad TDD
Workshop: Introduzione ad TDDWorkshop: Introduzione ad TDD
Workshop: Introduzione ad TDD
Marcello Missiroli
 

Similar to Software Testing & Test Driven Development (20)

Java Unit Testing - Introduction
Java Unit Testing - IntroductionJava Unit Testing - Introduction
Java Unit Testing - Introduction
 
Unit Test di Gabriele Seroni
Unit Test di Gabriele SeroniUnit Test di Gabriele Seroni
Unit Test di Gabriele Seroni
 
Qualità del Software
Qualità del SoftwareQualità del Software
Qualità del Software
 
PASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous IntegrationPASS Virtual Chapter - SQL Server Continuous Integration
PASS Virtual Chapter - SQL Server Continuous Integration
 
Testing
TestingTesting
Testing
 
L'Occhio di Ra sul Testing
L'Occhio di Ra sul TestingL'Occhio di Ra sul Testing
L'Occhio di Ra sul Testing
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql Server
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVER
 
TDD in WordPress
TDD in WordPressTDD in WordPress
TDD in WordPress
 
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
Webinar: Il “real device testing” di Perfecto Mobile per una strategia mobile...
 
Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
 
Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
 
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
dal test manuale al test automatico: un esempio basato sul Keyword Driven Tes...
 
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...
 
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
 
MuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdfMuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdf
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Fe05 test drivenjavascriptdevelopment
Fe05   test drivenjavascriptdevelopmentFe05   test drivenjavascriptdevelopment
Fe05 test drivenjavascriptdevelopment
 
Continuos Integration
Continuos IntegrationContinuos Integration
Continuos Integration
 
Workshop: Introduzione ad TDD
Workshop: Introduzione ad TDDWorkshop: Introduzione ad TDD
Workshop: Introduzione ad TDD
 

Software Testing & Test Driven Development

  • 1. Software Testing e Test Driven Development Cassino, 29 ottobre 2015
  • 2. Mi presento Sergio Santoro Web developer PHP e Python In Facile.it da un anno @taueres FOSS enthusiast Contributor di MediaWiki e Pywikibot
  • 3. Problema Monitorare l'evoluzione del software ed evitare carenze di affidabilità e di attinenza ai requisiti. Soluzioni: – Ispezioni software (QA) – Software Testing
  • 4. Software Testing Cos'è? Attività d'indagine per rilevare e prevenire carenze di affidabilità e correttezza in un sistema software. Cosa NON è? Attività che ci consente di dimostrare l'assenza di errori in un sistema software NO COM PLETEZZA NO COM PLETEZZA
  • 5. Software Failures Si ha una failure quando il software espone un comportamento erroneo. Il comportamento effettivo è diverso da quello atteso. Esempio: 5 + 2 = 6 Le failures sono spesso causate da bug d'implementazione. Problemi hardware? PEBKAC?
  • 6. Obiettivi del software testing ● Rilevare il maggior numero di failures possibili. ● … Il software testing non si occupa di: ● Individuare e sistemare i bug ● Migliorare il desing ● Formalizzare il problema Solo?
  • 7. Testing, perché? Il testing è un'attività costosa e non dà certezze. Perché attuarla? – Meno failures – Bolder developers – Refactor più semplice – Documentazione aggiuntiva per il codice – Miglior design – Ispezioni software aggiuntive – Non riguarda solo i software developers
  • 8. Modalità d'esecuzione dei test ● Software Testing manuale Eseguire il programma manualmente e verificarne il corretto funzionamento. ● Software Testing automatico Esercitare il software mediante l'uso di altri programmi. Valutare automaticamente la sua correttezza.
  • 9. Software Testing manuale Esempi: acceptance test, beta test. Vantaggi: – Test molto efficaci con l'utente finale; – Riproducono le effettive condizioni d'esercizio. Svantaggi: – Attività molto lenta e costosa; – Errori lato utente; – Solo per software già funzionante e completo.
  • 10. Software Testing automatico Vantaggi: – Test più veloci; – Test eseguibili continuamente; – Test più formali; – Applicabile in qualsiasi stadio di sviluppo; – Code coverage. Svantaggi: – Ulteriore codice da produrre e manutenere; – Simulazione ambiente di produzione; – Solo per gli addetti ai lavori.
  • 11. Tipologie Testing automatico Testing funzionale (End-to-end) Esercitare il sistema nella sua interezza. Testing d'integrazione Testare l'interazione tra componenti Testing d'unità Esercitare una singola componente
  • 13. Testing d'unità Esercitare una singola componente in un ambiente “ideale” per verificare il suo corretto funzionamento. Vantaggi: – Bug ben localizzati. – I risultati non sono influenzati da altre componenti. – Test molto veloci e semplici.
  • 14. Strumenti per il Testing d'unità Testing-frameworks xUnit. Ogni linguaggio ha la sua implementazione: – Java, JUnit – Python, PyUnit – PHP, PHPUnit
  • 15. ComponenteComponente da testareda testare Dip2 Dip3 Dip1 UserStub1 Stub2 Stub3 Test Driver
  • 16. Test driver Esercitare la componente under-test e verificare la correttezza dell'output. Responsabilità: – Definire le condizioni d'ingresso – Definire l'oracolo – Esercitare la componente – Confrontare i risultati con l'oracolo
  • 17. Test driver Si realizza mediante la scrittura di uno o più test cases class ArrayUtilsTest extends PHPUnit_Framework_TestCase { public function testSumArray() { $inputArray = [1, 2, 3]; $expected = 6; $arrayUtils = new ArrayUtils(); $actual = $arrayUtils->sumArray($inputArray); $this->assertEquals($expected, $actual); } }
  • 18. Stub e Mock Rimpiazzare le componenti reali con implementazioni fittizie. Stub: Simula il comportamento della componente reale. Mock: Stub + expectations.
  • 20. Esempio Stub class SubscriptionBuilderStub extends SubscriptionBuilder { public function __construct() {} // Overrides public function getSubscriptionFrom(Category $c, User $user) { return new Subscription(); } }
  • 21. Esempio Mock class SubscriptionBuilderMock extends SubscriptionBuilder { public $userArg; public function __construct() {} // Overrides public function getSubscriptionFrom(Category $c, User $user) { $this->userArg = $user; return new Subscription(); } public function checkExpectations($expectedUser) { return $this->userArg === $expectedUser; } }
  • 22. Prophecy Libreria inclusa in PHPUnit che semplifica l'implementazione di Stub e Mock Prophet Object Prophecy Method Prophecy Stub / Mock Check Predictions 1 * 1 * 1 1
  • 23. Prophecy function testWithStub() { $p = new ProphecyProphet(); $builderStub = $p->prophesize('SubscriptionBuilder'); $builderStub->getSubscriptionFrom(Argument::cetera()) ->willReturn(new Subscription()); $stub = $builderStub->reveal(); // ... }
  • 24. function testWithMock() { $p = new ProphecyProphet(); $user = new User(); $builderMock = $p->prophesize('SubscriptionBuilder'); $builderMock->getSubscriptionFrom(Argument::any(), $user) ->shouldBeCalledTimes(1) ->willReturn(new Subscription()); $mock = $builderMock->reveal(); // ... $p->checkPredictions(); } Prophecy
  • 25. Test Driven Development Cos'è? È una metodologia per lo sviluppo software con approccio Test-first. I test occupano una posizione predominante. “Come usare una componente?” Solo testing d'unità.
  • 28. Principi del TDD ● Si può aggiungere una nuova funzionalità solo quando c'è un test corrispondente che fallisce. ● Si può riparare un bug solo quando esso viene esercitato da un test che sta fallendo. ● Il Refactoring è l'unica operazione concessa con test verdi. Green - New features - Bug fixing - Refactoring Red
  • 29. Test Driven Development L'attività di sviluppo viene suddivisa in molte piccole iterazioni. Ogni iterazione è indipendente dalle altre. Problem Solution Partial solution Partial solution
  • 30. Iterazione TDD Comprendere, formalizzare il problema. Definire l'API. Rolvere il problema senza preoccuparsi del design.Migliorare la qualità del codice senza aggiungere nuove funzionalità.
  • 31. Iterazione TDD Quanto devono essere ampie le iterazioni? Molto soggettivo: – Comprensione del problema – Comprensione del sistema – Boldness Generalmente durano una manciata di minuti.
  • 32. Iterazione TDD Quante iterazioni? Almeno una iterazione per ogni caso d'uso della componente. Esempio: + * + = + - * + = - - * - = + 3 casi d'uso -> 3 iterazioni
  • 33. Esempio iterazioni TDD Problema: somma tra diverse valute. 1 € + 1 $ = ? It. 1: somma con un solo addendo It. 2: somma di addendi con la stessa valuta It. 3: somma di addendi con valuta differente
  • 34. Vantaggi TDD ● Forte comprensione del problema ● Continuo feedback, più boldness ● Risolvere il problema ≠ Design ● Be the user of your code! ● Divide et impera
  • 35. TDD nel ciclo di sviluppo Analisi del problema Analisi del sistema Design Alto livello TDD Functional Test Acceptance Test Problem System Implementation