SlideShare a Scribd company logo
Analisi di dati statistici sull'adozione di
  Unit Test nell'industria software.
Esperimento 1: TDD vs Waterfall


Esperimento Industriale
Progetto: Applicazione Java per la gestione del punteggio
 di una partita di bowling.
Contesto:
 Specifiche fornite.
 2 gruppi seguono modello waterfall
 1 gruppo segue modello TDD.

                         TDD Team   Waterfall Team
        Development      116%       100%
        time
        Functional       118%       100%
        black box test
        passed
Esp 2: TDD vs altri metodi

Esperimento Industriale
Progetti: Applicazione C++ e C#
Contesto:
 Specifiche fornite.
 2 gruppi seguono TDD
 2 gruppi non seguono TDD.




LOC = Lines Of Code
Block Coverage = Lines Of Code / Exercised lines of code
Esp 3: TDD vs Test Last


Gruppo “TDD” e gruppo “Test Last”
  Produttività identica
  Gruppo “TDD” produce più test e li esegue più
   spesso.


  Esperimento Industriale
  Progetti: Piccola applicazione (90/100 min)
  Contesto:
   1 gruppo Test First
   1 gruppo Test Last
Esp 4: TDD vs Test Last


TDD
 Richieste maggior tempo di sviluppo
 Il miglioramento in qualità supera il maggior tempo di
    sviluppo
 TDD fa si che il design sia
      Più preciso
      Casi di test più accurati
                                    Esperimento Industriale
                                    Progetti: Breve task di
                                     implementazione di circa 5 ore
                                    Contesto:
                                     Primo task con TDD
                                     Secondo task waterfall
Esp 5: TDD vs Test Last


TDD
 Nessun incremento della velocità di sviluppo
 Nessun incremento della qualità




             Esperimento Accademico
             Progetti: Implementare il corpo di metodi
             Contesto:
              Primo task con TDD
              Secondo task senza TDD
Esp 6:TDD vs Last Test vs No Test


I risultati indicano che TDD può essere
  Un approccio al design
  Migliora la decomposizione degli oggetti
  Incrementa la copertura dei test
  Incrementa la qualità esterna
  Aumenta la produttività
  Aumenta la confidenza        Esperimento Accademico
                               Progetti: 70 / 190 ore uomo
                               Contesto:
                                1 gruppo TDD
                                1 gruppo Test Last
                                1 gruppo no Test
Esp 7:TDD vs Last Test


Risultati
  Gli studenti che hanno praticato TDD scrivono più unit
    test
  Gli studenti che scrivono più test tendono ad essere
    più produttivi

                           Esperimento Accademico
                           Progetti: Segnapunti bowling
                           Contesto:
                             1 gruppo Test First
                             1 gruppo Test Last
Esp 8: IBM Pos



Sistema POS
Numerose release
Release 0 senza test
Esp 8: IBM Pos

5 moduli con defect density maggiore




                                       defect density = defects / loc
5 moduli con defect density minore
Esp 8: IBM Pos
Conclusioni
Conclusioni
“perchè dovrei usare gli unit test ?”
“perchè non li sto usando ?”
Analisi dei vantaggi derivanti
                        dall'adozione degli Unit Test.

Scrivere uno Unit Test test significa pensare alle
 specifiche di funzionamento.
Suite di Unit Test, stimolando più classi, limitano i
 bug di regressione a fronte di nuovi sviluppi.
Suite di Unit Test, stimolando più classi,
 permettono il refactoring: modifica del
 funzionamento interno rispettando i contratti.
La testabilità come forza che spinge verso
 l'adozione naturale di buone tecniche OOP.
Contesti controproducenti


Contesti causati da fattori umani:
  Errata confidenza negli Unit Test.
     Gli Unit Test sono solo uno strumento
  Errate attese:
     Unit Test non testano l'applicazione, ma i singoli
      componenti.
  Unit Test controproducenti durante gli spike tecnici o
   proof of concept
  Preferire gli Integration Test agli Unit Test per evitare
    il ricorso ai Mock.
Criticità



Ecosistema di supporto
  Umano
    Volontà degli sviluppatori
    Spinta del management
    Bugfixing attraverso la riproduzione del bug con uno unit
      test
  Tecnologico
    IDE per feedback immediato: green / red bar
    Continuous Integration: validità dei test
    Test Coverage: indice per i nuovi test

More Related Content

PDF
TDD patterns and TDD strategies
Alessandro Ceseno
 
PPTX
Unit Testing
Andrea Tosato
 
ODP
Workshop: Introduzione ad TDD
Marcello Missiroli
 
