SlideShare a Scribd company logo
Unit test
Dai test manuali al continuous testing
ARGOMENTO
2
Agenda
1
Introduzione
1. Pattern test
2
TDD
1. Dall’approccio tradizionale al
testing
3
Unit e Integration Test
1. Mock, stubs, fake
2. Esempi prativi
4
Continuous testing
3
Presentazione
@ATosato86
andreatosato
andreatosato
ANDREA TOSATO
4
Svantaggi
• Richiede molto tempo di sviluppo (tempo = costo!)
• Richiede enorme pazienza al team di sviluppo
• Necessita di una rigorosa documentazione
• Non è possibile testare tutti gli input e gli scenari
come nel mondo reale
5
Costo degli errori
6
Costo dei test
7
Costo dei test
8
Costo dei test
Rampa creata in tempo e nel budget!
9
Ciclo di vita del codice
• Unit test è un segmento di
codice utilizzato per testare un
pezzo di codice applicativo
• Verifica se il codice:
o Rispetta i requisiti e il design
o Si comporta come previsto
o Aiuta a identificare gli
algoritmi e lo logiche errate
10
I componenti fondamenti di un test
• Il test deve essere leggibile
• Il test deve essere veritiero
• Il test deve essere mantenibile
• Il test deve essere ISOLATO
• Il test deve essere veloce
• Il test si deve documentare da se (nomenclatura)
• Il test non deve contenere logica
11
Manual vs Automated
• Test automatizzati
 Decrementano
drammaticamente il numero di
difetti del codice
 Migliorano il disegno app.
 Sono una buona
documentazione
 Riducono il costo ai
cambiamenti
 Consento refactoring
