Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A short introduction to BDD

A short introduction to BDD

Jakub Zalas

August 06, 2014
Tweet

More Decks by Jakub Zalas

Other Decks in Programming

Transcript

  1. A short introduction to BDD
    (BDD from the eyes of a test-first maniac)
    by Jakub Zalas
    Polish Developers Meetup
    in London

    View full-size slide

  2. @jakzal
    @jakub_zalas
    @SensioLabsUK
    £

    View full-size slide

  3. Act 1: Going inside out
    or how it all started

    View full-size slide

  4. Test Driven Development

    View full-size slide

  5. Test Driven Development
    Introducing BDD, Dan North
    http://dannorth.net/introducing-bdd/

    View full-size slide

  6. Test Driven Development
    Behaviour
    Introducing BDD, Dan North
    http://dannorth.net/introducing-bdd/

    View full-size slide

  7. public class DeliveryRepositoryTest extends TestCase {
    public void testFindDelivery() {
    // ...
    }
    public void testFindDelivery2() {
    // ...
    }
    }

    View full-size slide

  8. public class DeliveryRepositoryTest extends TestCase {
    public void testFindsDeliveryByTrackingCode() {
    // ...
    }
    public void testFailsForInvalidTrackingCode() {
    // ...
    }
    }
    DeliveryRepository
    •  finds delivery by tracking code
    •  fails for invalidtracking code

    View full-size slide

  9. public class DeliveryControllerTest extends WebTestCase {
    public void testItShowsDeliveryDetailsForAValidTrackingCode() {
    // ...
    }
    public void testItDoesNotShowADeliveryForExpiredTrackingCode() {
    // ...
    }
    public void testItDoesNotShowADeliveryDeliveredMoreThanAMonthAgo() {
    // ...
    }
    }
    DeliveryController
    •  it shows delivery details for a valid tracking code
    •  it does not show a delivery for expired tracking code
    •  it does not show a delivery delivered more than a month ago

    View full-size slide

  10. Act 2: Improving communication
    or how I thought I got it right

    View full-size slide

  11. Customers should be able to
    sign in!
    Avatars generated on http://www.customsouthparks.com/

    View full-size slide

  12. 1. Open a browser
    2. Put the site URL in the browser and press enter
    3. Give username
    4. Give password
    5. Press submit button
    6. Check if I gained access to the secured area

    View full-size slide

  13. package poldev.controller;
    public class AuthController
    {
    public void signIn()
    {
    // ...
    }
    }

    View full-size slide

  14. As a Customer
    I want to sign in
    In order to be signed in

    View full-size slide

  15. As a Customer
    I want to sign in
    In order to be signed in track my deliveries

    View full-size slide

  16. As an Customer Owner
    I want to sign in
    In order to be signed in track my deliveries

    View full-size slide

  17. As an Customer Owner
    I want to sign in Customers to sign in
    In order to be signed in track my their deliveries

    View full-size slide

  18. When an anonymous user goes to the deliveries
    page
    Then he should see the signin form
    And he shouldn't see any delivery details

    View full-size slide

  19. When a Customer goes to the deliveries page
    And gives his login details
    Then he should see a list of his deliveries

    View full-size slide

  20. Feature: Tracking deliveries
    As a Customer
    I need to see a status of my delivery
    So I could know when it's going to be delivered

    View full-size slide

  21. Feature: Tracking deliveries
    As a Customer
    I need to see a status of my delivery
    So I could know when it's going to be delivered

    View full-size slide

  22. Feature: Tracking deliveries
    As a Customer
    I need to see a status of my delivery
    So I could know when it's going to be delivered
    Scenario: Clicking a tracking URL
    Scenario: Clicking a tracking URL month after delivery

    View full-size slide

  23. Feature: Tracking deliveries
    As a Customer
    I need to see a status of my delivery
    So I could know when it's going to be delivered
    Scenario: Clicking a tracking URL
    Given I am waiting for a delivery
    And I received a confirmation message
    When I click the tracking URL from the message
    Then I should see a status of my delivery
    Scenario: Clicking a tracking URL month after delivery
    Given I my package was delivered a month ago
    And I kept the confirmation message
    When I click the tracking URL from the message
    Then I should be informed the tracking URL has expired

    View full-size slide

  24. Feature: Tracking deliveries
    As a Customer
    I need to see a status of my delivery
    So I could know when it's going to be delivered
    Scenario: Clicking a tracking URL
    Given I am waiting for a delivery
    And I received a confirmation message
    When I click the tracking URL from the message
    Then I should see a status of my delivery
    Scenario: Clicking a tracking URL month after delivery
    Given I my package was delivered a month ago
    And I kept the confirmation message
    When I click the tracking URL from the message
    Then I should be informed the tracking URL has expired

    View full-size slide

  25. Failing
    step
    Failing
    test
    Code
    Refactor
    Passing
    step
    External quality
    Internal quality

    View full-size slide

  26. Act 3: Going outside in
    or focusing on a goal

    View full-size slide

  27. "I need Customers to sign into the
    site to track their delivery."
    Mr Client

    View full-size slide

  28. As a Customer
    I need to sign into the site
    So I could track my delivery

    View full-size slide

  29. As a Customer
    I need to see my deliveries
    So I could know when it's going to
    be delivered

    View full-size slide

  30. WHAT'S
    THE GOAL?

    View full-size slide

  31. THE CLIENT
    CAME WITH A
    SOLUTION

    View full-size slide

  32. "I need users to sign into the site to track their
    delivery."
    "Why?"
    "So they could see where's their package."
    "Why?"
    "What do you mean? They need to track their
    deliveries."
    "Yes, but why?"

    View full-size slide

  33. "Well, our mission is to offer the most
    customer friendly courier services. We want to
    increase the number of satisfied customers."
    "Aha!"
    "So they wouldn't get impatient and file
    complaints when the delivery is delayed."
    "Why?"
    "So they could know when is it going to be
    delivered."
    "Why?"

    View full-size slide

  34. < 5% of
    customers
    filing
    complaints
    Customers
    Support
    Notifications
    Contact the Customer
    if delivery is delayed
    Add expected delivery
    time to the
    confirmation message
    SMS notifications
    Add a tracking URL to
    the confirmation
    message
    E-mail notifications
    List of deliveries after
    signing in
    Prevent
    complaints
    Check delivery
    status
    Why? Who? How? What?

    View full-size slide

  35. MAKE
    IMPACTS
    NOT
    SOFTWARE
    Gojko Adžić
    impactmapping.org

    View full-size slide

  36. Credits
    •  https://www.flickr.com/photos/hinkelstone/5166544084
    •  http://www.customsouthparks.com/
    •  http://impactmapping.org
    •  http://dannorth.net/introducing-bdd/

    View full-size slide