PDF
Software Testing e TDD
Domenico Briganti
 
PPT
Test automatizzati & serenity bdd
diego mauricio lagos morales
 
ODP
Linux Day 20091024 Test Driven Development
Roberto Albertini
 
PDF
TTT - Test, Tools and Tips - jug roma
diego mauricio lagos morales
 
PDF
Le pratiche ingegneristiche di eXtreme Programming
Andrea Francia
 
TDD patterns and TDD strategies
Alessandro Ceseno
 
Unit Testing
Andrea Tosato
 
Workshop: Introduzione ad TDD
Marcello Missiroli
 
Software Testing e TDD
Domenico Briganti
 
Test automatizzati & serenity bdd
diego mauricio lagos morales
 
Linux Day 20091024 Test Driven Development
Roberto Albertini
 
TTT - Test, Tools and Tips - jug roma
diego mauricio lagos morales
 
Le pratiche ingegneristiche di eXtreme Programming
Andrea Francia
 

What's hot (6)

PPTX
Unit Test di Gabriele Seroni
Giuneco S.r.l
 
ODP
Testing
Domenico Briganti
 
PPT
Detailed Model Capture
fcospito
 
PPT
Introduzione al Test Driven Development
Ennio Masi
 
ODP
TDD - una introduzione
Roberto Franchini
 
PDF
Una fugace occhiata al Test Driven Development (2006)
Roberto Bettazzoni
 
Unit Test di Gabriele Seroni
Giuneco S.r.l
 
Detailed Model Capture
fcospito
 
Introduzione al Test Driven Development
Ennio Masi
 
TDD - una introduzione
Roberto Franchini
 
Una fugace occhiata al Test Driven Development (2006)
Roberto Bettazzoni
 
Ad

Viewers also liked (8)

PDF
Testing as a Service @ Italian Software Testing Forum 2016
Marco Negri, PMP, CBAP, COBIT5
 
PDF
Stress Test - rischio di credito
Fondazione CUOA
 
PDF
Test Funzionale
IxmaSoft
 
PDF
Software testing
IxmaSoft
 
PDF
Software Testing & Test Driven Development
Sergio Santoro
 
PDF
Le 12 pratiche
Andrea Francia
 
PDF
Lezione 2: Pianificazione in Extreme Programming
Andrea Della Corte
 
PDF
Introduzione alle metodologie di sviluppo agile
Stefano Valle
 
Testing as a Service @ Italian Software Testing Forum 2016
Marco Negri, PMP, CBAP, COBIT5
 
Stress Test - rischio di credito
Fondazione CUOA
 
Test Funzionale
IxmaSoft
 
Software testing
IxmaSoft
 
Software Testing & Test Driven Development
Sergio Santoro
 
Le 12 pratiche
Andrea Francia
 
Lezione 2: Pianificazione in Extreme Programming
Andrea Della Corte
 
Introduzione alle metodologie di sviluppo agile
Stefano Valle
 
Ad

Similar to TDD Casi Studio (20)

ODP
TDD Adozione
Daniele Demichelis
 
PDF
Delphi & Dintorni Webinar - Diventa un mago del Testing
Marco Breveglieri
 
PDF
Unit Testing
Giacomo Petronio
 
PPTX
Fe05 test drivenjavascriptdevelopment
DotNetCampus
 
PPTX
Unit test
Roberto Cappelletti
 
PDF
Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)
Andrea Francia
 
ODP
Unit testing 101
Daniel Londero
 
PDF
Agile management
Net7
 
PPTX
L'Occhio di Ra sul Testing
Felice Pescatore
 
PPTX
2013 why agile
Felice Pescatore
 
PPTX
PASS Virtual Chapter - Unit Testing su SQL Server
Alessandro Alpi
 
ODP
Unit Tests VS End To End Tests
mimmozzo_
 
PDF
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Boymix81
 
PPT
Detailed Model Capture
fcospito
 
PPTX
Unit testing 2014
Giacomo Petronio
 
PPTX
Scala: come recuperare la programmazione funzionale e perché
Edmondo Porcu
 
PDF
Pro php refactoring
Francesco Trucchia
 
PDF
Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...
Roberto Bettazzoni
 
PDF
Presentazione eXtreme Programming
Roberto Bettazzoni
 
TDD Adozione
Daniele Demichelis
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Marco Breveglieri
 
Unit Testing
Giacomo Petronio
 
Fe05 test drivenjavascriptdevelopment
DotNetCampus
 
Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)
Andrea Francia
 
Unit testing 101
Daniel Londero
 
Agile management
Net7
 
L'Occhio di Ra sul Testing
Felice Pescatore
 
