Quali sono le principali differenze tra TDD e BDD? [chiuso]


129

Test Driven Development è stato di gran moda nella comunità .NET negli ultimi anni. Di recente ho sentito brontolii nella comunità ALT.NET su BDD. Che cos'è? Cosa lo differenzia dal TDD?


2
Vedi anche programmers.stackexchange.com/q/135218/76176 . Questa domanda è più sull'argomento lì.
Evan Carroll,

TDD è per micro test. BDD è per requisiti o macro test. Ascolta gli episodi da 1 a 8 sulla Piramide del Test e spiegherà questi livelli: agilenoir.biz/series/agile-thoughts
Lance Kind

Risposte:


104

Capisco che BDD si occupa più delle specifiche che dei test . È collegato al Domain Driven Design (non ti piacciono questi * acronimi DD?).

È collegato con un certo modo di scrivere storie utente, inclusi test di alto livello. Un esempio di Tom ten Thij :

Story: User logging in
  As a user
  I want to login with my details
  So that I can get access to the site

Scenario: User uses wrong password

  Given a username 'jdoe'
  And a password 'letmein'

  When the user logs in with username and password

  Then the login form should be shown again

(Nel suo articolo, Tom continua a eseguire direttamente questa specifica di prova in Ruby.)

Il papa di BDD è Dan North . Troverai un'ottima introduzione nel suo articolo introduttivo su BDD .

In questo video troverai un confronto tra BDD e TDD . Anche un'opinione su BDD come "TDD fatto bene" di Jeremy D. Miller

Aggiornamento del 25 marzo 2013

Il video qui sopra manca da un po '. Eccone uno recente di Llewellyn Falco, BDD vs TDD (spiegato) . Trovo la sua spiegazione chiara e precisa.


10
Il collegamento video sembra essere andato male
James Nail,

1
Christian, qual era il titolo del video e il nome del relatore? così possiamo rintracciarlo
smci

1
Sopra il link "Tom Ten Thij" è morto ormai .. ecco in diretta @ - tomtenthij.nl/2008/1/25/…
Kundan Pandit

Ecco un breve gioco che insegna i punti principali di BDD: agilenoir.biz/it/am-i-behavioral-or-not
Lance Kind

16

Per me la differenza principale tra BDD e TDD è messa a fuoco e formulazione. E le parole sono importanti per comunicare il tuo intento.

TDD orienta l'attenzione sui test. E poiché nel "vecchio mondo a cascata" i test arrivano dopo l'implementazione, questa mentalità porta a una comprensione e un comportamento sbagliati.

BDD orienta l'attenzione sul comportamento e sulle specifiche, quindi le menti della cascata sono distratte. Quindi BDD è più facilmente inteso come pratica di progettazione e non come pratica di prova.


2
TDD non ha nulla a che fare con il ciclo di vita del design del software "waterfall". Semmai, TDD è agnostico SDLC. L'intento di TDD è di scrivere la quantità minima di codice richiesta per far passare un test. In un certo senso il test diventa la specifica tecnica per il codice a cui aderire.
Gavin Baumanis,

1
TDD è "Prima prova" e può funzionare abbastanza bene con Agile. Questo non è accurato
Terrance

13

Sembra che ci siano due tipi di BDD.

Il primo è lo stile originale di cui parla Dan North e che ha causato la creazione dei framework in stile xBehave. Per me questo stile è principalmente applicabile per test di accettazione o specifiche su oggetti di dominio.

Il secondo stile è ciò che Dave Astels ha reso popolare e che, per me, è una nuova forma di TDD che ha alcuni seri vantaggi. Si concentra sul comportamento piuttosto che sui test e anche su classi di test di piccole dimensioni, cercando di arrivare al punto in cui si ha sostanzialmente una riga per metodo di specifica (test). Questo stile si adatta a tutti i livelli di test e può essere eseguito utilizzando qualsiasi framework di unit test esistente sebbene i framework più recenti (stile xSpec) aiutino a focalizzare il comportamento piuttosto che a testare.

C'è anche un gruppo BDD che potresti trovare utile:

http://groups.google.com/group/behaviordrivendevelopment/


7

Test-Driven Development è una metodologia di sviluppo software test-first, il che significa che richiede la scrittura del codice di test prima di scrivere il codice effettivo che verrà testato. Nelle parole di Kent Beck:

