Behaviour Driven Development - Tutta questione di comunicazione
-
Upload
codemotion -
Category
Technology
-
view
105 -
download
0
Transcript of Behaviour Driven Development - Tutta questione di comunicazione
MILAN november 28th/29th 2014
Riccardo Franconi e Francesco Tassi !BDD Tutta questione di comunicazione Raccontiamo il BDD in un progetto reale [email protected] [email protected] - ideato
MILAN november 28th/29th 2014
– Wikipedia
“behavior-driven development (abbreviato in BDD e traducibile in Sviluppo guidato dal
comportamento) è una metodologia di sviluppo del software basata sul test-driven development
(TDD)”
MILAN november 28th/29th 2014
– “BDD in Action” John Ferguson Smart
“Non basta scrivere software correttamente, bisogna anche scrivere il software corretto”
MILAN november 28th/29th 2014
Scenario: Somma Dato che inserisco due numeri Allora Ottengo la loro somma public function testOperazioneSommaDovrebbeSommareDueNumeri(){ //... }
Esempi non test
MILAN november 28th/29th 2014
Scenario: Guest deve confermare la data prima di continuare con la prenotazione
Linguaggio condiviso
MILAN november 28th/29th 2014
Scenario: Guest deve confermare la data prima di continuare con la prenotazione
Linguaggio condiviso
WTF!?!
MILAN november 28th/29th 2014
Scenario: Il giocatore deve confermare la data prima di continuare con la prenotazione
Linguaggio condiviso
MILAN november 28th/29th 2014
ComeDiscussione
Obiettivo FeaturesFeaturesFeaturesEsempiEsempiEsempi Specifiche
EseguibiliSpecifiche Eseguibili
Specifiche Eseguibili
MILAN november 28th/29th 2014
“Voglio aumentare il fatturato del 5% entro fine anno ricevendo più prenotazioni”
Obiettivo
MILAN november 28th/29th 2014
Specifiche eseguibiliScenario: Prenotazione con email non valida! Dato che un giocatore ha scelto di prenotare un campo per "domani"! Quando completa la prenotazione con una mail non valida! Allora visualizza che deve inserire una mail valida!!!/**! * @Given /^che un ospite ha scelto di prenotare un campo per "domani"$/! */!public function haSceltoDiPrenotarePerIl($bookingDate = null){…}
MILAN november 28th/29th 2014
Per avere un vantaggio competitivo rispetto ai miei concorrenti Voglio avere un sistema di prenotazione onlineChe permetta ai miei clienti di prenotare da computer o smartphone
Obiettivo
MILAN november 28th/29th 2014
Feature: Prenotazione campo Per rendere più semplice e aumentare il numero delle prenotazioni ricevute Come giocatore Voglio poter prenotare online un campo
Features
MILAN november 28th/29th 2014
Scenario: Visualizzazione dei campi disponibili Scenario: Prenotazione di un campo Scenario: Mail di conferma della prenotazione Scenario: Prenotazione ricorrente ....
Esempi
MILAN november 28th/29th 2014
Esempi
Scenario: Visualizzazione dei campi disponibili! Quando l'utente autenticato visita la pagina dei campi! Allora può vedere i campi divisi per sport
MILAN november 28th/29th 2014
Scenario: Visualizzazione dei campi disponibili! Quando l'utente autenticato visita la pagina dei campi! Allora può vedere i campi divisi per sport
Esempi
Autenticato!
?!
MILAN november 28th/29th 2014
Scenario: Visualizzazione dei campi disponibili! Quando l'utente autenticato visita la pagina dei campi! Allora può vedere i campi divisi per sport
Esempi
-Q: “Ma l’utente quindi è un utente registrato?”
- A: “Si” - Q: “Perché?” - A: “Perché così lo posso rintracciare” - Q: “Ma, non basta il numero di telefono?”
-A: “Beh, si”
Autenticato!
?!
MILAN november 28th/29th 2014
Scenario: Visualizzazione dei campi disponibili! Quando l'utente autenticato il giocatore visita la pagina dei campi! Allora può vedere i campi divisi per sport
Esempi
MILAN november 28th/29th 2014
Esempi
Scenario: Visualizzazione dei campi disponibili! Quando il giocatore visita la pagina dei campi! Allora può vedere i campi divisi per sport
—- spreco
MILAN november 28th/29th 2014
Scenario: Prenotazione ricorrente!Quando l’admin sceglie un campo!E seleziona il prossimo martedì!E seleziona la data di fine ripetizione tra 4 martedì!E la ripetizione "settimanale"!E completa la prenotazione!Allora ha prenotato quel campo per i prossimi 4 martedì
Esempi
MILAN november 28th/29th 2014
Scenario: Prenotazione ricorrente!Quando l’admin sceglie un campo!E seleziona il prossimo martedì!E seleziona la data di fine ripetizione tra 4 martedì!E la ripetizione "settimanale"!E completa la prenotazione!Allora ha prenotato quel campo per i prossimi 4 martedì
Esempi
se non è disp
onibile!?!
MILAN november 28th/29th 2014
Esempi
Scenario: Prenotazione ricorrente!Quando l’admin sceglie un campo!E seleziona il prossimo martedì!E seleziona la data di fine ripetizione tra 4 martedì!E la ripetizione "settimanale"!E completa la prenotazione!Allora ha prenotato quel campo per i prossimi 4 martedì
se non è disp
onibile!?!
- Q: “cosa succede?”- A: “Salviamo solo le valide”
- Q: “E delle altre come tieni traccia?” - A: “Inviami un elenco di quelle
sovrapposte”
MILAN november 28th/29th 2014
Scenario: Prenotazione ricorrente sovrapposta!Dato che il giocatore ha completato una prenotazione!Quando l'admin crea una prenotazione ricorrente che si sovrappone a quella esistente!Allora ha prenotato quel campo solo per le giornate disponibili!E riceve un riepilogo delle prenotazioni sovrapposte
Esempi
MILAN november 28th/29th 2014
Esempi++ conoscenza del dominio
Scenario: Prenotazione ricorrente sovrapposta!Dato che il giocatore ha completato una prenotazione!Quando l'admin crea una prenotazione ricorrente che si sovrappone a quella esistente!Allora ha prenotato quel campo solo per le giornate disponibili!E riceve un riepilogo delle prenotazioni sovrapposte
MILAN november 28th/29th 2014
Specifiche eseguibiliScenari espressivi - Outside in - Page Object pattern
MILAN november 28th/29th 2014
Scenario: Prenotazione! Quando un giocatore visita la pagina dei campi! E ne sceglie uno! E seleziona il giorno dalla select "booking_day"! E seleziona il mese dalla select "booking_month"! E seleziona l'anno dalla select "booking_year"! ...
Scenari espressivi
MILAN november 28th/29th 2014
Scenario: Prenotazione! Quando un giocatore visita la pagina dei campi! E ne sceglie uno! E seleziona il giorno dalla select "booking_day"! E seleziona il mese dalla select "booking_month"! E seleziona l'anno dalla select "booking_year"! ...
Scenari espressivi
MILAN november 28th/29th 2014
Scenario: Prenotazione! Quando un giocatore visita la pagina dei campi! E ne sceglie uno! E seleziona la data! ...
Scenari espressivi
MILAN november 28th/29th 2014
Scenario: Prenotazione con email non valida!! Quando un giocatore visita la pagina dei campi! E ne sceglie uno! E seleziona la data! E completa la prenotazione con una mail non valida! Allora visualizza che deve inserire una mail valida
Scenari espressivi
MILAN november 28th/29th 2014
Scenario: Prenotazione con email non valida!! Quando un giocatore visita la pagina dei campi! E ne sceglie uno! E seleziona la data! E completa la prenotazione con una mail non valida! Allora visualizza che deve inserire una mail valida
Scenari espressivi
MILAN november 28th/29th 2014
Background:! Quando un giocatore visita la pagina dei campi! E ne sceglie uno! E seleziona la data!!Scenario: Prenotazione con email non valida! E completa la prenotazione con una mail non valida! Allora visualizza che deve inserire una mail valida
Scenari espressivi
MILAN november 28th/29th 2014
/**!* @Given /^completa la prenotazione con una mail non valida$/!*/!public function completaLaPrenotazioneConUnaMailNonValida()!{!! $page = $this->mink->getSession()->getPage();!!! $this->player = $this->createPlayer();!! $this->player->email = 'fooinvalidemail';!! $page->fillField('firstName', $this->player->firstName);!! $page->fillField('lastName', $this->player->lastName);!! $page->fillField('email', $this->player->email);!! $page->fillField('phone', $this->player->phoneNumber);!!! $page->pressButton('book');!}
Codice espressivo
MILAN november 28th/29th 2014
/**!* @Given /^completa la prenotazione con una mail non valida$/!*/!public function completaLaPrenotazioneConUnaMailNonValida()!{!! $page = $this->mink->getSession()->getPage();!!! $this->player = $this->createPlayer();!! $this->player->email = 'fooinvalidemail';!! $page->fillField('firstName', $this->player->firstName);!! $page->fillField('lastName', $this->player->lastName);!! $page->fillField('email', $this->player->email);!! $page->fillField('phone', $this->player->phoneNumber);!!! $page->pressButton('book');!}
Codice espressivo
MILAN november 28th/29th 2014
/**! * @Given /^completa la prenotazione con una mail non valida$/!*/!public function completaLaPrenotazioneConUnaMailNonValida()!{!! $bookingPage = $this->getBookingPage();!!! $this->player = $this->createPlayer();!! $this->player->email = 'fooinvalidemail';!! $this->bookingPage->book($this->player);!}
Codice espressivo
MILAN november 28th/29th 2014
class BookingPage !{!! public function book($player)!! {!
! ! $this->page->fillField('firstName', $player->firstName);!! $this->page->fillField('lastName', $player->lastName);!! $this->page->fillField('email', $player->email);!! $this->page->fillField('phone', $player->phoneNumber);!!! $this->page->pressButton('book');!}!
}
Codice espressivo
MILAN november 28th/29th 2014
Outside in
Behat
phpspec
1
2
3
45
6
7
1 - Discussione di uno scenario
2 - Step rosso
3 - Spec rossa
4 - Implementazione
5 - Refactoring
6 - Step verde
7 - Refactoring
MILAN november 28th/29th 2014
Risorse• http://www.ideato.it/tag/bdd!
• Bdd in Action: Behavior-driven Development for the Whole Software Lifecycle di John
Ferguson Smart!
• Specification by Example: How Successful Teams Deliver the Right Software di Gojko
Adzic!
• The RSpec Book: Behaviour Driven Development di Dave Astels, Bryan Helmkamp, Dan
North, Zac David Chelimsky