Che cosè lo sviluppo basato su test (TDD)? Tutorial con

Test Driven Development

Test Driven Development (TDD) è un approccio di sviluppo software in cui vengono sviluppati casi di test per specificare e convalidare cosa farà il codice. In termini semplici, i casi di test per ciascuna funzionalità vengono creati e testati prima e se il test fallisce, viene scritto il nuovo codice per superare il test e rendere il codice semplice e privo di bug.

Lo sviluppo basato sui test inizia con la progettazione e lo sviluppo di test per ogni piccola funzionalità di unapplicazione. TDD indica agli sviluppatori di scrivere nuovo codice solo se un test automatizzato non è riuscito. Ciò evita la duplicazione del codice. La forma completa di TDD è lo sviluppo basato sui test.

Il semplice concetto di TDD è scrivere e correggere i test falliti prima di scrivere nuovo codice (prima dello sviluppo). Questo aiuta a evitare la duplicazione del codice mentre scriviamo una piccola quantità di codice alla volta per superare i test. (I test non sono altro che condizioni dei requisiti che dobbiamo testare per soddisfarli).

Lo sviluppo basato sui test è un processo di sviluppo ed esecuzione automatizzato test prima dello sviluppo effettivo dellapplicazione. Quindi, TDD a volte viene anche chiamato Test First Development.

In questo tutorial imparerai di più su –

  • Come eseguire il test TDD
  • TDD vs. Test tradizionali
  • Che cosè laccettazione TDD e TDD per sviluppatori
  • Scalabilità del TDD tramite Agile Model Driven Development (AMDD)
  • Test Driven Development (TDD) vs. Agile Model Driven Development (AMDD)
  • Esempio di TDD
  • Vantaggi di TDD

Come eseguire il test TDD

I passaggi seguenti definiscono come eseguire il test TDD,

  1. Aggiungi un test.
  2. Esegui tutti i test e verifica se un nuovo test fallisce.
  3. Scrivine alcuni code.
  4. Esegui test e refactoring del codice.
  5. Ripeti.

Il ciclo TDD definisce

  1. Scrivi un test
  2. Fallo funzionare.
  3. Cambia il codice per farlo bene, ad esempio Refactoring.
  4. Ripeti il processo.

Alcuni chiarimenti su TDD:

  • TDD non riguarda nemmeno il “Test” né su “Design”.
  • TDD non significa “scrivere alcuni test, quindi costruire un sistema che li superi.
  • TDD non significa” fare molti test. “

TDD Vs. Test tradizionale

Lapproccio TDD è principalmente una tecnica di specifica. Assicura che il codice sorgente sia accuratamente testato in sede di conferma livello.

  • Con i test tradizionali, un test riuscito rileva uno o più difetti. È lo stesso di TDD. Quando un test fallisce, hai fatto dei progressi perché sai che devi risolvere il problema.
  • TDD garantisce che il tuo sistema soddisfi effettivamente i requisiti definiti per esso. Aiuta a costruire la tua fiducia sul tuo sistema.
  • In TDD lattenzione si concentra maggiormente sul codice di produzione che verifica se i test funzioneranno correttamente. Nei test tradizionali, lattenzione si concentra maggiormente sulla progettazione del caso di test. Se il test mostrerà la corretta / impropria esecuzione dellapplicazione al fine di soddisfare i requisiti.
  • In TDD, ottieni il 100% di copertura del test. Ogni singola riga di codice viene testata, a differenza dei test tradizionali.
  • La combinazione di test tradizionali e TDD porta allimportanza di testare il sistema piuttosto che alla perfezione del sistema.
  • In Agile Modeling (AM), dovresti “testare con uno scopo”. Dovresti sapere perché stai testando qualcosa e quale livello deve essere testato.

Cosè laccettazione TDD e Developer TDD

Ci sono due livelli di TDD

  1. TDD di accettazione (ATDD): Con ATDD scrivi un unico test di accettazione. Questo test soddisfa i requisiti della specifica o soddisfa il comportamento del sistema. Dopodiché, scrivi il codice di produzione / funzionalità sufficiente per completare il test di accettazione. Il test di accettazione si concentra sul comportamento generale del sistema. ATDD era anche noto come Behavioral Driven Development (BDD).
  2. TDD per sviluppatori: con TDD per sviluppatori scrivi un test per sviluppatore singolo, ovvero un test unitario e quindi il codice di produzione sufficiente per soddisfare quel test. Lo unit test si concentra su ogni piccola funzionalità del sistema. Lo sviluppatore TDD è chiamato semplicemente TDD.

    Lobiettivo principale di ATDD e TDD è specificare requisiti dettagliati ed eseguibili per la propria soluzione su base just in time (JIT). JIT significa prendere in considerazione solo quei requisiti che sono necessari nel sistema. Quindi aumenta lefficienza.

