Prima di tutto, lascia che aggiunga un po 'di chiarezza. BDD non è esattamente TDD. Un sacco di persone confondono i due perché entrambi iniziano con il concetto di scrivere test prima di codificare. BDD è stato descritto come "migliore TDD" o "facendo TDD giusto", ma non sono sicuro che sia valido. Personalmente, considero BDD come un TDD rifocalizzato.
L'idea è che sei in grado di fare una serie di cose a cui molti altri approcci a volte fanno fatica, e questi sono alcuni dei vantaggi che probabilmente stai cercando:
- Il tuo codice di prova cattura tutti i tuoi requisiti in una forma leggibile dall'uomo. Non sto solo parlando di nomi di metodi e codice abilmente fattorizzato, ma invece l'uso di un buon framework BDD ti permette di scrivere i tuoi test usando la lingua della funzione o del testo della storia che avresti scritto in un documento dei requisiti. (Guarda come StoryQ per dotNet come esempio).
- Il tuo codice di test in realtà finisce per testare i tuoi requisiti. Se scrivi il test nella lingua della specifica della tua funzione, finisci per testare direttamente le specifiche.
- L'output del test viene letto come un report. La maggior parte degli scenari di test unitari si traduce in un gruppo di luci o di flag su schermo per indicare il superamento o il fallimento, ma non si ha idea di dove si sia verificato l'errore effettivo oltre la posizione approssimativa in cui è stato attivato. L'output BDD fornisce informazioni sull'errore indipendentemente dal fatto che si sia verificato l'errore nell'esecuzione del codice o nelle parti di configurazione del test, che mi portano al punto successivo ...
- Il tuo codice di test diventa altamente dettagliato e ti consente di individuare più facilmente la natura dei guasti nel tuo test / codice.
- Il feedback continuo dal vivo attraverso i test significa che tendi a lavorare un po 'più efficientemente, specialmente se stai applicando rigorosamente un processo Test Driven. Personalmente, scrivo tutti i miei test prima di iniziare a scrivere qualsiasi codice. È una sorta di design up-front senza essere troppo legato a qualcosa di specifico, e facilmente refactored se cambio idea in seguito.
Per quello che vale, io uso BDD indipendentemente dal fatto che sia nel mio lavoro, o da parte mia progetti a casa. Sto lentamente convertendo gli altri nel mio ambiente di lavoro con questo approccio, perché sono in grado di mostrare i vantaggi in termini di produttività e il piacevole effetto collaterale di avere test più chiari e leggibili, e un codice più pulito e leggibile - anche se quell'ultimo bit non è sottinteso come beneficio BDD, ma solo per mostrarti che personalmente mi sono trovato più inclinato in quella direzione.
Saluti.