Lo sviluppo basato su test (TDD) è un approccio allo sviluppo software in cui i test del software vengono scritti prima delle funzioni corrispondenti.
Gli sviluppatori scrivono il codice sufficiente per superare ogni test, quindi sia il test che il codice vengono perfezionati prima di passare a un nuovo test e poi a una nuova funzionalità.
Lo sviluppo basato su test costringe essenzialmente gli sviluppatori a rallentare, convalidare e perfezionare il codice in cicli di feedback più brevi. Sebbene non sia necessario, i team DevOps incoraggiano i programmatori, dai principianti ai professionisti esperti, a utilizzare la metodologia TDD in un'ampia gamma di linguaggi di programmazione. Ad esempio, Java, Python e molti altri, application programming interface (API) e applicazioni di programma.
La programmazione in questo stile rafforza la relazione tra codifica, test (sotto forma di test automatici a livello di unità) e progettazione del codice. Sebbene lo sviluppo basato su test possa aumentare i tempi di sviluppo iniziali, è stato dimostrato che migliora la funzionalità e la destrezza del codice e consente di risparmiare tempo in generale.
Identificando e risolvendo immediatamente eventuali errori, gli sviluppatori che utilizzano TDD possono evitare che piccoli problemi diventino problemi più grandi. Lo sviluppo basato su test obbliga gli sviluppatori a convalidare e perfezionare il codice via via che procedono, semplificando così i controlli e le correzioni finali di qualità.
I framework di test alternativi includono la scrittura del codice di produzione prima di scrivere tutti i test automatici o la scrittura dell'intera suite di test prima di scrivere il codice di produzione. Questi metodi, sebbene non necessariamente inefficaci, hanno dimostrato di aumentare i tempi di debug necessari, soprattutto con progetti più grandi e complessi.
Sebbene lo sviluppo basato su test sia comunemente utilizzato per la creazione di nuovo codice di produzione, viene spesso applicato anche per migliorare il debug del codice legacy sviluppato con tecniche precedenti o di altro tipo.
Lo sviluppo basato su test inverte il processo di sviluppo tradizionale anteponendo i test allo sviluppo. Come approccio iterativo, lo sviluppo basato su test migliora la qualità e la leggibilità del codice promuovendo workflow testabili che producono codice di alta qualità a livello di unità. Quando gli sviluppatori implementano i test unitari, si concentrano su una piccola parte della logica, come un algoritmo individuale. Scrivere codice specificamente per far superare i test non solo si traduce in un codice più pulito e duraturo, ma aiuta anche a migliorare la documentazione.
Newsletter di settore
Resta al passo con le tendenze più importanti e interessanti del settore relative ad AI, automazione, dati e oltre con la newsletter Think. Leggi l' Informativa sulla privacy IBM.
L'abbonamento sarà fornito in lingua inglese. Troverai un link per annullare l'iscrizione in tutte le newsletter. Puoi gestire i tuoi abbonamenti o annullarli qui. Per ulteriori informazioni, consulta l'Informativa sulla privacy IBM.
Esistono due livelli principali di sviluppo basato su test.
Per l'acceptance TDD, a volte chiamato Behavior-Driven Development (BDD), i programmatori scrivono un singolo test di accettazione e poi abbastanza nuovo codice per poterlo superare. I test di accettazione sono talvolta chiamati test del cliente o test di accettazione del cliente.
In genere possono essere intesi come casi di prova richiesti per la funzionalità minima, come delineato dagli stakeholder del prodotto. L'ATDD cerca di identificare requisiti dettagliati ed eseguibili. I test di accettazione possono essere eseguiti utilizzando vari strumenti di test, come Fitnesse o RSpec.
A volte chiamato semplicemente TDD, il developer TDD richiede ai programmatori di scrivere singoli test per valutare la propria soluzione a un test ATDD. Il developer TDD utilizza strumenti di automazione dei test, come JUnit o VBUnit.
Quando si utilizza una strategia di sviluppo basata su test, i programmatori scrivono prima dei test per controllare ogni singolo elemento o funzione di un software, quindi scrivono codice sufficiente per superare quel singolo test. Una volta completato, il software viene nuovamente testato e, se il test viene superato, il codice viene perfezionato (un processo noto come refactoring) per includere solo elementi essenziali. Gli sviluppatori ripetono poi questo processo per ogni successiva funzione software.
Il processo di sviluppo basato su test è suddiviso in cinque fasi individuali:
In parole semplici, il processo di sviluppo basato su test segue un ciclo ripetibile, denominato ciclo di refactoring rosso-verde. Le fasi del ciclo sono:
Sebbene le origini specifiche dello sviluppo basato su test siano sconosciute, il concetto di scrivere prima i test e poi il codice di produzione non è stato una pratica comune fino alla metà degli anni '90. Prima di allora, i framework di test separavano gli sviluppatori dai test delle proprie basi di codice. Tuttavia, con l'evoluzione dell'ingegneria del software, i team DevOps hanno richiesto metodologie più rapide e flessibili per soddisfare le richieste degli stakeholder, soprattutto quando si tratta di requisiti in rapida evoluzione.
Lo sviluppo basato su test si è evoluto da e insieme a vari nuovi framework di test ed è stato adottato anche come componente modulare in vari altri framework. In particolare, TDD è incluso nel concetto di Extreme Programming (XP), un framework di sviluppo software Agile sviluppato per migliorare sia la qualità del software che la qualità della vita degli sviluppatori.
Kent Beck, software engineer e figura di spicco della comunità Agile, nonché creatore di Extreme Programming, va il merito di avere "riscoperto" lo sviluppo basato su test. Nelle parole di Beck:
"La descrizione originale del TDD era contenuta in un vecchio libro sulla programmazione. Diceva che bisogna prendere il nastro di input, digitare manualmente il nastro di output previsto, quindi programmare finché il nastro di output effettivo non corrisponde all'output previsto. Dopo avere scritto il primo framework xUnit in Smalltalk, mi sono ricordato di averlo letto e di averlo provato. Per me è stata questa l'origine del TDD. Quando descrivo il TDD ai programmatori più anziani, sento spesso dire: " Certo. In quale altro modo potresti programmare?" Per questo motivo, definisco il mio ruolo come "riscoperta" del TDD."
Tra le date importanti nell'evoluzione dello sviluppo basato su test ci sono:
Come componente di Extreme Programming, lo sviluppo basato su test è risultato utile non solo per creare codice migliore, ma anche per rendere migliori i programmatori. Il TDD consente ai programmatori di ottenere insight migliori sui loro progetti e di contribuire alla progettazione dei programmi. Mettendo al centro il test case prima dell'implementazione di ogni funzionalità, gli sviluppatori devono visualizzare come una funzione verrà utilizzata da un cliente o da un utente. Questo approccio posiziona l'interfaccia del prodotto prima dell'implementazione e aiuta gli sviluppatori a creare applicazioni più orientate all'utente.
Alcuni benefici aggiuntivi dello sviluppo basato su test includono:
Sebbene l'utilizzo dello sviluppo basato su test (TDD) offra molti benefici preziosi, non è privo di problematiche. Sebbene la gravità di queste problematiche possa dipendere dal progetto o essere mitigata con varie altre tecniche, alcuni degli svantaggi del TDD includono:
Un servizio single-tenant completamente gestito per lo sviluppo e la distribuzione di applicazioni Java.
Utilizza il software e gli strumenti DevOps per creare, distribuire e gestire app cloud-native su più dispositivi e ambienti.
Lo sviluppo di applicazioni cloud significa programmare una volta, iterare rapidamente e distribuire ovunque.