"TDD riguarda la progettazione, non la verifica"; concretamente, cosa significa?

4

Mi sono chiesto questo. Cosa intendiamo esattamente per design e verifica.

Devo semplicemente applicare TDD per assicurarmi che il mio codice sia SOLIDO e non verificare se il suo comportamento esterno è corretto?

Devo usare BDD per verificare che il comportamento sia corretto?

Il punto in cui mi confondo riguarda anche il codice TDD Katas, per me sembravano più sulla verifica che sul design; non dovrebbero essere chiamati BDD Katas invece di TDD Katas?

Ritengo che, ad esempio, lo zio Bob bowling Kata conduca alla fine ad un design interno semplice e piacevole, ma ho sentito che la maggior parte del processo era centrata più sulla verifica che sul design. Il design sembrava essere un effetto collaterale di testare il comportamento esterno in modo incrementale. Non mi sentivo così tanto da concentrare la maggior parte dei nostri sforzi sul design, ma più sulla verifica. Mentre normalmente ci viene detto il contrario, che in TDD, la verifica è un effetto collaterale, il design è lo scopo principale.

Quindi la mia domanda è: cosa dovrei concentrarmi esattamente su quando faccio TDD: SOLID, usabilità dell'API esterna o qualcos'altro?

E come posso farlo senza essere concentrato sulla verifica?

A cosa concentrate le vostre energie quando praticate il TDD?

    
posta foobarcode 06.10.2012 - 17:50
fonte

5 risposte

4

I kata del codice TDD riguardano le pratiche di apprendimento del TDD e il modo in cui guidano il design (e imparano un buon design in questo modo - sì, normalmente questo significa imparare come scrivere il codice SOLID)

Ciò significa che TDD sta per raggiungere un buon design, ma avere un codice ben progettato che non risolva un problema è inutile. È qui che entra in gioco la verifica, che può essere in molte forme, essendo il BDD uno di questi come una delle molte tecniche di collaudo automatico accettate.

La verifica consiste nell'assicurare che il codice scritto risolva il problema corretto.

Quindi, quando fai TDD, concentrati sulla progettazione - assicurati che sia pulita e SOLIDA.

Ma non dimenticare di aggiungere test unitari e test di accettazione (e qualsiasi altro test che si ritenga necessario).

    
risposta data 06.10.2012 - 18:00
fonte
8

Potrebbe essere utile vedere un'immagine:

Notacheitestdiaccettazione(cioèlaverifica)siedonoaldifuoridelsolitocicloTDD.L'unitàverificacheilcodicefunzioni,maitestdiaccettazioneassicuranocheilcodicesoddisfiirequisitidelcliente.

ATDDèl'acronimodi Sviluppo basato su test di accettazione

    
risposta data 06.10.2012 - 18:17
fonte
1

La verifica riguarda l'assicurazione che un prodotto soddisfi tutti i requisiti così come sono stati specificati. Test Driven Development , di per sé, non specifica la qualità dei test scritti e, come tale, non può garantire che un prodotto è completamente conforme alle sue specifiche. Quando scrivi i test per la prima volta, tendi a concentrarti sulla produzione di software che è facilmente verificabile: ottieni una quantità elevata di copertura del codice funzionale e hai l'opportunità di pensare a come dovrebbe apparire la tua API scrivendo il test prima di scrivere la funzionalità di backup.

Quando scrivi i tuoi test, dovresti anche pensare alla verifica - mappare i test alle tue esigenze, pensare ad altri percorsi di codice all'interno delle tue funzioni (ottenendo una dichiarazione più alta o una copertura decisionale). Ma TDD non dice nulla su questi - dice solo che dovresti scrivere prima i tuoi test e poi scrivere la quantità minima di codice per far passare i test. Senza garantire almeno la copertura completa dei requisiti dei test e una maggiore copertura del percorso, i test potrebbero non essere adatti a scopi di verifica.

    
risposta data 06.10.2012 - 17:58
fonte
1
> tdd is about design not verification.

Lo tradurrei in "il vantaggio di tdd è un buon design" .

In tdd ti concentri sulla scrittura del codice di verifica.

Facendo tdd (= scrivendo i test in isolamento prima di implementare il codice) si ottiene automaticamente un buon design (= accoppiamento minimo) come effetto collaterale.

Contro la scrittura di test automatici dopo l'implementazione del codice, si ottiene anche la verififcation, ma senza il vantaggio extra del design.

    
risposta data 07.10.2012 - 09:23
fonte
1

Si tratta di entrambi, ma la verifica è un buon effetto collaterale che potrebbe essere ottenuto scrivendo i test dopo il codice. Il vero vantaggio di TDD e la prima prova è che ti aiuta a migliorare il design perfezionando il design di ogni unità logica o regola aziendale e costruendo sul resto delle unità logiche senza rompere le altre unità del progetto e conservandole da diventare eccessivamente accoppiati.

Ad esempio alcuni sviluppatori usano l'approccio TDD quasi come una "lavagna bianca" dove i test e il codice vivono tutti nello stesso file inizialmente. Dà molta libertà di evolvere la logica con i test, oltre a testare le idee. Quindi, man mano che il design si evolve, il codice viene estratto dal modulo di test nell'applicazione stessa.

I test risultanti possono essere utilizzati per la verifica man mano che viene effettuato un ulteriore refactoring.

    
risposta data 07.10.2012 - 15:20
fonte

Leggi altre domande sui tag