Domanda Differenze TDD e BDD


Onestamente non vedo la differenza tra BDD e TDD. Voglio dire, entrambi sono solo test se ciò che è previsto accade. Ho visto i test BDD che sono così dettagliati che praticamente contano come test TDD, e ho visto test TDD così vaga da dare alla scatola nera un sacco di codice. Diciamo che sono abbastanza convinto che avere entrambi è meglio.

Ecco una domanda divertente però. Da dove comincio? Comincio con test BDD di alto livello? Comincio con i test TDD di basso livello?


44
2017-12-09 06:24


origine


risposte:


Onestamente non vedo la differenza tra BDD e TDD.

Questo perché non ce n'è.

Voglio dire, entrambi sono solo test se ciò che è previsto accade.

È sbagliato. BDD e TDD non hanno assolutamente nulla a che fare con i test. Nessuna. Nada. Zilch. Cerniera lampo. Nix. Non nel minimo.

Sfortunatamente, TDD ha la parola "test" in praticamente tutto (non solo nel suo nome, ma anche nel framework di test, unit test, TestCase (la classe da cui erediti fisicamente), FooTest (la classe che tipicamente tiene i tuoi test), testBar (il tipico schema di denominazione per un metodo di prova), più una terminologia legata ai test come "asserzione" e "verifica") che induce alcune persone a credere che in realtà fa avere qualcosa a che fare con i test. Quindi, alcune persone intelligenti hanno detto: "Ehi, cambiamo solo il nome" per rimuovere ogni potenziale confusione.

E questo è ciò che è BDD. È solo TDD con qualsiasi terminologia relativa ai test sostituita da terminologia relativa agli esempi di comportamento:

  • Prova → Esempio
  • Asserzione → Aspettativa
  • assert → should
  • Unità → Comportamento
  • Verifica → Specifiche
  • … e così via

BDD è solo TDD con parole diverse. Se fai correttamente TDD, stai facendo BDD. La differenza è che, a patto di credere almeno nella debole forma dell'ipotesi di Sapir-Whorf, le diverse parole rendono più facile farlo nel modo giusto.


63
2017-12-09 10:02



BDD è da punto di vista dei clienti e si concentra sul comportamento previsto dell'intero sistema.

TDD è da punto di vista degli sviluppatori e si concentra sull'implementazione di una unità / classe / funzione. Tra l'altro trae vantaggio da una migliore architettura (Design per testabilità, minore accoppiamento tra moduli).

A partire dal punto di vista tecnico (come scrivere il "test") sono simili.

Vorrei (da un punto di vista agile) inizia con un bdd-userstory e implementalo usando TDD.


27
2017-12-09 08:11



Da quello che ho raccolto su Wikipedia, BDD include test di accettazione e controllo qualità che non possono essere eseguiti senza le parti interessate / l'input dell'utente. Anche BDD usa un linguaggio naturale per specificare il suo test mentre TDD di solito usa il linguaggio di programmazione. Potrebbe esserci qualche sovrapposizione tra i due, ma penso che non sia la vaghezza ma il linguaggio di BDD sia la principale differenza.

Per quanto riguarda dove devi iniziare, beh questo dipende molto dal tuo processo di sviluppo, vero? Presumo che se si sta facendo dal basso verso l'alto che si scriverà prima TDD e una volta raggiunto il livello più alto verrà utilizzato BDD per verificare se tali funzionalità funzionano come previsto.

Come notato da k3b: la differenza principale sarebbe che BDD è orientato al dominio dei problemi mentre TDD è più orientato al dominio della soluzione.


4
2017-12-09 08:09



Basta copiare la risposta da Matthew Flynn che sono più d'accordo che "TDD e BDD non hanno nulla a che fare con i test":

Behavior Driven Development è un'estensione / revisione di Test Driven Development. Il suo scopo è quello di aiutare le persone che escogitano il sistema (cioè gli sviluppatori) a identificare test appropriati da scrivere, cioè test che riflettano il comportamento desiderato dagli stakeholder. L'effetto finisce per essere lo stesso: sviluppare il test e quindi sviluppare il codice / sistema che supera il test. La speranza in BDD è che i test siano effettivamente utili per mostrare che il sistema soddisfa i requisiti.

AGGIORNARE

Le unità di codice (metodi individuali) possono essere troppo granulari per rappresentare il comportamento rappresentato dai test comportamentali, ma è comunque necessario testarli con test unitari per garantire che funzionino in modo appropriato. Se questo è ciò che intendi con i test "TDD", allora sì, ne hai ancora bisogno.


4
2017-07-20 19:53



Un fantastico articolo sulle differenze tra TDD e BDD:

http://www.lostechies.com/blogs/sean_chambers/archive/2008/12/07/starting-with-bdd-vs-starting-with-tdd.aspx

Dovresti darti tutto ciò che devi sapere, compresi problemi con entrambi ed esempi.


2
2017-12-09 10:27



BDD parla di ottenere il tuo TDD giusto. Fornisce "struttura e diciplene" al tuo TDD. Ti guida nel testare la cosa giusta e fare la giusta quantità di test. Ecco un piccolo post fantastico su BDD e TDD,

http://codingcraft.wordpress.com/2011/11/12/bdd-get-your-tdd-right/


2
2017-11-12 14:05



La terminologia è diversa, ma nel mio lavoro uso TDD per sviluppare dettagli, principalmente per unit test, e il BDD è di livello più alto, per cliente, QA o uomo no-tech.


0
2017-10-23 04:43



La principale differenza è solo la dicitura. BDD utilizza uno stile più dettagliato in modo che possa essere letto quasi come una frase.


0
2017-08-26 08:00



Penso che il più grande contributo di BDD rispetto a TDD o ad altri approcci, sia rendere le persone non tecniche (proprietari di prodotti / clienti) parte del processo di sviluppo del software a tutti i livelli.

La scrittura di scenari eseguibili in lingue naturali ha quasi colmato il divario tra il requisito e la consegna.

I proprietari dei prodotti possono eseguire personalmente gli scenari che ha scritto e testare con diversi set di dati, se vuole giocare il comportamento del codice scritto dal team di sviluppo.

È stupefacente! Il cliente è seduto al centro e precisamente non chiede solo ciò che vuole ma verifica e sperimenta i risultati finali.


0
2018-05-09 13:28