A short introduction to BDD

A short introduction to BDD

1a4e1f98f3aeef310273366c8c785207?s=128

Jakub Zalas

August 06, 2014
Tweet

Transcript

  1. A short introduction to BDD (BDD from the eyes of

    a test-first maniac) by Jakub Zalas Polish Developers Meetup in London
  2. @jakzal @jakub_zalas @SensioLabsUK £

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

  4. Test Driven Development

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

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

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

    // ... } public void testFindDelivery2() { // ... } }
  8. public class DeliveryRepositoryTest extends TestCase { public void testFindsDeliveryByTrackingCode() {

    // ... } public void testFailsForInvalidTrackingCode() { // ... } } DeliveryRepository •  finds delivery by tracking code •  fails for invalidtracking code
  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
  10. Act 2: Improving communication or how I thought I got

    it right
  11. Customers should be able to sign in! Avatars generated on

    http://www.customsouthparks.com/
  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
  13. package poldev.controller; public class AuthController { public void signIn() {

    // ... } }
  14. Signing in

  15. As a Customer I want to sign in In order

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

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

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

    to sign in In order to be signed in track my their deliveries
  19. When an anonymous user goes to the deliveries page Then

    he should see the signin form And he shouldn't see any delivery details
  20. When a Customer goes to the deliveries page And gives

    his login details Then he should see a list of his deliveries
  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
  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
  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 Scenario: Clicking a tracking URL month after delivery
  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
  25. 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
  26. Failing step Failing test Code Refactor Passing step External quality

    Internal quality
  27. Act 3: Going outside in or focusing on a goal

  28. "I need Customers to sign into the site to track

    their delivery." Mr Client
  29. As a Customer I need to sign into the site

    So I could track my delivery
  30. As a Customer I need to see my deliveries So

    I could know when it's going to be delivered
  31. WHAT'S THE GOAL?

  32. THE CLIENT CAME WITH A SOLUTION

  33. "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?"
  34. "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?"
  35. < 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?
  36. MAKE IMPACTS NOT SOFTWARE Gojko Adžić impactmapping.org

  37. Thank you!

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