Scalabilità del TDD tramite Agile Model Driven Development (AMDD)

TDD è molto bravo nelle specifiche dettagliate e nella convalida. Non riesce a pensare a problemi più grandi come il design generale, luso del sistema o linterfaccia utente.AMDD risolve i problemi di scalabilità Agile che TDD non fa.

Così AMDD utilizzato per problemi più grandi.

Il ciclo di vita di AMDD.

In Model-driven Development (MDD), i modelli estesi vengono creati prima del il codice sorgente è scritto. Che a loro volta hanno un approccio agile?

Nella figura sopra, ogni riquadro rappresenta unattività di sviluppo.

Envisioning è uno dei processi TDD di previsione / immaginazione dei test che verranno eseguiti durante la prima settimana del progetto. Lobiettivo principale della visione è identificare lambito del sistema e larchitettura del sistema. Requisiti di alto livello e modellazione dellarchitettura vengono eseguiti per una visione di successo.

È il processo in cui non viene eseguita una specifica dettagliata del software / sistema, ma lesplorazione dei requisiti del software / sistema che definisce la strategia complessiva del progetto.

  1. Iterazione 0: Envisioning

Ci sono due principali sottoattivazioni.

  1. Previsione dei requisiti iniziali.

    Potrebbero essere necessari diversi giorni per identificare i requisiti di alto livello e lambito del sistema. Lobiettivo principale è esplorare il modello di utilizzo, il modello di dominio iniziale e il modello di interfaccia utente (UI).

  2. Visione architettonica iniziale.

    Occorrono anche diversi giorni per identificare larchitettura del sistema. Consente di impostare indicazioni tecniche per il progetto. Lobiettivo principale è esplorare i diagrammi tecnologici, il flusso dellinterfaccia utente (UI), i modelli di dominio e i casi di modifica.

  1. Modellazione di iterazione:

    Qui il team deve pianificare il lavoro che verrà svolto per ogni iterazione.

  • Il processo Agile viene utilizzato per ogni iterazione, ovvero durante ogni iterazione, il nuovo elemento di lavoro verrà aggiunto con priorità.
  • Primo con priorità superiore sarà preso in considerazione il lavoro. Gli elementi di lavoro aggiunti possono essere ridefiniti o rimossi dalla pila degli elementi in qualsiasi momento.
  • Il team discute come implementeranno ciascun requisito. La modellazione viene utilizzata a questo scopo.
  • Lanalisi e la progettazione della modellazione vengono eseguite per ogni requisito che verrà implementato per tale iterazione.
  1. Model storming:

    Questo è noto anche come Just in time Modeling.

  • Qui la sessione di modellazione coinvolge un team di 2/3 membri che discutono i problemi su carta o lavagna.
  • Un membro del team chiederà a un altro per modellare con loro. Questa sessione di modellazione richiederà circa 5-10 minuti. Dove i membri del team si riuniscono per condividere whiteboard / paper.
  • Esplorano i problemi finché non trovano la causa principale del problema. Giusto in tempo, se un membro del team identifica il problema che desidera per risolverlo, si servirà rapidamente dellaiuto di altri membri del team.
  • Gli altri membri del gruppo esplorano quindi il problema e poi tutti continuano come prima. Viene anche chiamato sessioni di modellazione in piedi o QA del cliente .
  1. Test Driven Development (TDD).
  • Promuove test di conferma del codice dellapplicazione e specifiche dettagliate.
  • Sia il test di accettazione (requisiti dettagliati) che i test per sviluppatori (test unitario) sono input per TDD.
  • TDD rende il codice più semplice e chiaro. Consente allo sviluppatore di conservare meno documentazione.
  1. Recensioni.
  • È facoltativo. Include ispezioni del codice e revisioni dei modelli.
  • Può essere fatto per ogni iterazione o per lintero progetto.
  • Questa è una buona opzione per fornire feedback per il progetto.

