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 BRZMI PIĘKNIE.
TYLKO DLACZEGO CZĘSTO SIE NIE UDAJE?
@tommykaczmarek
@SCENARIO
@Given
@When
@Then
Scenario Aktywacja karty
Given Użytkownik ma nieaktywną karte
When Użytkownik aktywuje karte podając $pin
Then Aktywacja m...
public class CardActivationSteps {
    private BankCardApi bankCardApi;
    private BankCard bankCard;
    public CardActi...
Scenario Użytkownik zakłada konto w serwisie
Given Użytkownik zakłada konto
When Użytkownik poda imie $imie oraz nazwisko ...
KOMUNIKACJA
DYSKUSJA
PRZEJRZYSTOŚĆ
SPISYWANIE
SCENARIUSZY
A WIĘC CHCESZ UŻYĆ W PROJEKCIE
BDD...
“Mamy scruma ale nie robimy standupów
bo nie mamy problemów z komunikacją”
DLACZEGO CHCĘ UŻYWAĆ NOWEGO
NARZĘDZIA
Co chcę osiągnąć?
Jak będę mierzyć efektywność?
“Przecież to prawie jak mamy u siebie”
“Analityk będzie pisać scenariusze w
formule Given/When/Then”
SPECYFIKACJE SĄ
SPISYWANE
“To taki inny sposób na skrypty testowe”
Scenario ­ Zmiana miasta w profilu użytkownika
Given Użytkownik zaloguje się do serwisu jako zenon 
And Wprowadzi hasło ze...
WARUNKI BRZEGOWE
Scenario Użytkownik zakłada konto w serwisie
Given Użytkownik zakłada konto
When Użytkownik poda imie $im...
NAZYWAJ SYTUACJE
DOSŁOWNIE
Given Gateway nie otrzyma ramki RFVS przez 30 sekund
And Gateway nie może wysłać ramki H3DE do mediatora
When Użytkownik w...
Given Mediator jest rozłączony
When Użytkownik wykona akcje ROZPOZNAJ
Then Na ekranie wyświetli sie: System nie działa, sp...
“Ten scenariusz jest bardzo podobny do
poprzedniego. Utworzymy sobie wspólną
baze początkowych kroków dla
scenariuszy.”
“W...
DOBRE INTENCJE.
NIEKONTROLOWANE KOPIOWANIE.
OBSZERNE KROKI USTAWIAJĄCE
SYSTEM
“Scenariusze będą uaktualniane w
następnym sprincie po wdrożeniu na
produkcje.”
CZY KTOŚ BĘDZIE
CZYTAĆ
SPECYFIKACJE?
...PO NAPISANIU
NIECZYTANE = NIECZYTELNE
BARDZO SZYBKO..
KTO BĘDZIE ODBIORCĄ
SPECYFIKACJI?
DEVELOPERZY LEPIEJ
ZROZUMIEJĄ TESTY
“Na unit testy nie ma czasu bo mamy
JBehave.”
TESTY Z
NASTAWIENIEM NA
ZACHOWANIE
def "should activate inactive banking card"() {
    given: "Użytkownik ma nieaktywną karte"
    bankCard = bankCardApi.pre...
KOMUNIKACJA
SPISYWANIE SPECYFIKACJI
CZYTANIE SPECYFIKACJI
SPECYFIKACJA VS TESTY
PYTANIA?
4Developers 2015: Behavior Driven Development - sounds perfect but why are we failing? - Tomasz Kaczmarek
4Developers 2015: Behavior Driven Development - sounds perfect but why are we failing? - Tomasz Kaczmarek
4Developers 2015: Behavior Driven Development - sounds perfect but why are we failing? - Tomasz Kaczmarek
4Developers 2015: Behavior Driven Development - sounds perfect but why are we failing? - Tomasz Kaczmarek
4Developers 2015: Behavior Driven Development - sounds perfect but why are we failing? - Tomasz Kaczmarek
4Developers 2015: Behavior Driven Development - sounds perfect but why are we failing? - Tomasz Kaczmarek
Upcoming SlideShare
Loading in …5
×

4Developers 2015: Behavior Driven Development - sounds perfect but why are we failing? - Tomasz Kaczmarek

122 views

Published on

Tomasz Kaczmarek

Language: Polish

Not much is said about software requirements in agile projects. Product backlog is all you need to run.
Is it so simple? If so why there are so many misunderstandings about the functionality that shall be done. Where the bugs come from? Why customer is claiming that it should have worked in another way. Or why the well known swings cartoon was created?
Behaviour Driven Development comes here with help to us. Each user story can be easily break down into scenarios. Scenarios are described as examples and understand in the same way by dev team and customer. Finally all scenarios are easily automated by specification frameworks like SpecFlow, Cucumber, JBehave.
Silver bullet found? Is there any?
In my talk I would like to talk about introduction Behaviour Driven Development in complex project with many dependencies. What we found good about BDD, what was taught. And why we failed… yes we failed .
What are the challenges for you when you decide to follow this path and when you shouldn't because there is no sense.

Published in: Software
  • Be the first to comment

  • Be the first to like this

4Developers 2015: Behavior Driven Development - sounds perfect but why are we failing? - Tomasz Kaczmarek

  1. 1. BDD BRZMI PIĘKNIE. TYLKO DLACZEGO CZĘSTO SIE NIE UDAJE? @tommykaczmarek
  2. 2. @SCENARIO @Given @When @Then
  3. 3. Scenario Aktywacja karty Given Użytkownik ma nieaktywną karte When Użytkownik aktywuje karte podając $pin Then Aktywacja ma status $status i zostanie wyświelony komunikat $komunikat Examples: | pin      | status | komunikat                                | | 2244     | OK     | Ustawienie kodu PIN przebiegło pomyślnie | | 22a2     | FAIL   | Dozwolone tylko liczby                   | | 62628812 | FAIL   | Długość kodu PIN powinna wynosić 4 znaki |
  4. 4. public class CardActivationSteps {     private BankCardApi bankCardApi;     private BankCard bankCard;     public CardActivationSteps(BankCardApi bankCardApi) {         this.bankCardApi = bankCardApi;     }     @Given("Użytkownik ma nieaktywną karte")     public void cardIsInactive() {         bankCard = bankCardApi.prepareNewCard();     }     @When("Użytkownik aktywuje karte podając $pin")     public void cardIsUsedForAFirstTime(@Named("pin") String pin) {         bankCardApi.activate(bankCard, pin);     }     @Then("Aktywacja ma status $status i zostanie wyświelony komunikat $komunikat")     public void pinGenerationRequest(@Named("status") String status,              @Named("komunikat") String komunikat) {         ActivationResult activationResult = bankCardApi.activationStatus(bankCard);         assertThat(activationResult.getStatus().name()).isEqualTo(status);         assertThat(activationResult.getError()).isEqualTo(komunikat);     } }          
  5. 5. Scenario Użytkownik zakłada konto w serwisie Given Użytkownik zakłada konto When Użytkownik poda imie $imie oraz nazwisko $nazwisko Then Operacja ma status $status i zostanie wyświetlony komunikat $komunikat And Zostanie wyświetlony błąd : Nieprawidłowo wypełniony formularz Examples: | imie   | nazwisko   | status | komunikat               | | Tomasz | Kaczmarek# | FAIL   | Formularz zawiera błędy |
  6. 6. KOMUNIKACJA
  7. 7. DYSKUSJA
  8. 8. PRZEJRZYSTOŚĆ
  9. 9. SPISYWANIE SCENARIUSZY
  10. 10. A WIĘC CHCESZ UŻYĆ W PROJEKCIE BDD...
  11. 11. “Mamy scruma ale nie robimy standupów bo nie mamy problemów z komunikacją”
  12. 12. DLACZEGO CHCĘ UŻYWAĆ NOWEGO NARZĘDZIA Co chcę osiągnąć? Jak będę mierzyć efektywność?
  13. 13. “Przecież to prawie jak mamy u siebie” “Analityk będzie pisać scenariusze w formule Given/When/Then”
  14. 14. SPECYFIKACJE SĄ SPISYWANE
  15. 15. “To taki inny sposób na skrypty testowe”
  16. 16. Scenario ­ Zmiana miasta w profilu użytkownika Given Użytkownik zaloguje się do serwisu jako zenon  And Wprowadzi hasło zenon1 And Kliknie na zakładke Ustawienia And Przejdzie do Zaawansowane And Przejdzie do sekcji profil When Naciśnie przycisk edytuj profil Then Zostanie przekierowany do strony edycji profilu When Wprowadzi miasto zamieszkania And Naciśnie zapisz Then Profil zostanie zapisany And Wyświetli sie informacja: Profil zapisany
  17. 17. WARUNKI BRZEGOWE Scenario Użytkownik zakłada konto w serwisie Given Użytkownik zakłada konto When Użytkownik poda imie $imie oraz nazwisko $nazwisko Then Operacja ma status $status i zostanie wyświetlony komunikat $komunikat And Zostanie wyświetlony błąd : Nieprawidłowo wypełniony formularz Examples: | imie     | nazwisko    | status | komunikat               | | Tomasz   | Kaczmarek#  | FAIL   | Formularz zawiera błędy | | Tomasz@  | Kaczmarek   | FAIL   | Formularz zawiera błędy | | Tomasz   | Kaczmarek11 | FAIL   | Formularz zawiera błędy | | Tomasz23 | Kaczmarek   | FAIL   | Formularz zawiera błędy | | Tomasz   | Kaczmarek_  | FAIL   | Formularz zawiera błędy | | Tomasz^  | Kaczmarek   | FAIL   | Formularz zawiera błędy | | Tomasz   | Kaczmarek%  | FAIL   | Formularz zawiera błędy | | Tomasz   | (Kaczmarek) | FAIL   | Formularz zawiera błędy |               
  18. 18. NAZYWAJ SYTUACJE DOSŁOWNIE
  19. 19. Given Gateway nie otrzyma ramki RFVS przez 30 sekund And Gateway nie może wysłać ramki H3DE do mediatora When Użytkownik wykona akcje ROZPOZNAJ Then Na ekranie wyświetli sie: System nie działa, sprobuj później.
  20. 20. Given Mediator jest rozłączony When Użytkownik wykona akcje ROZPOZNAJ Then Na ekranie wyświetli sie: System nie działa, sprobuj później.
  21. 21. “Ten scenariusz jest bardzo podobny do poprzedniego. Utworzymy sobie wspólną baze początkowych kroków dla scenariuszy.” “Współdzielenie kodu!”
  22. 22. DOBRE INTENCJE. NIEKONTROLOWANE KOPIOWANIE.
  23. 23. OBSZERNE KROKI USTAWIAJĄCE SYSTEM
  24. 24. “Scenariusze będą uaktualniane w następnym sprincie po wdrożeniu na produkcje.”
  25. 25. CZY KTOŚ BĘDZIE CZYTAĆ SPECYFIKACJE? ...PO NAPISANIU
  26. 26. NIECZYTANE = NIECZYTELNE BARDZO SZYBKO..
  27. 27. KTO BĘDZIE ODBIORCĄ SPECYFIKACJI?
  28. 28. DEVELOPERZY LEPIEJ ZROZUMIEJĄ TESTY
  29. 29. “Na unit testy nie ma czasu bo mamy JBehave.”
  30. 30. TESTY Z NASTAWIENIEM NA ZACHOWANIE
  31. 31. def "should activate inactive banking card"() {     given: "Użytkownik ma nieaktywną karte"     bankCard = bankCardApi.prepareNewCard();     when: "Użytkownik aktywuje karte podając pin"     bankCardApi.activate(bankCard, pin);     then: "Aktywacja ma status status i zostanie wyświelony komunikat komunikat"     ActivationResult activationResult = bankCardApi.activationStatus(bankCard);     activationResult.getStatus().name() == status     activationResult.getError() == message     where:         pin    | status     | message         "2244" | "OK"       | "Ustawienie kodu PIN przebiegło pomyślnie"         "22a2" | "FAIL"     | "Dozwolone tylko liczby"     "62628812" | "FAIL"     | "Długość kodu PIN powinna wynosić 4 znaki" }            
  32. 32. KOMUNIKACJA SPISYWANIE SPECYFIKACJI CZYTANIE SPECYFIKACJI SPECYFIKACJA VS TESTY
  33. 33. PYTANIA?

×