Behaviour Driven Development - Tutta questione di comunicazione

74
MILAN november 28 th /29 th 2014 Riccardo Franconi e Francesco Tassi BDD Tutta questione di comunicazione Raccontiamo il BDD in un progetto reale [email protected] [email protected] - ideato

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 @ftassi

Francesco Tassi@ricfrank

Riccardo Franconi

MILAN november 28th/29th 2014

MILAN november 28th/29th 2014

BDD• Vediamo cos’è

• La nostra esperienza

• Cosa abbiamo imparato

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

BDD in breve• Esempi non test

• Linguaggio condiviso

• Business Value

MILAN november 28th/29th 2014

Esempi non test

MILAN november 28th/29th 2014

public function testSomma(){ //... }

Esempi non test

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

Linguaggio condiviso

MILAN november 28th/29th 2014

MILAN november 28th/29th 2014

MILAN november 28th/29th 2014

MILAN november 28th/29th 2014

MILAN november 28th/29th 2014

– Moretti“Le parole sono importanti”

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

Business value

MILAN november 28th/29th 2014

Business valuedelive

ring

MILAN november 28th/29th 2014

Come

MILAN november 28th/29th 2014

ComeDiscussione

Obiettivo FeaturesFeaturesFeaturesEsempiEsempiEsempi Specifiche

EseguibiliSpecifiche Eseguibili

Specifiche Eseguibili

MILAN november 28th/29th 2014

Obiettivo(SMART)

MILAN november 28th/29th 2014

“Voglio aumentare il fatturato del 5% entro fine anno ricevendo più prenotazioni”

Obiettivo

MILAN november 28th/29th 2014

FeaturesGherkin

MILAN november 28th/29th 2014

Gli strumenti che permettono di raggiungere l’obiettivo

Features

MILAN november 28th/29th 2014

EsempiGherkin

MILAN november 28th/29th 2014

Descrive come l’utente utilizza la feature

Esempi

MILAN november 28th/29th 2014

Specifiche eseguibiliBehat - PHPSpec

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

Bola

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

Cosa abbiamo imparato

MILAN november 28th/29th 2014

ComunicazioneMigliore verso il cliente

MILAN november 28th/29th 2014

ComunicazioneMigliore nel team

MILAN november 28th/29th 2014

Comprendi la funzionalità tramite esempi

MILAN november 28th/29th 2014

Non sviluppare oggi quello che puoi sviluppare domani

MILAN november 28th/29th 2014

Fai emergere problematiche impreviste

MILAN november 28th/29th 2014

Non dare niente per scontato

MILAN november 28th/29th 2014

Documentazione

MILAN november 28th/29th 2014

Comprensibileanche per non tecnici

MILAN november 28th/29th 2014

CompilabileNon obsoleta

MILAN november 28th/29th 2014

Ostacoli

MILAN november 28th/29th 2014

Cliente non partecipa

MILAN november 28th/29th 2014

È già tutto deciso

MILAN november 28th/29th 2014

Se lo sai descrivere l’hai capito

MILAN november 28th/29th 2014

Thanks

MILAN november 28th/29th 2014

https://joind.in/12837

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