• Test manuali
Richiede una persona
designata ai test ad ogni
release
Meno efficiente
Non strutturato
Non ripetibile
Non comprensibile
rispetto al codice
12
Tipi di test
End to end (black-box)
Difficili da scrivere e da eseguire.
Riscontrano malfunzionamenti grafici
Functional test
Semplici da scrivere
Trovano bug di media importanza
Unit test
Semplici da scrivere
Trovano bug di logica
14
Tipi di test
TDD
ARGOMENTO
16
Approcci
Approccio Tradizionale
Test Drive Development
17
TDD
• Stile di sviluppo/ progettazione
• Non è una tecnica di testing.
• La programmazione e lo unit test non sono attività
separate.
Si scrive prima un test che fallisce, e poi si scrive il relativo codice.
Differisce dagli approcci tradizionali, in cui prima si scrive il codice e poi (forse) lo si testa.
18
Vantaggi del TDD
• Permette di scrivere software migliore e più rapidamente
(costruendo software in piccoli incrementi- 1 test alla volta)
• Evita il procedere per tentativi
• Produce codice pulito e che funziona (in modo opposto allo
sviluppo architecture driven, in cui si fanno prima tutte le
decisioni).
• Consente agli sviluppatori di produrre un insieme di test di
regressione automatizzabili, man mano che sviluppano.
• Riduce il tempo per la correzione dei difetti
19
Costo dei test
La fatica ripaga
20
Acceptance test
Si trasformano i requisiti applicativi in test eseguibili.
21
Red/Green/Refactor pattern
Red Scrivi un Test che fallisce.
Green Scrivi il codice per soddisfare il test.
Refactor Migliora il codice senza cambiarne la
funzionalità.
Ripeti.
22
AAA pattern
• Arrange
Creazione dell’ambiente applicativo che
si vuole testare.
• Act
Esecuzione del codice che si vuole
testare
• Assert
Verifica e validazione dei risultati
ottenuti
[TestMethod]
public void NoNewMessages()
{
//Arrange
Mailbox mailbox = new Mailbox();
//Act
var result = mailbox.GetCount(0);
//Assert
Assert.AreEqual("No new messages.", result);
}
23
Refactoring
Eliminare codice duplicato
Migliorarne l’espressività
Riduzione accoppiamento e migliora il codice
Dopo il Refactoring, i test vanno rieseguiti.
Unit test
ARGOMENTO
25
Unit test
Non è Unit Test se:
• comunica con il database
• comunica in rete o servizi terze parti
• non può essere lanciato in parallelo ad altri test
• utilizza il filesystem
26
Unit test
Unit Test se:
• non comunica con il database
• non comunica in rete o servizi terze parti
• può essere lanciato in parallelo ad altri test
• non utilizza il filesystem
• dovrebbe durare massimo 1 secondo
27
Unit test
Inoltre…
• Scritto ed eseguito dai sviluppatori
• Obiettivo: separare ciascuna parte e testare singolarmente
• Eseguito prima delle integrazioni
• Considera di utilizzare dei White-Box
• IntelliTest https://www.microsoft.com/en-us/research/project/pex-and-moles-isolation-and-white-box-unit-testing-for-net/
• Utilizza le asserzioni per verificare le esecuzioni del codice
28
Unit test
Non solo Unit Test!
Click to edit Master title style
Demo
Unit - Test
Click to edit Master title style
Demo
Code Coverage
Integration test
ARGOMENTO
32
Integration test
33
Unit test
In casa Microsoft - Martin Woodward
Mock - Stubs
ARGOMENTO
Un aiuto agli integration test
35
Nomenclatura
Stubs (variante test doubles)
Fornisce un comportamento fissato (metodi che tornano
sempre lo stesso valore).
Viene usato per controllare l'"input indiretto" del codice sotto
test.
36
Nomenclatura
Mock (variante spy)
Memorizza esplicitamente le aspettative sul comportamento del
codice sotto test, e verificare lo stato.
Comportamento programmabile, che simula quello
dell'oggetto reale
37
Mock vs Stub
In genere lo stub è molto più semplice di un Mock-Object.
Gli stub forniscono risposte preconfezionate, e nulla che sia al di
fuori di ciò che è previsto per il test.
I mock hanno implementazioni più sofisticate che consentono di
verificare il comportamento dell’unità testata (e non solo lo stato)
verificando ad esempio le collaborazioni avute con altri oggetti
ed il relativo ordine di esecuzione. Possono verificare se l’oggetto
che li usa lo fa correttamente. Testano unità senza legarsi ad
oggetti esterni.
38
La classe Client (da testare) usa i metodi di Helper.
Vogliamo controllare direttamente ciò che Helper restituisce a Client
Click to edit Master title style
Demo
Moq
40
Framework & tools
Functional o
Application Test
ARGOMENTO
Click to edit Master title style
Demo
43
Continuous testing
È una pratica di sviluppo software in cui i membri del team di
sviluppo integrano il proprio lavoro frequentemente, almeno una
volta al giorno. Ogni integrazione è verificata da strumenti
automatici che eseguono il build e riesegueno tutti i test sulla
nuova configurazione, per trovare errori di integrazione
rapidamente.
Click to edit Master title style
Demo
VSTS – continuous testing
45
Costo dei test
La fatica ripaga!
46
Altri temi sul testing
• UI testing
• Selenium
• Test client-side
• Jasmine
• Protractor (end-to-end)
• SQL testing https://www.red-gate.com/blog/database-development/dont-unit-test-sql-server-code/amp
47
Grazie
Domande?
cloudgenverona @cloudgen_verona CloudGen Verona

More Related Content

PPTX
Unit Test di Gabriele Seroni
Giuneco S.r.l
 
PDF
Software Testing e TDD
Domenico Briganti
 
ODP
TDD Casi Studio
Daniele Demichelis
 
PDF
TDD patterns and TDD strategies
Alessandro Ceseno
 
PDF
Android Test Driven Development
sazilla
 
PPTX
Unit testing 2014
Giacomo Petronio
 
ODP
Testing
Domenico Briganti
 