Lo stile qui è scrivere alcune righe di codice, quindi un test che dovrebbe essere eseguito, o ancora meglio, scrivere un test che non verrà eseguito, quindi scrivere il codice che lo farà funzionare.

Dopo aver capito come scrivere un piccolo pezzo di codice, ora, invece di limitarci a programmare, vogliamo ottenere un feedback immediato ed esercitarci "codifica un po ', prova un po', codifica un po ', prova un po'". Quindi scriviamo immediatamente un test per questo.

Quindi TDD è una metodologia tecnica di basso livello che i programmatori usano per produrre codice pulito che funzioni.

Lo sviluppo guidato dal comportamento è una metodologia che è stata creata sulla base di TDD, ma si è evoluta in un processo che non riguarda solo i programmatori e i tester, ma si occupa invece dell'intero team e di tutti i principali stakeholder, tecnici e non tecnici. BDD è partito da alcune semplici domande alle quali TDD non risponde bene: quanti test devo scrivere? Cosa dovrei effettivamente testare e cosa non dovrei? Quale dei test che scrivo sarà in effetti importante per l'azienda o per la qualità generale del prodotto e quali sono solo la mia eccessiva ingegneria?

Come puoi vedere, tali domande richiedono la collaborazione tra tecnologia e business. Gli stakeholder aziendali e gli esperti di dominio spesso possono dire agli ingegneri che tipo di test sembra essere utile, ma solo se i test sono test di alto livello che trattano importanti aspetti aziendali. BDD chiama "esempi" di test di tipo aziendale come "dimmi un esempio di come questa funzionalità dovrebbe funzionare correttamente" e riserva la parola "test" per controlli tecnici di basso livello come la convalida dei dati o il test delle integrazioni API. La parte importante è che mentre i test possono essere creati solo da programmatori e tester, gli esempi possono essere raccolti e analizzati da tutto il team di consegna — da progettisti, analisti e così via.

In una frase, una delle migliori definizioni di BDD che ho trovato finora è che BDD riguarda "avere conversazioni con esperti di dominio e usare esempi per ottenere una comprensione condivisa del comportamento desiderato e scoprire incognite". La parte di scoperta è molto importante. Man mano che il team di consegna raccoglie più esempi, iniziano a comprendere sempre di più il dominio aziendale e quindi riducono la loro incertezza su alcuni aspetti del prodotto che devono affrontare. Quando l'incertezza diminuisce, aumentano la creatività e l'autonomia del team di consegna. Ad esempio, ora possono iniziare a suggerire i propri esempi che gli utenti aziendali non pensavano fossero possibili a causa della loro mancanza di competenza tecnica.

Ora, avere conversazioni con gli esperti di business e di dominio suona alla grande, ma sappiamo tutti come spesso finisce in pratica. Ho iniziato il mio viaggio con la tecnologia come programmatore. Come programmatori, ci viene insegnato a scrivere codice: algoritmi, schemi di progettazione, astrazioni. Oppure, se sei un designer, ti viene insegnato progettare—Organizzare le informazioni e creare bellissime interfacce. Ma quando otteniamo i nostri lavori entry-level, i nostri datori di lavoro si aspettano che "consegniamo valore ai clienti". E tra questi clienti può esserci, per esempio ... una banca. Ma non sapevo quasi nulla del settore bancario, tranne come ridurre efficacemente il saldo del mio conto. Quindi dovrei in qualche modo tradurre ciò che ci si aspetta da me in codice ... Dovrei costruire un ponte tra il settore bancario e la mia competenza tecnica se voglio fornire qualsiasi valore. BDD mi aiuta a costruire un tale ponte su una base stabile di comunicazione fluida tra il team di consegna e gli esperti del dominio.

Per saperne di più

Se vuoi leggere di più su BDD, ho scritto un libro sull'argomento. "Scrivere grandi specifiche" esplora l'arte dell'analisi dei requisiti e ti aiuterà a imparare come costruire un ottimo processo BDD e usare esempi come parte centrale di quel processo. Il libro parla del linguaggio onnipresente, raccogliendo esempi e creando dagli esempi esempi di cosiddette specifiche eseguibili (test automatizzati), tecniche che aiutano i team BDD a distribuire software di qualità eccezionale in tempo e budget.

