SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Delphi & Dintorni Webinars
Webinar:
Diventa un mago del Testing!
Strumenti e tecniche per il Testing in Delphi
Delphi & Dintorni Webinars
begin
Delphi & Dintorni Webinars
Marco Breveglieri
Software and Web Developer,
Teacher and Consultant
@ABLS Team - Reggio Emilia, ITALY
Homepage https://www.breveglieri.it
Blog https://www.compilaquindiva.com
Delphi Podcast https://www.delphipodcast.com
Twitter @mbreveglieri
Delphi & Dintorni Webinars
Introduzione
Delphi & Dintorni Webinars
Agenda
● Il Testing: vantaggi e benefici, avvertenze per l’uso
● Unit Test, Integration Test e altri
● Creare Unit Test “come si deve”
● Mock, Stub e altri amici
● Uso di Test Framework
● Tool per il testing in Delphi
● Esperienze e conclusioni
● Q & A
Delphi & Dintorni Webinars
● Identificazione e risoluzione (preventiva) di bug nel software
● Semplificazione del mantenimento di codice “legacy”
● Incremento della fiducia dello sviluppatore nella qualità del proprio codice (e in quello degli altri)
● Forzatura del rispetto dei principi SOLID e altri pattern di buona architettura
● Controllo dei difetti di regressione nel rilascio di nuovo software
● Censimento dei casi di errore riscontrati dai clienti (ed evitare che si ripetano)
● Trampolino di lancio nell’uso di tecnologie avanzate di sviluppo (es. TDD)
● Abilitazione e soddisfazione requisiti per implementare Continuous Integration / Delivery
Benefici del Testing
Delphi & Dintorni Webinars
● Milioni di righe di codice vengono
testate in modo “automatizzato”
● Molte software house adottano
tecniche TDD (Test Driven
Development)
● Non è (o non dovrebbe essere) un
argomento nuovo, anzi...
Scettici?
Delphi & Dintorni Webinars
● Esistono regole per scrivere test “fatti
bene” che vanno rispettate
● Implementare test in modo errato può
portare più danni che benefici
● Scrivere test deve essere “divertente”
(nonostante le “deadline” incombenti)
● Possono richiedere più tempo per lo
sviluppo, ma è possibile recuperarlo
● Il codice deve essere testabile:
usate i principi SOLID!
Deve essere fatto nel modo corretto
Delphi & Dintorni Webinars
Obiettivo
Diventare
un... “mago”
del Testing!
Delphi & Dintorni Webinars
L’ABC
Delphi & Dintorni Webinars
Unit Test: una definizione
A Unit Test is a piece of code (usually a method) that invokes another
piece of code and checks the correctness of some assumptions afterward.
If the assumptions turn out to be wrong, the unit test has failed.
A «unit» is a method or function.
Delphi & Dintorni Webinars
Unit Test: la morfologia
Somma delle azioni che hanno
luogo invocando un metodo
pubblico del sistema sotto test
e producono un risultato finale
che può essere osservato.
Il risultato finale può essere
● un valore restituito dal metodo invocato se
è una funzione
● un cambiamento verificabile nello stato
dell’oggetto sottoposto a test
● la chiamata di un metodo su una
dipendenza dell’oggetto testato
Delphi & Dintorni Webinars
Caratteristiche di un buon Unit Test
● Automatizzato
● Ripetibile
● Consistente
● Facile
● Accessibile
● Riutilizzabile
● Veloce
● Onnipotente
(rispetto al sistema sottoposto a test)
Delphi & Dintorni Webinars
Integration Test
Integration testing is testing a unit of
work with one or more of its real
dependencies such as time, network,
database, or code you cannot control
such as threads and random number
generators.
Delphi & Dintorni Webinars
Le differenze
Unit Testing
● Dipendenze isolate e simulate
● Nessun setup richiesto
● Nessun cleanup necessario
● Devono essere tanti
● Devono essere veloci
Integration Testing
● Dipendenze concrete (solo alcune)
● Possibile inizializzazione necessaria
● Possibile cleanup richiesto
● Sono meno rispetto agli Unit Test
● Possono essere più lenti
Entrambi sono necessari
Delphi & Dintorni Webinars
The Pyramid
of Tests
Per approfondimento:
https://martinfowler.com/articles/practical-test-pyramid.html
Delphi & Dintorni Webinars
Unit Test vs Integration Test
Delphi & Dintorni Webinars
Unit Test vs Integration Test
Delphi & Dintorni Webinars
Unit Test vs Integration Test
Delphi & Dintorni Webinars
Unit Test a regola d’arte
Delphi & Dintorni Webinars
Il più semplice
degli Unit Test
Rapido, immediato e pratico,
ma forse poco versatile e professionale. 😅
Delphi & Dintorni Webinars
Ma forse è meglio
usare tool più
specifici...
ad esempio
● Test Framework
○ DUnit, DUnit2
○ DUnitX 👈
● Test Tools
○ TestInsight 👈
Delphi & Dintorni Webinars
Test Framework
E’ indispensabile adoperare un Test Framework.
NOTA: le versioni recenti di Delphi (es. 10.3 Rio)
sono equipaggiate con DUnitX.
● Consente di dare una struttura ai test
● Rende i test automatizzati e ripetibili
● Riduce gli errori nel codice dei test
● Produce un rendiconto dell’esito dei test
● Fornisce all’occorrenza una GUI
● Può fornire (o meno) supporto alla gestione
delle dipendenze del sistema sotto test
● Può dialogare con l’eventuale sistema di
Continuous Integration & Delivery
Delphi & Dintorni Webinars
Demo
Vediamo assieme
● un package di esempio
● un progetto di test con DUnitX
● esempi di Unit Testing
Delphi & Dintorni Webinars
Piccolo glossario
● Test Fixture / Test Suite / Test Class:
classe che raggruppa una serie di test
● Setup (Method): metodo che inizializza il
sistema per l’esecuzione di un test
● TearDown (Method): metodo che finalizza
il sistema dopo l’esecuzione di un test
● Test (Method) o Test Case: metodo che
implementa un test specifico (lo Unit Test!)
Delphi & Dintorni Webinars
Unit Test: le azioni
1. Assign
Creiamo gli oggetti e assegnamo
i valori iniziali alle variabili
2. Act
Agiamo sull’oggetto sottoposto a test
(es. chiamiamo un metodo)
3. Assert
Verifichiamo che qualcosa corrisponda
a quello che ci attendiamo
Delphi & Dintorni Webinars
Unit Test: le regole di base
● Attribuire al test un nome significativo
● Seguire una convenzione nel naming
● Non eseguire più di una asserzione
● Non usare valori apparentemente insoliti
● Non introdurre logica complessa nel test
(Cyclomatic Complexity = 1)
● Non dipendere mai da un test precedente
Delphi & Dintorni Webinars
Come faccio se l’oggetto da
testare ha delle dipendenze?
Un momento...
Delphi & Dintorni Webinars
Dipendenza
“Una dipendenza esterna è un oggetto del sistema con cui il codice
sottoposto a test interagisce e sul quale non ha controllo”.
● File System
● Network
● Database
● I/O
(in breve qualsiasi implementazione…)
Delphi & Dintorni Webinars
Stub alla riscossa!
Lo stub è un oggetto “controllabile”
che sostituisce una dipendenza reale.
● Restituisce valori alla classe sotto test
● Contiene una implementazione parziale
● I valori restituiti sono quelli che forniscono
la risposta attesa per l’asserzione che si
intende verificare
Delphi & Dintorni Webinars
Demo
Vediamo assieme
● un nuovo package
● un nuovo progetto di test con DUnitX
● come usare gli “stub”
Delphi & Dintorni Webinars
E se io volessi verificare delle
asserzioni basate su come
l’oggetto interagisce con altri,
ad esempio le dipendenze?
Un momento...
Delphi & Dintorni Webinars
State-Based
Testing
Il controllo dell’esito del test si basa sullo
stato finale dell’oggetto coinvolto
(result driven).
● L’erba del prato è verde?
● La terra è sufficientemente umida?
Delphi & Dintorni Webinars
Interaction-Based
Testing
Il controllo dell’esito del test si basa sulla
interazione con oggetti che ricevono input
o forniscono output (action driven).
● Quante volte viene irrigato il campo in
un lasso di tempo?
● Quanta acqua viene erogata ogni volta?
Delphi & Dintorni Webinars
Mock alla riscossa!
Il mock è un oggetto che interagisce
con il sistema sotto test e indica se il
test è stato superato oppure no.
● Attende di essere coinvolto dall’oggetto
sottoposto a test
● Può subire la chiamata a uno o più metodi
● Verifica di essere usato in modo corretto
ATTENZIONE: ogni test dovrà usare uno e un solo mock!
Delphi & Dintorni Webinars
Demo
Vediamo assieme
● come creare e usare “mock”
Delphi & Dintorni Webinars
Scrivere “fake” è faticoso
● Scrivere il codice delle classi può richiedere
molto tempo
● Le classi possono diventare complesse
all’aumentare del numero di condizioni da
verificare
● Le classi di stub/mock possono diventare
molto numerose, non riutilizzabili e
ingestibili
● Possono compromettere l’efficacia del test
Per fortuna, c’è una soluzione!
Delphi & Dintorni Webinars
Isolation Framework
Sono librerie e package che offrono oggetti
“programmabili” in grado di
● aiutare nella creazione di Fake (ossia Mock e
Stub) in modo semplice
● sollevare lo sviluppatore dall’onere di
scriverne il codice
● acquisire informazioni sulle interazioni
previste (in caso di Mock) e fare asserzioni
Delphi & Dintorni Webinars
Demo
Vediamo assieme
● come funziona Delphi Mocks, uno degli
Isolation Framework disponibili
● come sostituirlo ai Fake “fatti in casa”
nel nostro progetto di test
Delphi & Dintorni Webinars
Conclusioni
Delphi & Dintorni Webinars
Testare bene conviene!
● Forza la scrittura di codice semplice, manutenibile e verificato
● Aumenta la confidenza nel tuo codice e in quello degli altri
● Consente di “giocare d’anticipo” verificando i bug prima che li scopra il cliente
● E’ una tecnica abilitante per metodologie e architettura (ne accenniamo alcune):
○ Continuous Integration
○ Continuous Delivery
○ Interfacciamento a Scrum, Agile e Kanban Board
○ TDD
● Per librerie e framework, è (quasi) indispensabile
○ Gli utenti orientano le scelte in base alla presenza o meno di testing
Raccontate la vostra esperienza!
Delphi & Dintorni Webinars
Tool e librerie
● DUnitX (Test Framework)
https://github.com/VSoftTechnologies/DUnitX
● TestInsight (IDE Test GUI Tool)
https://bitbucket.org/sglienke/testinsight/wiki/Home
● Delphi Mocks (Isolation Framework)
https://github.com/VSoftTechnologies/Delphi-Mocks
● Spring4D - Mocks (Isolation Framework)
http://www.spring4d.org/
Delphi & Dintorni Webinars
Risorse e approfondimenti
● Libro “The Art of Unit Testing” di Roy Osherove
https://www.artofunittesting.com/
● Libro “Unit Testing Succinctly” di Marc Clifton
https://www.syncfusion.com/ebooks/unittesting
● Post “The Practical Test Pyramid” di Martin Fowler
https://martinfowler.com/articles/practical-test-pyramid.html
Delphi & Dintorni Webinars
Q & A
Domande?
Delphi & Dintorni Webinars
end;