ODP
Workshop: Introduzione ad TDD
Marcello Missiroli
 
Unit Test di Gabriele Seroni
Giuneco S.r.l
 
Software Testing e TDD
Domenico Briganti
 
TDD Casi Studio
Daniele Demichelis
 
TDD patterns and TDD strategies
Alessandro Ceseno
 
Android Test Driven Development
sazilla
 
Unit testing 2014
Giacomo Petronio
 
Workshop: Introduzione ad TDD
Marcello Missiroli
 

What's hot (18)

PDF
TTT - Test, Tools and Tips - jug roma
diego mauricio lagos morales
 
PPT
Test automatizzati & serenity bdd
diego mauricio lagos morales
 
PPT
Introduzione al Test Driven Development
Ennio Masi
 
PDF
05 unit testing
Federico Russo
 
PPTX
Unit test
Roberto Cappelletti
 
PDF
Unit Testing
Giacomo Petronio
 
PDF
Software Testing & Test Driven Development
Sergio Santoro
 
ODP
Unit testing 101
Daniel Londero
 
PPTX
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Emerasoft, solutions to collaborate
 
PDF
Test Driven Development for iOS
Alessandro Ceseno
 
ODP
Linux Day 20091024 Test Driven Development
Roberto Albertini
 
PPTX
PowerMock TDD User Group Milano
Massimo Groppelli
 
PPT
Detailed Model Capture
fcospito
 
PPTX
Dependency injection: the good parts
Massimo Groppelli
 
PDF
Java Unit Testing - JUnit (1)
fgianneschi
 
PPT
Unit Testing Mockito
Luca S Lopomo
 
PDF
Le pratiche ingegneristiche di eXtreme Programming
Andrea Francia
 
PDF
Java Unit Testing - JUnit (2)
fgianneschi
 
TTT - Test, Tools and Tips - jug roma
diego mauricio lagos morales
 
Test automatizzati & serenity bdd
diego mauricio lagos morales
 
Introduzione al Test Driven Development
Ennio Masi
 
05 unit testing
Federico Russo
 
Unit Testing
Giacomo Petronio
 
Software Testing & Test Driven Development
Sergio Santoro
 
Unit testing 101
Daniel Londero
 
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Emerasoft, solutions to collaborate
 
Test Driven Development for iOS
Alessandro Ceseno
 
Linux Day 20091024 Test Driven Development
Roberto Albertini
 
PowerMock TDD User Group Milano
Massimo Groppelli
 
Detailed Model Capture
fcospito
 
Dependency injection: the good parts
Massimo Groppelli
 
Java Unit Testing - JUnit (1)
fgianneschi
 
Unit Testing Mockito
Luca S Lopomo
 
Le pratiche ingegneristiche di eXtreme Programming
Andrea Francia
 
Java Unit Testing - JUnit (2)
fgianneschi
 
Ad

Similar to Unit Testing (20)

PPTX
PASS Virtual Chapter - Unit Testing su SQL Server
Alessandro Alpi
 
PPTX
Fe05 test drivenjavascriptdevelopment
DotNetCampus
 
PDF
Agileday2013 pratiche agili applicate all'infrastruttura
XPeppers
 
PDF
Delphi & Dintorni Webinar - Diventa un mago del Testing
Marco Breveglieri
 
PPTX
L'Occhio di Ra sul Testing
Felice Pescatore
 
PPTX
CONTINUOUS INTEGRATION CON SQL SERVER
DotNetCampus
 
PPTX
DotNetCampus - Continuous Integration con Sql Server
Alessandro Alpi
 
PDF
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Boymix81
 
PPT
Detailed Model Capture
fcospito
 
KEY
A brief intro to TDD for a JUG-TAA event
Pietro Di Bello
 
PDF
Una fugace occhiata al Test Driven Development (2006)
Roberto Bettazzoni
 