Se sei interessato all'acquisto di "Scrivere grandi specifiche" , puoi risparmiare il 39% con il codice promozionale 39nicieja2 :)


6

Ho sperimentato un po 'l'approccio BDD e la mia conclusione prematura è che BDD è adatto per usare l'implementazione del caso, ma non sui dettagli sottostanti. Il TDD oscilla ancora a quel livello.

BDD è anche usato come strumento di comunicazione. L'obiettivo è scrivere specifiche eseguibili che possano essere comprese dagli esperti del dominio.


2

Mi sembra che BDD sia un ambito più ampio. Implica quasi che venga utilizzato TDD, che BDD è la metodologia comprensiva che raccoglie le informazioni e i requisiti per l'utilizzo, tra l'altro, delle pratiche TDD per garantire un feedback rapido.


2

Con le mie ultime conoscenze in BDD rispetto a TDD, BDD si concentra sulla specificazione di ciò che accadrà dopo, mentre TDD si concentra sull'impostazione di una serie di condizioni e quindi sulla visualizzazione dell'output.


2

Lo sviluppo guidato dal comportamento sembra concentrarsi maggiormente sull'interazione e sulla comunicazione tra gli sviluppatori e anche tra gli sviluppatori e i tester.

L'articolo di Wikipedia ha una spiegazione:

Sviluppo guidato dal comportamento

Non sto praticando BDD da solo però.


2

Considera il vantaggio principale di TDD come design. Dovrebbe essere chiamato Test Driven Design. BDD è un sottoinsieme di TDD, chiamato Behavior Driven Design.

Consideriamo ora un'implementazione popolare di TDD - Unit Testing. Le unità in Unit Testing sono in genere un bit di logica che è la più piccola unità di lavoro che è possibile effettuare.

Quando si uniscono tali unità in modo funzionale per descrivere il comportamento desiderato alle macchine, è necessario comprendere il comportamento che si sta descrivendo alla macchina. Behavior Driven Design si concentra sulla verifica della comprensione da parte degli implementatori dei casi d'uso / requisiti / qualunque cosa e verifica l'implementazione di ciascuna funzionalità. BDD e TDD in generale servono allo scopo importante di informare la progettazione e il secondo scopo di verificare la correttezza dell'implementazione, specialmente quando cambia. BDD fatto correttamente coinvolge biz e dev (e qa), mentre Unit Testing (possibilmente erroneamente visto come TDD piuttosto che un tipo di TDD) viene tipicamente eseguito nel silo di sviluppo.

Vorrei aggiungere che i test BDD servono come requisiti di vita.



1

Non c'è differenza tra TDD e BDD. tranne che puoi leggere meglio i tuoi test e puoi usarli come requisiti. Se scrivi i tuoi requisiti con le stesse parole in cui scrivi i test BDD, puoi venire dal tuo cliente con alcuni dei tuoi test definiti pronti per scrivere il codice.


1

Differenza tra sviluppo guidato dal test (TDD) e sviluppo guidato dal comportamento (BDD)

  • BDD si concentra sull'aspetto comportamentale del sistema piuttosto che
    sull'aspetto dell'implementazione del sistema su cui si concentra TDD.

  • BDD offre una comprensione più chiara di ciò che il sistema dovrebbe fare
    dal punto di vista dello sviluppatore e del cliente. TDD
    fornisce allo sviluppatore solo una comprensione di ciò che il sistema dovrebbe fare.

  • BDD consente sia allo sviluppatore che al cliente di collaborare all'analisi dei requisiti contenuta nel codice sorgente del sistema.


1

In breve, esiste una grande differenza tra TDD e BDD. In TDD ci concentriamo principalmente sui dati dei test. In BDD il nostro obiettivo principale è il comportamento del progetto in modo che qualsiasi persona non programmatrice possa comprendere la linea di codice per conto del titolo di quel metodo


1

Ecco l'istantanea rapida:

  • TDD è solo il processo di test del codice prima di scriverlo!

  • DDD è il processo per essere informato sul Dominio prima di ogni ciclo di toccare il codice!

  • BDD è un'implementazione di TDD che introduce alcuni aspetti di DDD!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.