Weitere ähnliche Inhalte

Was ist angesagt?

Introduzione alla localizzazione web
Introduzione alla localizzazione webIntroduzione alla localizzazione web
Introduzione alla localizzazione webQabiria
 
Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?Flavius-Florin Harabor
 
Faccio cose. Vedo gente. Localizzo siti.
Faccio cose. Vedo gente. Localizzo siti.Faccio cose. Vedo gente. Localizzo siti.
Faccio cose. Vedo gente. Localizzo siti.Qabiria
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Eugenio Minardi
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
CAT tool a confronto
CAT tool a confrontoCAT tool a confronto
CAT tool a confrontoQabiria
 
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Marco Parenzan
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptSinergia Totale
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On RailsLuca Mearelli
 

Was ist angesagt? (16)

Introduzione alla localizzazione web
Introduzione alla localizzazione webIntroduzione alla localizzazione web
Introduzione alla localizzazione web
 
Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?
 
Faccio cose. Vedo gente. Localizzo siti.
Faccio cose. Vedo gente. Localizzo siti.Faccio cose. Vedo gente. Localizzo siti.
Faccio cose. Vedo gente. Localizzo siti.
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Kotlin hexagonal-architecture
Kotlin hexagonal-architectureKotlin hexagonal-architecture
Kotlin hexagonal-architecture
 
8. Architetture web
8. Architetture web8. Architetture web
8. Architetture web
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
 
Angularjs
AngularjsAngularjs
Angularjs
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
CAT tool a confronto
CAT tool a confrontoCAT tool a confronto
CAT tool a confronto
 
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Javascript Unit Testing
Javascript Unit TestingJavascript Unit Testing
Javascript Unit Testing
 
Introduzione a Ruby On Rails
Introduzione a Ruby On RailsIntroduzione a Ruby On Rails
Introduzione a Ruby On Rails
 

Ähnlich wie Delphi & Dintorni Webinar - Diventa un mago del Testing

Una fugace occhiata al Test Driven Development (2006)
Una fugace occhiata al Test Driven Development  (2006)Una fugace occhiata al Test Driven Development  (2006)
Una fugace occhiata al Test Driven Development (2006)Roberto Bettazzoni
 
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiMarco Breveglieri
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaXPeppers
 
L'Occhio di Ra sul Testing
L'Occhio di Ra sul TestingL'Occhio di Ra sul Testing
L'Occhio di Ra sul TestingFelice Pescatore
 
Software Testing & Test Driven Development
Software Testing & Test Driven DevelopmentSoftware Testing & Test Driven Development
Software Testing & Test Driven DevelopmentSergio Santoro
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good partsMassimo Groppelli
 
PASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerPASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerAlessandro Alpi
 
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
 
MuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdfMuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdfFlorence Consulting
 

Ähnlich wie Delphi & Dintorni Webinar - Diventa un mago del Testing (20)

Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
 
Software Testing e TDD
Software Testing e TDDSoftware Testing e TDD
Software Testing e TDD
 
Una fugace occhiata al Test Driven Development (2006)
Una fugace occhiata al Test Driven Development  (2006)Una fugace occhiata al Test Driven Development  (2006)
Una fugace occhiata al Test Driven Development (2006)
 
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
 
Unit test
Unit testUnit test
Unit test
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
L'Occhio di Ra sul Testing
L'Occhio di Ra sul TestingL'Occhio di Ra sul Testing
L'Occhio di Ra sul Testing
 
Software Testing & Test Driven Development
Software Testing & Test Driven DevelopmentSoftware Testing & Test Driven Development
Software Testing & Test Driven Development
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good parts
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Tesi di Laurea
Tesi di LaureaTesi di Laurea
Tesi di Laurea
 
Total Testing in DevOps
Total Testing in DevOpsTotal Testing in DevOps
Total Testing in DevOps
 
PASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerPASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL Server
 
Workshop: Introduzione ad TDD
Workshop: Introduzione ad TDDWorkshop: Introduzione ad TDD
Workshop: Introduzione ad TDD
 
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
 
TDD Casi Studio
TDD Casi StudioTDD Casi Studio
TDD Casi Studio
 
Testing
TestingTesting
Testing
 
MuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdfMuleSoft_Meetup__Official__8_.pdf
MuleSoft_Meetup__Official__8_.pdf
 

Mehr von Marco Breveglieri

Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...Marco Breveglieri
 
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in DelphiMarco Breveglieri
 
Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Marco Breveglieri
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Marco Breveglieri
 
Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"Marco Breveglieri
 

Mehr von Marco Breveglieri (6)

Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
Does The Delphi IDE Narrow You? Extend It! - ITDevConX European Delphi Confer...
 
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in Delphi
 
Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016Create a Bot with Delphi and Telegram - ITDevCon 2016
Create a Bot with Delphi and Telegram - ITDevCon 2016
 
Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
 