PDF
Java Unit Testing - Introduction
fgianneschi
 
PPTX
PASS Virtual Chapter - SQL Server Continuous Integration
Alessandro Alpi
 
PPTX
Unit testing in Visual Studio 2013
DomusDotNet
 
PPTX
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
Alessandro Alpi
 
PDF
Clean programming 2020-01-25 @ Modena Tech Summit
Davide Muzzarelli
 
PDF
Android Test Driven Development
sazilla
 
PPTX
Test Driven Development @ Xe.Net
Mauro Servienti
 
PPTX
Introduzione ai Coded UI Tests
Pietro Libro
 
PASS Virtual Chapter - Unit Testing su SQL Server
Alessandro Alpi
 
Fe05 test drivenjavascriptdevelopment
DotNetCampus
 
Agileday2013 pratiche agili applicate all'infrastruttura
XPeppers
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Marco Breveglieri
 
L'Occhio di Ra sul Testing
Felice Pescatore
 
CONTINUOUS INTEGRATION CON SQL SERVER
DotNetCampus
 
DotNetCampus - Continuous Integration con Sql Server
Alessandro Alpi
 
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Boymix81
 
Detailed Model Capture
fcospito
 
A brief intro to TDD for a JUG-TAA event
Pietro Di Bello
 
Una fugace occhiata al Test Driven Development (2006)
Roberto Bettazzoni
 
Java Unit Testing - Introduction
fgianneschi
 
PASS Virtual Chapter - SQL Server Continuous Integration
Alessandro Alpi
 
Unit testing in Visual Studio 2013
DomusDotNet
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
Alessandro Alpi
 
Clean programming 2020-01-25 @ Modena Tech Summit
Davide Muzzarelli
 
Android Test Driven Development
sazilla
 
Test Driven Development @ Xe.Net
Mauro Servienti
 
Introduzione ai Coded UI Tests
Pietro Libro
 
Ad

More from Andrea Tosato (20)

PPTX
Codemotion Azure Container Apps
Andrea Tosato
 
PPTX
Lite db for dummies
Andrea Tosato
 
PDF
Azure Static Web Apps & Blazor
Andrea Tosato
 
PPTX
Dapr logicapps
Andrea Tosato
 
PPTX
How to develop modern web application, with no money and nod javascript
Andrea Tosato
 
PPTX
Entity framework core v3 from sql to no sql
Andrea Tosato
 
PDF
How to develop modern web application - With no money and no Javascript
Andrea Tosato
 
PDF
Mixing Identity server, AAD, ASP .NET Identity
Andrea Tosato
 
PDF
An introduction to GraphQL in .NET Core
Andrea Tosato
 
PDF
DevOps Heroes 2019
Andrea Tosato
 
PPTX
dotNetConf2019
Andrea Tosato
 
PPTX
Cost Optimization - Global Azure Bootcamp 2019
Andrea Tosato
 
PPTX
Deep Dive Azure Functions - Global Azure Bootcamp 2019
Andrea Tosato
 
PPTX
Azure Function Workflow
Andrea Tosato
 
PPTX
Azure Cognitive Service on Container
Andrea Tosato
 
PPTX
Deploy multi-environment application with Azure DevOps
Andrea Tosato
 
PPTX
Azure Cognitive Service in Container
Andrea Tosato
 
PPTX
Azure Signalr Service
Andrea Tosato
 
PPTX
Xamarin - Microcharts
Andrea Tosato
 
PPTX
Introduzione Xamarin
Andrea Tosato
 
Codemotion Azure Container Apps
Andrea Tosato
 
Lite db for dummies
Andrea Tosato
 
Azure Static Web Apps & Blazor
Andrea Tosato
 
Dapr logicapps
Andrea Tosato
 
How to develop modern web application, with no money and nod javascript
Andrea Tosato
 
Entity framework core v3 from sql to no sql
Andrea Tosato
 