Test Driven Development (TDD) vs. Agile Model Driven Development (AMDD)

Esempio di TDD

Qui in questo esempio, definiremo una password di classe. Per questa classe, cercheremo di soddisfare le seguenti condizioni.

Una condizione per laccettazione della password:

  • La password deve essere compresa tra 5 e 10 caratteri.

Per prima cosa, scriviamo il codice che soddisfa tutti i requisiti di cui sopra.

Scenario 1: per eseguire il test, creiamo la classe PasswordValidator ();

Eseguiremo sopra la classe TestPassword ();

Loutput è SUPERATO come mostrato di seguito;

Risultato:

Scenario 2: qui possiamo vedere nel metodo TestPasswordLength () non è necessario creare unistanza della classe PasswordValidator. Istanza significa creare un oggetto di classe per fare riferimento ai membri (variabili / metodi) di quella classe.

Rimuoveremo la classe PasswordValidator pv = new PasswordValidator () dal codice. Possiamo chiamare il metodo isValid () direttamente da PasswordValidator. IsValid (“Abc123”).(Vedi immagine sotto)

Quindi eseguiamo il refactoring (modifica del codice) come di seguito:

Scenario 3: dopo il refactoring, loutput mostra lo stato di errore (vedi immagine sotto) questo perché abbiamo rimosso listanza. Quindi non vi è alcun riferimento al metodo non statico isValid ().

Quindi dobbiamo cambiare questo metodo aggiungendo una parola “statica” prima di Boolean come booleano statico pubblico isValid (password stringa). Refactoring della classe PasswordValidator () per rimuovere lerrore precedente per superare il test.

Risultato:

Dopo aver apportato modifiche alla classe PassValidator () se eseguiamo il test, loutput sarà SUPERATO come mostrato di seguito.

Vantaggi di TDD

  • Bug iniziale notifica.

    Gli sviluppatori testano il loro codice, ma nel mondo dei database, questo spesso consiste in test manuali o script una tantum. Utilizzando TDD crei, nel tempo, una suite di test automatizzati che tu e qualsiasi altro sviluppatore potete rieseguire a piacimento.

  • Codice progettato meglio, più pulito e più estensibile.
    • Aiuta a capire come verrà utilizzato il codice e come interagisce con altri moduli.
    • Risulta in una migliore decisione di progettazione e un codice più gestibile.
    • TDD consente di scrivere codice più piccolo con responsabilità singola piuttosto che procedure monolitiche con responsabilità multiple. Ciò semplifica la comprensione del codice.
    • TDD obbliga anche a scrivere solo codice di produzione per superare i test in base ai requisiti dellutente.
  • Fiducia nel refactoring
    • Se esegui il refactoring del codice, ci possono essere possibilità di interruzioni nel codice. Quindi, disponendo di una serie di test automatici, è possibile correggere tali interruzioni prima del rilascio. Verrà fornito un avviso appropriato se vengono rilevate interruzioni durante lutilizzo di test automatici.
    • Utilizzando TDD, dovrebbe risultare un codice più veloce ed estensibile con meno bug che può essere aggiornato con rischi minimi.
  • Buono per il lavoro di squadra

    In assenza di qualsiasi membro del team, gli altri membri del team possono facilmente raccogliere e lavorare sul codice. Aiuta anche la condivisione delle conoscenze, rendendo così il team più efficiente nel complesso.

  • Buono per gli sviluppatori

    Sebbene gli sviluppatori debbano dedicare più tempo alla scrittura di casi di test TDD, ci vuole molto meno tempo per il debug e lo sviluppo di nuove funzionalità. Scriverai un codice più pulito e meno complicato.

Riepilogo:

  • TDD è lacronimo di Test-driven development. È un processo di modifica del codice per superare un test progettato in precedenza.
  • Dà maggiore enfasi al codice di produzione piuttosto che alla progettazione del caso di test.
  • Lo sviluppo basato sui test è un processo di modificare il codice per superare un test progettato in precedenza.
  • In Ingegneria del software, a volte è noto come “Test First Development”.
  • TDD include il refactoring di un codice, ovvero la modifica / aggiunta di una certa quantità di codice al codice esistente senza influire sul comportamento del codice.
  • TDD quando viene utilizzato, il codice diventa più chiaro e semplice da capire.

Questo articolo è fornito da Kanchan Kulkarni

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *