BDD: Introduzione


9

Sto iniziando con BDD e questa è la mia storia:

Feature: Months and days to days
    In order to see months and days as days
    As a date conversion fan
    I need a webpage where users can enter
    days and months and convert them to days.

Ho dei dubbi ...

Devo scrivere i miei scenari prima di scrivere qualcosa o dovrei prima scrivere uno scenario e poi scrivere codice, scrivere di nuovo uno scenario e quindi scrivere codice, e così via ...?

Se dovessi scrivere i miei scenari prima, i miei passaggi possono essere approvati e il codice di produzione non viene ancora eseguito?

Quando devo effettuare il refactoring sul mio codice? Dopo che la funzionalità è stata eseguita o dopo ogni implementazione dello scenario?


"i miei passaggi possono essere approvati e il codice di produzione non viene ancora eseguito?" Cosa significa questo? Spiega per favore.
S.Lott

Risposte:


12

Dalla storia, deduco che stai programmando da solo.

Normalmente lo scopo di BDD è consentire conversazioni, in particolare tra l'azienda e gli sviluppatori, in modo che il team possa essere sicuro di aver raggiunto un'intesa comune. Ci piace anche includere tester, perché possono individuare quando abbiamo perso scenari.

Se lo fai da solo, prendi un'anatra di gomma e spiega il comportamento della tua applicazione all'anatra. Fai alcuni esempi di come dovrebbe funzionare. Quelli saranno i tuoi scenari.

Per cominciare, suggerirei di non automatizzare quegli scenari. Puoi scriverli se vuoi. Ricorda che i risultati aziendali che hai condiviso con Duck sono al livello giusto per esprimerli. Ora dovresti avere un'idea di come si comporta l'app e puoi scorrere manualmente gli scenari. Mi piace trattare tutto ciò che non funziona ancora come un bug . A volte ho iniziato con l'automazione, ma solo quando so molto bene come funziona il sistema, ho familiarità con gli strumenti e l'interfaccia utente è ben compresa. Anche allora spesso devo rielaborarlo un po 'quando ho scritto il codice.

A un livello inferiore, dì alla tua anatra come si comporterà ogni classe. Fornisci alcuni esempi. Le papere di gomma sono perfettamente in grado di comprendere il linguaggio tecnico. Ora hai il tuo BDD a livello di unità, noto anche come unit test. Il ciclo del refattore rosso-verde avviene qui. (Non ho più bisogno di refactoring più di tanto, perché sto pensando alle responsabilità delle mie classi, esprimendole in un linguaggio orientato al business, e tende comunque a cadere in un modo abbastanza bello. Ma io lo sto facendo da un po 'di tempo. Va bene se lo fai.)

Non riformattare troppo. Vogliamo ancora ricevere feedback sul nostro codice, perché ci sono sempre cose che non sappiamo che non sappiamo . La perfezione è il tuo nemico qui. Renderlo abbastanza buono, renderlo leggibile, quindi andare avanti. Se devi apportare qualcosa di perfetto per apportare ulteriori modifiche, fallo quando apporti ulteriori modifiche.

Se hai l'opportunità di ottenere feedback sui tuoi scenari dagli stakeholder aziendali, ma non sono soddisfatti di te, puoi inviare loro degli scenari non appena li hai scritti e prima di automatizzarli. Potresti anche voler inviare un modello dell'interfaccia utente, in modo che possano correlare le parole alle azioni. Non andare troppo avanti nella codifica con questo. Lavora con il presupposto che ciò che hai già fatto sia sbagliato e devi ottenere un feedback per scoprire come.

Come ultimo suggerimento, generalmente non formulare storie dal punto di vista di un utente (scenari, sì, ma non storie). Non sono storie utente. Dovrebbe probabilmente leggere qualcosa del tipo:

In order to attract people to my website
As @thom
I want users to easily convert months and days to days.

C'è comunque qualche obiettivo di livello superiore che stai cercando. Questo ti aiuterà anche a trarre le capacità di cui hai bisogno. Buona fortuna e scuse per il post extra lungo.


1
La parte "papera di gomma" è fantastica. Pensavo di essere l'unico a pensarci!
NoChance,

3

Devo scrivere i miei scenari prima di scrivere qualcosa o dovrei prima scrivere uno scenario e poi scrivere codice, scrivere di nuovo uno scenario e quindi scrivere codice, e così via ...?

Entrambi funzioneranno. Sceglierne uno.

Non importa molto.

Più scenari hai, più design puoi realizzare in anticipo.

Più scenari hai, più tempo ci vorrà per fare qualcosa.

Quando devo effettuare il refactoring sul mio codice? Dopo che la funzionalità è stata eseguita o dopo ogni implementazione dello scenario?

No. Rifattori quando diventa difficile progettare il prossimo scenario.


Ho fatto una nuova domanda ... "Se dovessi scrivere i miei scenari prima ...". Puoi dare un'occhiata per favore? Grazie mille.
Thom

1
@ S.Lott Buona risposta ma un cavillo: basandomi sull'utilità del ciclo rosso-verde-refattore, suggerirei continuamente il refactoring durante il processo BDD, subito dopo ogni test verde.
Rein Henrichs,

@Rein Henrichs: Un'alternativa sarebbe quella di notare che il refactoring per completare tutti i test per una storia avviene come parte inevitabile e inevitabile della codifica. Anche un design eccezionale non può coprire tutte le basi. Quel refactoring non sembrava degno di nota. Tuttavia, lo hai sottolineato bene. Il refactoring tra le storie, tuttavia, è un'operazione più seria e che richiede tempo, poiché il set di funzionalità si evolve con l'accrescimento delle storie.
S.Lott

3

Usa i verbi descrittivi

Feature: CONVERT Months and days to days

Non prendere decisioni di progettazione nelle storie ["I need a webpage" è una decisione di progettazione]

As a date conversion fan
I want to convert days and months into days

Usa gli obiettivi di valore aziendale nelle storie

So that [some business reason]

Scrivi quante più funzionalità e storie puoi prima di iniziare a scrivere codice; le storie si informano , influenzano le caratteristiche e informano il design.

Refactor dopo ogni storia. Rosso-Verde-Refactor.


+1, buona risposta. Ma il "modo BDD" non è il refactoring come parte del ciclo interno di test unitari piuttosto che del ciclo esterno di test di accettazione?
pdr,

@pdr: questo è ciò che intendevo, refactor dopo ogni storia. I test BDD / TDD scalano dall'unità all'accettazione, c'è solo un ciclo (nella mia mente) ;-)
Steven A. Lowe

Perché "I need a pagepage" è una decisione di progettazione? Grazie!
Thom

@thom: le storie degli utenti dovrebbero esprimere ciò che l'utente vuole essere in grado di fare, non come sarà implementato. In altre parole, caratteristiche, storie e scenari sono requisiti e specifiche funzionali. Non prendere decisioni di progettazione fino a quando non avrai il quadro completo. In questo esempio (presumibilmente artificiale), le esigenze aziendali dell'utente in generale potrebbero indicare che una pagina Web potrebbe non essere la soluzione più conveniente: un widget desktop o un'app mobile potrebbe essere migliore, a seconda di come / quando devono usarla. I dettagli dell'implementazione ingombrano le storie e potrebbero bloccarti in un progetto specifico troppo presto.
Steven A. Lowe,
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.