Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

BDD tutta questione di comunicazione

Abbiamo sperimentato BDD sul campo e c’è piaciuto parecchio, per motivi del tutto inaspettati. Spesso il fallimento dei progetti è dato da questioni umane, di comprensione, di comunicazione, non da difficoltà tecniche. Capire cosa si deve fare e quando non è così semplice come sembra. Seguendo il Behaviour Driven Development abbiamo migliorato la comunicazione tra di noi, aumentato la comprensione del dominio e messo a fuoco le priorità. Il talk racconta la nostra esperienza diretta.

Related Books

Free with a 30 day trial from Scribd

See all
  • Login to see the comments

BDD tutta questione di comunicazione

  1. 1. MILAN november 28th/29th 2014 Riccardo Franconi e Francesco Tassi ! BDD Tutta questione di comunicazione Raccontiamo il BDD in un progetto reale rf@ideato.it ftassi@ideato.it - ideato
  2. 2. MILAN november 28th/29th 2014 @ftassi Francesco Tassi @ricfrank Riccardo Franconi
  3. 3. MILAN november 28th/29th 2014
  4. 4. MILAN november 28th/29th 2014 BDD • Vediamo cos’è • La nostra esperienza • Cosa abbiamo imparato
  5. 5. MILAN november 28th/29th 2014 “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)” – Wikipedia
  6. 6. MILAN november 28th/29th 2014 “Non basta scrivere software correttamente, bisogna anche scrivere il software corretto” – “BDD in Action” John Ferguson Smart
  7. 7. MILAN november 28th/29th 2014 BDD in breve • Esempi non test • Linguaggio condiviso • Business Value
  8. 8. MILAN november 28th/29th 2014 Esempi non test
  9. 9. MILAN november 28th/29th 2014 Esempi non test public function testSomma(){ //... }
  10. 10. MILAN november 28th/29th 2014 Esempi non test Scenario: Somma Dato che inserisco due numeri Allora Ottengo la loro somma public function testOperazioneSommaDovrebbeSommareDueNumeri() { //... }
  11. 11. MILAN november 28th/29th 2014 Linguaggio condiviso
  12. 12. MILAN november 28th/29th 2014
  13. 13. MILAN november 28th/29th 2014
  14. 14. MILAN november 28th/29th 2014
  15. 15. MILAN november 28th/29th 2014
  16. 16. MILAN november 28th/29th 2014 “Le parole sono importanti” – Moretti
  17. 17. MILAN november 28th/29th 2014 Linguaggio condiviso Scenario: Guest deve confermare la data prima di continuare con la prenotazione
  18. 18. MILAN november 28th/29th 2014 Linguaggio condiviso WTF!?! Scenario: Guest deve confermare la data prima di continuare con la prenotazione
  19. 19. MILAN november 28th/29th 2014 Linguaggio condiviso Scenario: Il giocatore deve confermare la data prima di continuare con la prenotazione
  20. 20. MILAN november 28th/29th 2014 Business value
  21. 21. MILAN november 28th/29th 2014 delivering Business value
  22. 22. MILAN november 28th/29th 2014 Come
  23. 23. MILAN november 28th/29th 2014 Come Discussione Obiettivo FFeFeaeatuaturteuresress Specifiche Eseguibili Specifiche Eseguibili EEsseemmppi i Specifiche Esempi Eseguibili
  24. 24. MILAN november 28th/29th 2014 Obiettivo (SMART)
  25. 25. MILAN november 28th/29th 2014 Obiettivo “Voglio aumentare il fatturato del 5% entro fine anno ricevendo più prenotazioni”
  26. 26. MILAN november 28th/29th 2014 Features Gherkin
  27. 27. MILAN november 28th/29th 2014 Features Gli strumenti che permettono di raggiungere l’obiettivo
  28. 28. MILAN november 28th/29th 2014 Esempi Gherkin
  29. 29. MILAN november 28th/29th 2014 Esempi Descrive come l’utente utilizza la feature
  30. 30. MILAN november 28th/29th 2014 Specifiche eseguibili Behat - PHPSpec
  31. 31. MILAN november 28th/29th 2014 Specifiche eseguibili Scenario: 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){…}
  32. 32. MILAN november 28th/29th 2014 Bola
  33. 33. MILAN november 28th/29th 2014 Obiettivo Per avere un vantaggio competitivo rispetto ai miei concorrenti Voglio avere un sistema di prenotazione online Che permetta ai miei clienti di prenotare da computer o smartphone
  34. 34. MILAN november 28th/29th 2014 Features Feature: Prenotazione campo Per rendere più semplice e aumentare il numero delle prenotazioni ricevute Come giocatore Voglio poter prenotare online un campo
  35. 35. MILAN november 28th/29th 2014 Esempi Scenario: Visualizzazione dei campi disponibili Scenario: Prenotazione di un campo Scenario: Mail di conferma della prenotazione Scenario: Prenotazione ricorrente ....
  36. 36. 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
  37. 37. MILAN november 28th/29th 2014 Esempi Autenticato!?! Scenario: Visualizzazione dei campi disponibili! Quando l'utente autenticato visita la pagina dei campi! Allora può vedere i campi divisi per sport
  38. 38. MILAN november 28th/29th 2014 Esempi -Q: “Ma l’utente quindi è un utente registrato?” Scenario: Visualizzazione dei campi disponibili! - A: “Si” - Q: “Perché?” - A: “Perché così lo posso rintracciare” - Q: “Ma, non basta il numero di telefono?” Quando l'utente autenticato visita la pagina dei campi! Allora può vedere i campi divisi per sport -A: “Beh, si” Autenticato!?!
  39. 39. MILAN november 28th/29th 2014 Esempi Scenario: Visualizzazione dei campi disponibili! Quando l'utente autenticato il giocatore visita la pagina dei campi! Allora può vedere i campi divisi per sport
  40. 40. 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
  41. 41. 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ì
  42. 42. 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 è disponibile!?!
  43. 43. MILAN november 28th/29th 2014 Esempi - Q: “cosa succede?” - A: “Salviamo solo le valide” - Q: “E delle altre come tieni traccia?” - A: “Inviami un elenco di quelle Scenario: Prenotazione ricorrente! l’admin sovrapposte” Quando 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 disponibile!?! campo per i prossimi 4 martedì non è se
  44. 44. MILAN november 28th/29th 2014 Esempi 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
  45. 45. 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
  46. 46. MILAN november 28th/29th 2014 Specifiche eseguibili Scenari espressivi - Outside in - Page Object pattern
  47. 47. MILAN november 28th/29th 2014 Scenari espressivi 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"! ...
  48. 48. MILAN november 28th/29th 2014 Scenari espressivi 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"! ...
  49. 49. MILAN november 28th/29th 2014 Scenari espressivi Scenario: Prenotazione! Quando un giocatore visita la pagina dei campi! E ne sceglie uno! E seleziona la data! ...
  50. 50. MILAN november 28th/29th 2014 Scenari espressivi 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
  51. 51. MILAN november 28th/29th 2014 Scenari espressivi 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
  52. 52. MILAN november 28th/29th 2014 Scenari espressivi 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
  53. 53. MILAN november 28th/29th 2014 Codice espressivo /**! * @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');! }
  54. 54. MILAN november 28th/29th 2014 Codice espressivo /**! * @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');! }
  55. 55. MILAN november 28th/29th 2014 Codice espressivo /**! * @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);! }
  56. 56. 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
  57. 57. MILAN november 28th/29th 2014 Outside in 1 2 3 5 4 phpspec Behat 6 1 - Discussione di uno scenario 2 - Step rosso 3 - Spec rossa 4 - Implementazione 7 5 - Refactoring 6 - Step verde 7 - Refactoring
  58. 58. MILAN november 28th/29th 2014 Cosa abbiamo imparato
  59. 59. MILAN november 28th/29th 2014 Comunicazione Migliore verso il cliente
  60. 60. MILAN november 28th/29th 2014 Comunicazione Migliore nel team
  61. 61. MILAN november 28th/29th 2014 Comprendi la funzionalità tramite esempi
  62. 62. MILAN november 28th/29th 2014 Non sviluppare oggi quello che puoi sviluppare domani
  63. 63. MILAN november 28th/29th 2014 Fai emergere problematiche impreviste
  64. 64. MILAN november 28th/29th 2014 Non dare niente per scontato
  65. 65. MILAN november 28th/29th 2014 Documentazione
  66. 66. MILAN november 28th/29th 2014 Comprensibile anche per non tecnici
  67. 67. MILAN november 28th/29th 2014 Compilabile Non obsoleta
  68. 68. MILAN november 28th/29th 2014 Ostacoli
  69. 69. MILAN november 28th/29th 2014 Cliente non partecipa
  70. 70. MILAN november 28th/29th 2014 È già tutto deciso
  71. 71. MILAN november 28th/29th 2014 Se lo sai descrivere l’hai capito
  72. 72. MILAN november 28th/29th 2014 Thanks
  73. 73. MILAN november 28th/29th 2014 https://joind.in/12837
  74. 74. 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

×