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
PPTX
Unit Testing
ODP
Workshop: Introduzione ad TDD
PDF
Software Testing e TDD
PPT
Test automatizzati & serenity bdd
ODP
Linux Day 20091024 Test Driven Development
PDF
TTT - Test, Tools and Tips - jug roma
PDF
Le pratiche ingegneristiche di eXtreme Programming
TDD patterns and TDD strategies
Unit Testing
Workshop: Introduzione ad TDD
Software Testing e TDD
Test automatizzati & serenity bdd
Linux Day 20091024 Test Driven Development
TTT - Test, Tools and Tips - jug roma
Le pratiche ingegneristiche di eXtreme Programming

What's hot (6)

PPTX
Unit Test di Gabriele Seroni
ODP
PPT
Detailed Model Capture
PPT
Introduzione al Test Driven Development
ODP
TDD - una introduzione
PDF
Una fugace occhiata al Test Driven Development (2006)
Unit Test di Gabriele Seroni
Detailed Model Capture
Introduzione al Test Driven Development
TDD - una introduzione
Una fugace occhiata al Test Driven Development (2006)
Ad

Viewers also liked (8)

PDF
Testing as a Service @ Italian Software Testing Forum 2016
PDF
Stress Test - rischio di credito
PDF
Test Funzionale
PDF
Software testing
PDF
Software Testing & Test Driven Development
PDF
Le 12 pratiche
PDF
Lezione 2: Pianificazione in Extreme Programming
PDF
Introduzione alle metodologie di sviluppo agile
Testing as a Service @ Italian Software Testing Forum 2016
Stress Test - rischio di credito
Test Funzionale
Software testing
Software Testing & Test Driven Development
Le 12 pratiche
Lezione 2: Pianificazione in Extreme Programming
Introduzione alle metodologie di sviluppo agile
Ad

Similar to TDD Casi Studio (19)

PDF
Java Unit Testing - Introduction
ODP
TDD Adozione
PPTX
Test Driven Development @ Xe.Net
PDF
Lezione 3: Sviluppo in Extreme Programming
PDF
Test Driven Development for iOS
PDF
Presentazione Testing automatizzato
KEY
TDD Test Driven Development
PDF
Unit Testing
ODP
Unit testing 101
PPTX
PowerMock TDD User Group Milano
ODP
Insegnare Agile
PDF
Intoduzione Alle Metodologie Agili
ODP
Unit Tests VS End To End Tests
PDF
05 unit testing
PPTX
Tdd.Every.Where.21012012
PPT
dalTDDalBDD
PDF
Corso WebApp iOS - Lezione 09: Testing iOS WebApp
PPTX
PPTX
Agile Testing e UX: come ottenere il massimo da QA e Design
Java Unit Testing - Introduction
TDD Adozione
Test Driven Development @ Xe.Net
Lezione 3: Sviluppo in Extreme Programming
Test Driven Development for iOS
Presentazione Testing automatizzato
TDD Test Driven Development
Unit Testing
Unit testing 101
PowerMock TDD User Group Milano
Insegnare Agile
Intoduzione Alle Metodologie Agili
Unit Tests VS End To End Tests
05 unit testing
Tdd.Every.Where.21012012
dalTDDalBDD
Corso WebApp iOS - Lezione 09: Testing iOS WebApp
Agile Testing e UX: come ottenere il massimo da QA e Design

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