2013 why agile
Felice Pescatore
 
PASS Virtual Chapter - Unit Testing su SQL Server
Alessandro Alpi
 
Unit Tests VS End To End Tests
mimmozzo_
 
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...
Boymix81
 
Detailed Model Capture
fcospito
 
Unit testing 2014
Giacomo Petronio
 
Scala: come recuperare la programmazione funzionale e perché
Edmondo Porcu
 
Pro php refactoring
Francesco Trucchia
 
Introduzione alle metodologie e pratiche Agili ... ma l'agile c'entra qualcos...
Roberto Bettazzoni
 
Presentazione eXtreme Programming
Roberto Bettazzoni
 

TDD Casi Studio

  • 1. Analisi di dati statistici sull'adozione di Unit Test nell'industria software.
  • 2. Esperimento 1: TDD vs Waterfall Esperimento Industriale Progetto: Applicazione Java per la gestione del punteggio di una partita di bowling. Contesto: Specifiche fornite. 2 gruppi seguono modello waterfall 1 gruppo segue modello TDD. TDD Team Waterfall Team Development 116% 100% time Functional 118% 100% black box test passed
  • 3. Esp 2: TDD vs altri metodi Esperimento Industriale Progetti: Applicazione C++ e C# Contesto: Specifiche fornite. 2 gruppi seguono TDD 2 gruppi non seguono TDD. LOC = Lines Of Code Block Coverage = Lines Of Code / Exercised lines of code
  • 4. Esp 3: TDD vs Test Last Gruppo “TDD” e gruppo “Test Last” Produttività identica Gruppo “TDD” produce più test e li esegue più spesso. Esperimento Industriale Progetti: Piccola applicazione (90/100 min) Contesto: 1 gruppo Test First 1 gruppo Test Last
  • 5. Esp 4: TDD vs Test Last TDD Richieste maggior tempo di sviluppo Il miglioramento in qualità supera il maggior tempo di sviluppo TDD fa si che il design sia Più preciso Casi di test più accurati Esperimento Industriale Progetti: Breve task di implementazione di circa 5 ore Contesto: Primo task con TDD Secondo task waterfall
  • 6. Esp 5: TDD vs Test Last TDD Nessun incremento della velocità di sviluppo Nessun incremento della qualità Esperimento Accademico Progetti: Implementare il corpo di metodi Contesto: Primo task con TDD Secondo task senza TDD
  • 7. Esp 6:TDD vs Last Test vs No Test I risultati indicano che TDD può essere Un approccio al design Migliora la decomposizione degli oggetti Incrementa la copertura dei test Incrementa la qualità esterna Aumenta la produttività Aumenta la confidenza Esperimento Accademico Progetti: 70 / 190 ore uomo Contesto: 1 gruppo TDD 1 gruppo Test Last 1 gruppo no Test
  • 8. Esp 7:TDD vs Last Test Risultati Gli studenti che hanno praticato TDD scrivono più unit test Gli studenti che scrivono più test tendono ad essere più produttivi Esperimento Accademico Progetti: Segnapunti bowling Contesto: 1 gruppo Test First 1 gruppo Test Last
  • 9. Esp 8: IBM Pos Sistema POS Numerose release Release 0 senza test
  • 10. Esp 8: IBM Pos 5 moduli con defect density maggiore defect density = defects / loc 5 moduli con defect density minore
  • 11. Esp 8: IBM Pos
  • 14. “perchè dovrei usare gli unit test ?” “perchè non li sto usando ?”
  • 15. Analisi dei vantaggi derivanti dall'adozione degli Unit Test. Scrivere uno Unit Test test significa pensare alle specifiche di funzionamento. Suite di Unit Test, stimolando più classi, limitano i bug di regressione a fronte di nuovi sviluppi. Suite di Unit Test, stimolando più classi, permettono il refactoring: modifica del funzionamento interno rispettando i contratti. La testabilità come forza che spinge verso l'adozione naturale di buone tecniche OOP.
  • 16. Contesti controproducenti Contesti causati da fattori umani: Errata confidenza negli Unit Test. Gli Unit Test sono solo uno strumento Errate attese: Unit Test non testano l'applicazione, ma i singoli componenti. Unit Test controproducenti durante gli spike tecnici o proof of concept Preferire gli Integration Test agli Unit Test per evitare il ricorso ai Mock.
  • 17. Criticità Ecosistema di supporto Umano Volontà degli sviluppatori Spinta del management Bugfixing attraverso la riproduzione del bug con uno unit test Tecnologico IDE per feedback immediato: green / red bar Continuous Integration: validità dei test Test Coverage: indice per i nuovi test