BDD - TDD in un modo BDD

In TDD, il termine "Test di accettazione" è fuorviante. I test di accettazione rappresentano effettivamente il comportamento previsto del sistema. Nelle pratiche Agile, viene enfatizzata la collaborazione dell'intero team e le interazioni con il cliente e gli altri stakeholder. Ciò ha determinato la necessità di utilizzare termini facilmente comprensibili da tutte le persone coinvolte nel progetto.

TDD ti fa pensare al necessario Behavior e quindi il termine "comportamento" è più utile del termine ‘Test’. BDD è Test Driven Development con un vocabolario che si concentra sul comportamento e non sui test.

Nelle parole di Dan North, "Ho trovato il passaggio dal pensiero nei test al pensiero nel comportamento così profondo che ho iniziato a fare riferimento a TDD come BDD, o Behaviour Driven Development". TDD si concentra su come funzionerà qualcosa, BDD si concentra sul motivo per cui lo costruiamo.

BDD risponde alle seguenti domande spesso affrontate dagli sviluppatori:

Domanda Risposta
Dove iniziare? fuori dentro
Cosa provare? Storie degli utenti
Cosa non testare? qualunque altra cosa

Queste risposte danno luogo alla struttura della storia come segue:

Story Framework

Come un [Role]

Voglio [Feature]

così che [Benefit]

Ciò significa: "Quando a Feature viene eseguito, il risultato Benefit sta alla persona che suona il file Role.'

BDD risponde inoltre alle seguenti domande:

Domanda Risposta
Quanto testare in una volta? molto poco concentrato
Come chiamare i loro test? modello di frase
Come capire perché un test fallisce documentazione

Queste risposte danno come risultato il framework di esempio:

Example Framework

Given qualche contesto iniziale,

When si verifica un evento,

Then garantire alcuni risultati.

Ciò significa: "A partire dal contesto iniziale, quando si verifica un particolare evento, sappiamo quali sono i risultati should be. "

Pertanto, l'esempio mostra il comportamento previsto del sistema. Gli esempi vengono utilizzati per illustrare diversi scenari del sistema.

Storia e scenari

Consideriamo la seguente illustrazione di Dan North su un sistema ATM.

Storia

As a cliente,

I want prelevare contanti da un bancomat,

so that Non devo fare la fila in banca.

Scenari

Ci sono due possibili scenari per questa storia.

Scenario 1 - L'account è in credito

Given l'account è in credito

And la carta è valida

And il distributore contiene contanti

When il cliente richiede contanti

Then assicurarsi che l'account venga addebitato

And assicurarsi che il contante venga erogato

And assicurarsi che la carta venga restituita

Scenario 2 - Il conto è scoperto oltre il limite di scoperto

Given il conto è scoperto

And la carta è valida

When il cliente richiede contanti

Then assicurarsi che venga visualizzato un messaggio di rifiuto

And assicurarsi che non vengano erogati contanti

And assicurarsi che la carta venga restituita

L'evento è lo stesso in entrambi gli scenari, ma il contesto è diverso. Quindi, i risultati sono diversi.

Ciclo di sviluppo

Il ciclo di sviluppo per BDD è un outside-in approccio.

Step 1- Scrivi un esempio di valore aziendale di alto livello (esterno) (utilizzando Cucumber o RSpec / Capybara) che diventi rosso. (RSpec produce un framework BDD nel linguaggio Ruby)

Step 2 - Scrivi un esempio RSpec di livello inferiore (interno) per il primo passaggio dell'implementazione che diventa rosso.

Step 3 - Implementa il codice minimo per superare l'esempio di livello inferiore, vederlo diventare verde.

Step 4 - Scrivi il successivo esempio RSpec di livello inferiore spingendo verso il passaggio 1 che diventa rosso.

Step 5 - Ripeti i passaggi Passaggio 3 e Passaggio 4 fino a quando l'esempio di alto livello nel Passaggio 1 diventa verde.

Note - I seguenti punti dovrebbero essere tenuti a mente:

  • Red/green lo stato è uno stato di autorizzazione.

  • Quando i tuoi test di basso livello sono verdi, hai il permesso di scrivere nuovi esempi o refactoring dell'implementazione esistente. Non devi, nel contesto del refactoring, aggiungere nuove funzionalità / flessibilità.

  • Quando i tuoi test di basso livello sono rossi, hai il permesso di scrivere o modificare il codice di implementazione solo per rendere verdi i test esistenti. Devi resistere all'impulso di scrivere il codice per superare il tuo prossimo test, che non esiste, o implementare funzionalità che potresti pensare siano buone (il cliente non l'avrebbe chiesto).