Reportage Delphi Day 2012
Reportage Delphi Day 2012Reportage Delphi Day 2012
Reportage Delphi Day 2012
 
Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"Reportage "RAD Studio XE2 World Tour"
Reportage "RAD Studio XE2 World Tour"
 

Delphi & Dintorni Webinar - Diventa un mago del Testing

  • 1. Delphi & Dintorni Webinars Webinar: Diventa un mago del Testing! Strumenti e tecniche per il Testing in Delphi
  • 2. Delphi & Dintorni Webinars begin
  • 3. Delphi & Dintorni Webinars Marco Breveglieri Software and Web Developer, Teacher and Consultant @ABLS Team - Reggio Emilia, ITALY Homepage https://www.breveglieri.it Blog https://www.compilaquindiva.com Delphi Podcast https://www.delphipodcast.com Twitter @mbreveglieri
  • 4. Delphi & Dintorni Webinars Introduzione
  • 5. Delphi & Dintorni Webinars Agenda ● Il Testing: vantaggi e benefici, avvertenze per l’uso ● Unit Test, Integration Test e altri ● Creare Unit Test “come si deve” ● Mock, Stub e altri amici ● Uso di Test Framework ● Tool per il testing in Delphi ● Esperienze e conclusioni ● Q & A
  • 6. Delphi & Dintorni Webinars ● Identificazione e risoluzione (preventiva) di bug nel software ● Semplificazione del mantenimento di codice “legacy” ● Incremento della fiducia dello sviluppatore nella qualità del proprio codice (e in quello degli altri) ● Forzatura del rispetto dei principi SOLID e altri pattern di buona architettura ● Controllo dei difetti di regressione nel rilascio di nuovo software ● Censimento dei casi di errore riscontrati dai clienti (ed evitare che si ripetano) ● Trampolino di lancio nell’uso di tecnologie avanzate di sviluppo (es. TDD) ● Abilitazione e soddisfazione requisiti per implementare Continuous Integration / Delivery Benefici del Testing
  • 7. Delphi & Dintorni Webinars ● Milioni di righe di codice vengono testate in modo “automatizzato” ● Molte software house adottano tecniche TDD (Test Driven Development) ● Non è (o non dovrebbe essere) un argomento nuovo, anzi... Scettici?
  • 8. Delphi & Dintorni Webinars ● Esistono regole per scrivere test “fatti bene” che vanno rispettate ● Implementare test in modo errato può portare più danni che benefici ● Scrivere test deve essere “divertente” (nonostante le “deadline” incombenti) ● Possono richiedere più tempo per lo sviluppo, ma è possibile recuperarlo ● Il codice deve essere testabile: usate i principi SOLID! Deve essere fatto nel modo corretto
  • 9. Delphi & Dintorni Webinars Obiettivo Diventare un... “mago” del Testing!
  • 10. Delphi & Dintorni Webinars L’ABC
  • 11. Delphi & Dintorni Webinars Unit Test: una definizione A Unit Test is a piece of code (usually a method) that invokes another piece of code and checks the correctness of some assumptions afterward. If the assumptions turn out to be wrong, the unit test has failed. A «unit» is a method or function.
  • 12. Delphi & Dintorni Webinars Unit Test: la morfologia Somma delle azioni che hanno luogo invocando un metodo pubblico del sistema sotto test e producono un risultato finale che può essere osservato. Il risultato finale può essere ● un valore restituito dal metodo invocato se è una funzione ● un cambiamento verificabile nello stato dell’oggetto sottoposto a test ● la chiamata di un metodo su una dipendenza dell’oggetto testato
  • 13. Delphi & Dintorni Webinars Caratteristiche di un buon Unit Test ● Automatizzato ● Ripetibile ● Consistente ● Facile ● Accessibile ● Riutilizzabile ● Veloce ● Onnipotente (rispetto al sistema sottoposto a test)
  • 14. Delphi & Dintorni Webinars Integration Test Integration testing is testing a unit of work with one or more of its real dependencies such as time, network, database, or code you cannot control such as threads and random number generators.
  • 15. Delphi & Dintorni Webinars Le differenze Unit Testing ● Dipendenze isolate e simulate ● Nessun setup richiesto ● Nessun cleanup necessario ● Devono essere tanti ● Devono essere veloci Integration Testing ● Dipendenze concrete (solo alcune) ● Possibile inizializzazione necessaria ● Possibile cleanup richiesto ● Sono meno rispetto agli Unit Test ● Possono essere più lenti Entrambi sono necessari
  • 16. Delphi & Dintorni Webinars The Pyramid of Tests Per approfondimento: https://martinfowler.com/articles/practical-test-pyramid.html
  • 17. Delphi & Dintorni Webinars Unit Test vs Integration Test
  • 18. Delphi & Dintorni Webinars Unit Test vs Integration Test
  • 19. Delphi & Dintorni Webinars Unit Test vs Integration Test
  • 20. Delphi & Dintorni Webinars Unit Test a regola d’arte
  • 21. Delphi & Dintorni Webinars Il più semplice degli Unit Test Rapido, immediato e pratico, ma forse poco versatile e professionale. 😅
  • 22. Delphi & Dintorni Webinars Ma forse è meglio usare tool più specifici... ad esempio ● Test Framework ○ DUnit, DUnit2 ○ DUnitX 👈 ● Test Tools ○ TestInsight 👈
  • 23. Delphi & Dintorni Webinars Test Framework E’ indispensabile adoperare un Test Framework. NOTA: le versioni recenti di Delphi (es. 10.3 Rio) sono equipaggiate con DUnitX. ● Consente di dare una struttura ai test ● Rende i test automatizzati e ripetibili ● Riduce gli errori nel codice dei test ● Produce un rendiconto dell’esito dei test ● Fornisce all’occorrenza una GUI ● Può fornire (o meno) supporto alla gestione delle dipendenze del sistema sotto test ● Può dialogare con l’eventuale sistema di Continuous Integration & Delivery
  • 24. Delphi & Dintorni Webinars Demo Vediamo assieme ● un package di esempio ● un progetto di test con DUnitX ● esempi di Unit Testing
  • 25. Delphi & Dintorni Webinars Piccolo glossario ● Test Fixture / Test Suite / Test Class: classe che raggruppa una serie di test ● Setup (Method): metodo che inizializza il sistema per l’esecuzione di un test ● TearDown (Method): metodo che finalizza il sistema dopo l’esecuzione di un test ● Test (Method) o Test Case: metodo che implementa un test specifico (lo Unit Test!)
  • 26. Delphi & Dintorni Webinars Unit Test: le azioni 1. Assign Creiamo gli oggetti e assegnamo i valori iniziali alle variabili 2. Act Agiamo sull’oggetto sottoposto a test (es. chiamiamo un metodo) 3. Assert Verifichiamo che qualcosa corrisponda a quello che ci attendiamo
  • 27. Delphi & Dintorni Webinars Unit Test: le regole di base ● Attribuire al test un nome significativo ● Seguire una convenzione nel naming ● Non eseguire più di una asserzione ● Non usare valori apparentemente insoliti ● Non introdurre logica complessa nel test (Cyclomatic Complexity = 1) ● Non dipendere mai da un test precedente
  • 28. Delphi & Dintorni Webinars Come faccio se l’oggetto da testare ha delle dipendenze? Un momento...
  • 29. Delphi & Dintorni Webinars Dipendenza “Una dipendenza esterna è un oggetto del sistema con cui il codice sottoposto a test interagisce e sul quale non ha controllo”. ● File System ● Network ● Database ● I/O (in breve qualsiasi implementazione…)
  • 30. Delphi & Dintorni Webinars Stub alla riscossa! Lo stub è un oggetto “controllabile” che sostituisce una dipendenza reale. ● Restituisce valori alla classe sotto test ● Contiene una implementazione parziale ● I valori restituiti sono quelli che forniscono la risposta attesa per l’asserzione che si intende verificare
  • 31. Delphi & Dintorni Webinars Demo Vediamo assieme ● un nuovo package ● un nuovo progetto di test con DUnitX ● come usare gli “stub”
  • 32. Delphi & Dintorni Webinars E se io volessi verificare delle asserzioni basate su come l’oggetto interagisce con altri, ad esempio le dipendenze? Un momento...
  • 33. Delphi & Dintorni Webinars State-Based Testing Il controllo dell’esito del test si basa sullo stato finale dell’oggetto coinvolto (result driven). ● L’erba del prato è verde? ● La terra è sufficientemente umida?
  • 34. Delphi & Dintorni Webinars Interaction-Based Testing Il controllo dell’esito del test si basa sulla interazione con oggetti che ricevono input o forniscono output (action driven). ● Quante volte viene irrigato il campo in un lasso di tempo? ● Quanta acqua viene erogata ogni volta?
  • 35. Delphi & Dintorni Webinars Mock alla riscossa! Il mock è un oggetto che interagisce con il sistema sotto test e indica se il test è stato superato oppure no. ● Attende di essere coinvolto dall’oggetto sottoposto a test ● Può subire la chiamata a uno o più metodi ● Verifica di essere usato in modo corretto ATTENZIONE: ogni test dovrà usare uno e un solo mock!
  • 36. Delphi & Dintorni Webinars Demo Vediamo assieme ● come creare e usare “mock”
  • 37. Delphi & Dintorni Webinars Scrivere “fake” è faticoso ● Scrivere il codice delle classi può richiedere molto tempo ● Le classi possono diventare complesse all’aumentare del numero di condizioni da verificare ● Le classi di stub/mock possono diventare molto numerose, non riutilizzabili e ingestibili ● Possono compromettere l’efficacia del test Per fortuna, c’è una soluzione!
  • 38. Delphi & Dintorni Webinars Isolation Framework Sono librerie e package che offrono oggetti “programmabili” in grado di ● aiutare nella creazione di Fake (ossia Mock e Stub) in modo semplice ● sollevare lo sviluppatore dall’onere di scriverne il codice ● acquisire informazioni sulle interazioni previste (in caso di Mock) e fare asserzioni
  • 39. Delphi & Dintorni Webinars Demo Vediamo assieme ● come funziona Delphi Mocks, uno degli Isolation Framework disponibili ● come sostituirlo ai Fake “fatti in casa” nel nostro progetto di test
  • 40. Delphi & Dintorni Webinars Conclusioni
  • 41. Delphi & Dintorni Webinars Testare bene conviene! ● Forza la scrittura di codice semplice, manutenibile e verificato ● Aumenta la confidenza nel tuo codice e in quello degli altri ● Consente di “giocare d’anticipo” verificando i bug prima che li scopra il cliente ● E’ una tecnica abilitante per metodologie e architettura (ne accenniamo alcune): ○ Continuous Integration ○ Continuous Delivery ○ Interfacciamento a Scrum, Agile e Kanban Board ○ TDD ● Per librerie e framework, è (quasi) indispensabile ○ Gli utenti orientano le scelte in base alla presenza o meno di testing Raccontate la vostra esperienza!
  • 42. Delphi & Dintorni Webinars Tool e librerie ● DUnitX (Test Framework) https://github.com/VSoftTechnologies/DUnitX ● TestInsight (IDE Test GUI Tool) https://bitbucket.org/sglienke/testinsight/wiki/Home ● Delphi Mocks (Isolation Framework) https://github.com/VSoftTechnologies/Delphi-Mocks ● Spring4D - Mocks (Isolation Framework) http://www.spring4d.org/
  • 43. Delphi & Dintorni Webinars Risorse e approfondimenti ● Libro “The Art of Unit Testing” di Roy Osherove https://www.artofunittesting.com/ ● Libro “Unit Testing Succinctly” di Marc Clifton https://www.syncfusion.com/ebooks/unittesting ● Post “The Practical Test Pyramid” di Martin Fowler https://martinfowler.com/articles/practical-test-pyramid.html
  • 44. Delphi & Dintorni Webinars Q & A Domande?
  • 45. Delphi & Dintorni Webinars end;