unit-testing - disorder - test driven development by example




Quali sono le principali differenze tra TDD e BDD? (10)

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?



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.


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.


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!


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


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ò.


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.


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 vengono 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.


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

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

  • BDD fornisce una comprensione più chiara di ciò che il sistema dovrebbe fare
    dal punto di vista dello sviluppatore e del cliente. Solo TDD
    fornisce allo sviluppatore 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.


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 "codice un po ', prova un po', codice 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 a cui 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 designer, analisti e così via.

In una frase, una delle migliori definizioni di BDD che ho found 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 della 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 a 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 un software eccellente in termini di tempo e budget.

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





bdd