How to develop modern web application - With no money and no Javascript
Andrea Tosato
 
Mixing Identity server, AAD, ASP .NET Identity
Andrea Tosato
 
An introduction to GraphQL in .NET Core
Andrea Tosato
 
DevOps Heroes 2019
Andrea Tosato
 
dotNetConf2019
Andrea Tosato
 
Cost Optimization - Global Azure Bootcamp 2019
Andrea Tosato
 
Deep Dive Azure Functions - Global Azure Bootcamp 2019
Andrea Tosato
 
Azure Function Workflow
Andrea Tosato
 
Azure Cognitive Service on Container
Andrea Tosato
 
Deploy multi-environment application with Azure DevOps
Andrea Tosato
 
Azure Cognitive Service in Container
Andrea Tosato
 
Azure Signalr Service
Andrea Tosato
 
Xamarin - Microcharts
Andrea Tosato
 
Introduzione Xamarin
Andrea Tosato
 

Unit Testing

  • 1. Unit test Dai test manuali al continuous testing ARGOMENTO
  • 2. 2 Agenda 1 Introduzione 1. Pattern test 2 TDD 1. Dall’approccio tradizionale al testing 3 Unit e Integration Test 1. Mock, stubs, fake 2. Esempi prativi 4 Continuous testing
  • 4. 4 Svantaggi • Richiede molto tempo di sviluppo (tempo = costo!) • Richiede enorme pazienza al team di sviluppo • Necessita di una rigorosa documentazione • Non è possibile testare tutti gli input e gli scenari come nel mondo reale
  • 8. 8 Costo dei test Rampa creata in tempo e nel budget!
  • 9. 9 Ciclo di vita del codice • Unit test è un segmento di codice utilizzato per testare un pezzo di codice applicativo • Verifica se il codice: o Rispetta i requisiti e il design o Si comporta come previsto o Aiuta a identificare gli algoritmi e lo logiche errate
  • 10. 10 I componenti fondamenti di un test • Il test deve essere leggibile • Il test deve essere veritiero • Il test deve essere mantenibile • Il test deve essere ISOLATO • Il test deve essere veloce • Il test si deve documentare da se (nomenclatura) • Il test non deve contenere logica
  • 11. 11 Manual vs Automated • Test automatizzati  Decrementano drammaticamente il numero di difetti del codice  Migliorano il disegno app.  Sono una buona documentazione  Riducono il costo ai cambiamenti  Consento refactoring • Test manuali Richiede una persona designata ai test ad ogni release Meno efficiente Non strutturato Non ripetibile Non comprensibile rispetto al codice
  • 12. 12 Tipi di test End to end (black-box) Difficili da scrivere e da eseguire. Riscontrano malfunzionamenti grafici Functional test Semplici da scrivere Trovano bug di media importanza Unit test Semplici da scrivere Trovano bug di logica
  • 16. 17 TDD • Stile di sviluppo/ progettazione • Non è una tecnica di testing. • La programmazione e lo unit test non sono attività separate. Si scrive prima un test che fallisce, e poi si scrive il relativo codice. Differisce dagli approcci tradizionali, in cui prima si scrive il codice e poi (forse) lo si testa.
  • 17. 18 Vantaggi del TDD • Permette di scrivere software migliore e più rapidamente (costruendo software in piccoli incrementi- 1 test alla volta) • Evita il procedere per tentativi • Produce codice pulito e che funziona (in modo opposto allo sviluppo architecture driven, in cui si fanno prima tutte le decisioni). • Consente agli sviluppatori di produrre un insieme di test di regressione automatizzabili, man mano che sviluppano. • Riduce il tempo per la correzione dei difetti
  • 18. 19 Costo dei test La fatica ripaga
  • 19. 20 Acceptance test Si trasformano i requisiti applicativi in test eseguibili.
  • 20. 21 Red/Green/Refactor pattern Red Scrivi un Test che fallisce. Green Scrivi il codice per soddisfare il test. Refactor Migliora il codice senza cambiarne la funzionalità. Ripeti.
  • 21. 22 AAA pattern • Arrange Creazione dell’ambiente applicativo che si vuole testare. • Act Esecuzione del codice che si vuole testare • Assert Verifica e validazione dei risultati ottenuti [TestMethod] public void NoNewMessages() { //Arrange Mailbox mailbox = new Mailbox(); //Act var result = mailbox.GetCount(0); //Assert Assert.AreEqual("No new messages.", result); }
  • 22. 23 Refactoring Eliminare codice duplicato Migliorarne l’espressività Riduzione accoppiamento e migliora il codice Dopo il Refactoring, i test vanno rieseguiti.
  • 24. 25 Unit test Non è Unit Test se: • comunica con il database • comunica in rete o servizi terze parti • non può essere lanciato in parallelo ad altri test • utilizza il filesystem
  • 25. 26 Unit test Unit Test se: • non comunica con il database • non comunica in rete o servizi terze parti • può essere lanciato in parallelo ad altri test • non utilizza il filesystem • dovrebbe durare massimo 1 secondo
  • 26. 27 Unit test Inoltre… • Scritto ed eseguito dai sviluppatori • Obiettivo: separare ciascuna parte e testare singolarmente • Eseguito prima delle integrazioni • Considera di utilizzare dei White-Box • IntelliTest https://www.microsoft.com/en-us/research/project/pex-and-moles-isolation-and-white-box-unit-testing-for-net/ • Utilizza le asserzioni per verificare le esecuzioni del codice
  • 27. 28 Unit test Non solo Unit Test!
  • 28. Click to edit Master title style Demo Unit - Test
  • 29. Click to edit Master title style Demo Code Coverage
  • 32. 33 Unit test In casa Microsoft - Martin Woodward
  • 33. Mock - Stubs ARGOMENTO Un aiuto agli integration test
  • 34. 35 Nomenclatura Stubs (variante test doubles) Fornisce un comportamento fissato (metodi che tornano sempre lo stesso valore). Viene usato per controllare l'"input indiretto" del codice sotto test.
  • 35. 36 Nomenclatura Mock (variante spy) Memorizza esplicitamente le aspettative sul comportamento del codice sotto test, e verificare lo stato. Comportamento programmabile, che simula quello dell'oggetto reale
  • 36. 37 Mock vs Stub In genere lo stub è molto più semplice di un Mock-Object. Gli stub forniscono risposte preconfezionate, e nulla che sia al di fuori di ciò che è previsto per il test. I mock hanno implementazioni più sofisticate che consentono di verificare il comportamento dell’unità testata (e non solo lo stato) verificando ad esempio le collaborazioni avute con altri oggetti ed il relativo ordine di esecuzione. Possono verificare se l’oggetto che li usa lo fa correttamente. Testano unità senza legarsi ad oggetti esterni.
  • 37. 38 La classe Client (da testare) usa i metodi di Helper. Vogliamo controllare direttamente ciò che Helper restituisce a Client
  • 38. Click to edit Master title style Demo Moq
  • 41. Click to edit Master title style Demo
  • 42. 43 Continuous testing È una pratica di sviluppo software in cui i membri del team di sviluppo integrano il proprio lavoro frequentemente, almeno una volta al giorno. Ogni integrazione è verificata da strumenti automatici che eseguono il build e riesegueno tutti i test sulla nuova configurazione, per trovare errori di integrazione rapidamente.
  • 43. Click to edit Master title style Demo VSTS – continuous testing
  • 44. 45 Costo dei test La fatica ripaga!
  • 45. 46 Altri temi sul testing • UI testing • Selenium • Test client-side • Jasmine • Protractor (end-to-end) • SQL testing https://www.red-gate.com/blog/database-development/dont-unit-test-sql-server-code/amp