BDD: What's in it for me?
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

BDD: What's in it for me?

  • 5,945 views
Uploaded on

Behaviour Driven Development and some of the benefits it offers for developers, customers and testers. ...

Behaviour Driven Development and some of the benefits it offers for developers, customers and testers.

Originally presented at Skills Matter:

http://skillsmatter.com/event/agile-testing/bdd-whats-in-it-for-me

More in: Technology , Design
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
5,945
On Slideshare
5,116
From Embeds
829
Number of Embeds
11

Actions

Shares
Downloads
210
Comments
2
Likes
15

Embeds 829

http://www.projekt-log.de 767
http://www.slideshare.net 21
http://www.michaelhuebl.de 19
https://twimg0-a.akamaihd.net 6
http://bundlr.com 5
http://www.linkedin.com 4
http://webcache.googleusercontent.com 2
http://translate.googleusercontent.com 2
http://paper.li 1
http://209.85.129.132 1
https://www.linkedin.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • briefly introduce BDD <br /> benefits for particular roles on team <br /> experiences <br /> demo cucumber, a BDD tool <br /> ask questions but I&apos;ll keep the presentation moving <br /> q time at the end
  • from Melbourne, Australia <br /> agile for over 3 years <br /> mainly in XP teams as a developer <br /> doing BDD like things for a while <br /> trying to practise BDD for about a year <br /> <br /> collaboration aspect interests me most
  • who describes themselves as a customer? <br /> product owner? business analyst? <br /> I&#x2019;m calling you a customer <br /> you want something <br /> paying the bills <br /> you accept the system <br /> <br /> who is a developer? <br /> you are building the thing <br /> you may have used Test Driven Development <br /> ... Domain Driven Design <br /> ... unit testing <br /> ... automated acceptance testing <br /> <br /> who is a tester? <br /> QA? <br /> you make sure it works <br /> you also think about ways it can work better <br /> <br /> BDD offers things that should make all of you happy <br /> some things are of interest to particular roles
  • who describes themselves as a customer? <br /> product owner? business analyst? <br /> I&#x2019;m calling you a customer <br /> you want something <br /> paying the bills <br /> you accept the system <br /> <br /> who is a developer? <br /> you are building the thing <br /> you may have used Test Driven Development <br /> ... Domain Driven Design <br /> ... unit testing <br /> ... automated acceptance testing <br /> <br /> who is a tester? <br /> QA? <br /> you make sure it works <br /> you also think about ways it can work better <br /> <br /> BDD offers things that should make all of you happy <br /> some things are of interest to particular roles
  • who describes themselves as a customer? <br /> product owner? business analyst? <br /> I&#x2019;m calling you a customer <br /> you want something <br /> paying the bills <br /> you accept the system <br /> <br /> who is a developer? <br /> you are building the thing <br /> you may have used Test Driven Development <br /> ... Domain Driven Design <br /> ... unit testing <br /> ... automated acceptance testing <br /> <br /> who is a tester? <br /> QA? <br /> you make sure it works <br /> you also think about ways it can work better <br /> <br /> BDD offers things that should make all of you happy <br /> some things are of interest to particular roles
  • heard about BDD before? <br /> experimenting? used before? <br /> <br /> simple definition: BDD == blend of goodies from DDD and TDD <br /> <br /> DDD <br /> Domain Driven Design <br /> conceptual model of the problem domain <br /> manages complexity and change in software <br /> we make the software model the problem <br /> we use the same language to describe: <br /> things <br /> behaviour <br /> ubiquitous language - ubiq = everywhere at once <br /> finding + changing things should be relatively easy <br /> some technical guidelines <br /> mainly theoretical <br /> DDD can be used by everyone <br /> <br /> TDD <br /> Test Driven Development <br /> designing code using automated behavioural tests <br /> write tests for behaviour <br /> run the tests - they break <br /> enough code to make the test pass <br /> pick the next thing <br /> this means we only develop as much as we need <br /> byproduct: nice test suite <br /> used to design interactions <br /> not terribly visible to anyone who isn&apos;t a dev <br /> but the results are <br /> <br /> BDD <br /> Behaviour Driven Development combines best aspects of both of these things <br /> test driven practises applied to WHOLE behaviour of the system <br /> move the design practises of TDD outside further <br /> encourages communication and collaboration
  • guiding principles of BDD <br /> these principles drive how you practise it <br /> <br /> its all behaviour <br /> strong focus on behaviour <br /> our code, tests/specs talk in terms of behaviour <br /> we don&apos;t talk about Calculator object passing 1 and 2 to the addition method <br /> we talk about Calculator adding <br /> retain and strengthen the link with the problem we are solving <br /> constantly focussed on it <br /> ubiquitous language - no translation <br /> <br /> deliver stakeholder value <br /> agree that we should only do things that create value? <br /> we should generally do the most valuable first? <br /> sure we do <br /> hard thing is figuring out whether they do or not <br /> question rigorously the value something is creating <br /> prioritise it against other things <br /> build only the things that are important <br /> build the most important first <br /> <br /> enough is enough <br /> only build what you need to build <br /> plan as much as you need to <br /> START building ASAP <br /> STOP building ASAP
  • DDD influence <br /> ubiquitous language one of the most beneficial parts <br /> ubiquitous == everywhere at once <br /> talk the same language about the thing we&#x2019;re building <br /> about behaviour <br /> same problem, same system, same language <br /> <br /> becomes easier to communicate <br /> maximise our chances of building the right thing <br /> <br /> what threatens to prevent this from happening? <br /> <br /> multiple representations of the same behaviour
  • seen this in a number of projects <br /> <br /> customer has a story about a new feature <br /> purest form of the behaviour <br /> (hopefully) not polluted with any technical jargon <br /> everyone should be able to understand this <br /> <br /> stored in a wiki, issue management system like JIRA, Pivotal tracker <br /> some, I hear, even store it in a Microsoft Word document <br /> <br /> at the best, at least everyone can read or change this <br /> at the worst, its kept locked away <br /> only a select few can change it <br /> <br /> this is ONE representation of the system&apos;s desired behaviour
  • developer starts to work on the feature <br /> must represent the problem in code <br /> if they are practising DDD then they strive to maintain ubiquitous language in the code <br /> unfortunately, this guy hasn&apos;t <br /> <br /> hopefully also create automated tests, regardless of ubiq language <br /> these basically act as a safety net to make sure nothing is broken <br /> <br /> this is ANOTHER representation of the system&apos;s desired behaviour
  • testing time <br /> tester needs to double check that each scenario passes <br /> <br /> everyone has seen something like this? a procedural test? <br /> <br /> mix of business domain and technical terms <br /> <br /> they may be working from a manual test script <br /> or maintain their own automated tests <br /> <br /> this is YET ANOTHER representation
  • how does this look? <br /> 3 representations of the same behaviour <br /> 3 roles trying to communicate about the ONE thing <br /> the one system <br /> <br /> a customer states what they want in plain language <br /> "market research, could be a untapped market in an automatic bill totaller&#x201D; <br /> totalling scenario <br /> <br /> a developer takes this, uses their own version of language <br /> tester takes it, represents it as a procedural test <br /> developer finishes <br /> feature goes into test <br /> tester tests <br /> "I added money to the bill as per steps 2 and 3 but the sum was wrong&#x201D; <br /> &#x201C;it was 20 pounds" <br /> dev - "bill? oh the cheque. that&apos;ll take a while to fix" <br /> speak to customer - "when we summed the cheque it was wrong" <br /> customer - "?&#x201D;, you mean totalled the bill <br /> and around it goes until everyone is on the same page <br /> repeat at least once per bug or issue that comes up
  • divergence reinforced by 3 representations <br /> <br /> the worst situation I have seen for this: <br /> <br /> story descriptions in JIRA <br /> devs automated scenarios using selenium and JUnit <br /> testers automated using QTP <br /> of 3, selenium tests only thing updated properly <br /> changed in line with the code <br /> JIRA neglected - no apparent value in updating <br /> QTP ran nightly, broke every second day, eventually dropped <br /> <br /> how do we fix this?
  • ubiquitous language <br /> a good chunky, woody sounding word <br /> same thing, same language <br /> <br /> ONE representation of behaviour <br /> lessens the chance for language to diverge <br /> <br /> language is shared <br /> we develop it together <br /> <br /> how do we achieve it? <br /> <br /> discussion, not just the problem but vocab. <br /> model the problem <br /> flush out new things <br /> <br /> build understanding of the problem together <br /> more we understand, better we can model it in code <br /> better we model it in code, easier it is to change <br /> <br /> story kickoff process <br /> <br /> nut out scenarios and wording as a group <br /> (devs, customer, testers) <br /> <br /> standard scenario format = Given, When, Then <br /> Given == starting state <br /> When == stimulus that changes something <br /> clicking a button or whatever <br /> Then == the state we expect after <br /> <br /> doing this together... <br /> improves the quality of our description of behaviour <br /> cements everyone&apos;s understanding of the problem <br /> irons out inconsistencies in language <br /> <br /> shared language and understanding <br /> == more effective communication <br /> == more maintainable systems
  • main benefit of BDD <br /> <br /> better communication and collaboration <br /> we create a shared understanding of the problem <br /> we find it easier to talk about the system <br /> <br /> we should all be on the same page
  • all agree, only build things that are valuable? <br /> value + cost helps us decide when we build <br /> or if we build at all <br /> <br /> how do you know when something is valuable? <br /> need to ask a lot of questions
  • dig for value <br /> <br /> write features together as a team <br /> act of writing a feature <br /> == uncovering why it is valuable <br /> == uncovering how valuable it is <br /> <br /> one tool you can use to uncover value is popping the why stack <br /> term originally attributed to Luke Barrett at Thoughtworks <br /> related to the 5 whys root cause analysis <br /> <br /> Stop when you get to: <br /> <br /> # Protect revenue <br /> # Increase revenue <br /> # Manage cost <br /> <br /> if you can&apos;t get there then why are you playing the feature? <br /> maybe you&apos;ve dug up an old shoe instead of treasure <br /> ditching a feature is a great feeling <br /> <br /> "in order to" is very important - spend time on analysing it
  • reducing waste <br /> build the most important things first <br /> chuck others out completely <br /> <br /> should be able to trace each feature back to the strategic purpose of the project <br /> if you haven&apos;t got one of those then you have bigger problems
  • also about avoiding waste <br /> do the bare minimum <br /> again, sounds like common sense? <br /> <br /> how do we know when to stop? <br /> when are we done?
  • when do I stop? <br /> <br /> who has heard of red, green, refactor? <br /> TDD mantra <br /> simpifies things, breaks things down into simple steps <br /> do the bare minimum <br /> also gives you a place to start, first broken test <br /> <br /> describe process, practical example next <br /> <br /> to implement a feature: <br /> pick first pending (yellow) scenario <br /> pick first pending step <br /> step is pending if it hasn&apos;t yet been implemented <br /> step breaks once implemented <br /> make sure your step is doing its job, need the red <br /> behaviour is not implemented yet <br /> make it pass <br /> build only the functionality needed <br /> refactor if necessary, stays green <br /> repeat for each step <br /> scenario goes green <br /> repeat for next pending scenario <br /> all scenarios passing == feature is passing <br /> <br /> done when all scenarios pass <br /> none of the previous ones are broken <br /> may need to add or change scenarios as you go
  • quick demo of cucumber <br /> show what I&apos;m talking about when I mention features and steps <br /> we are going to build the bill totalling feature
  • reiterate <br /> <br /> helps you know "are we there yet?" <br /> isn&apos;t foolproof <br /> BUT forces you to continually ask, are we there yet <br /> the features say we&#x2019;re there, are we really? <br /> do we need more scenarios?
  • everyone recognise the process we followed? <br /> <br /> where to START <br /> what to do NEXT <br /> when to STOP <br /> <br /> even when "done", there may be more scenarios to discover <br /> a guideline but a good one
  • when can we start building stuff? <br /> when we have enough information to start <br /> <br /> code is what matters <br /> you need to do some planning, design <br /> only need to do so much <br /> <br /> has anyone heard of bare sufficiency? <br /> normally applied to software dev methodologies <br /> says it should be just sufficient to get the job done <br /> possibly with some gaps <br /> they get filled in as we build <br /> <br /> how we&apos;d flesh out a feature: <br /> planning for next iteration <br /> enough detail to the level required at the time <br /> to be able to estimate <br /> keep it as bare as possible <br /> cover enough scenarios to estimate <br /> scenarios <br /> assumptions <br /> estimate <br /> may result in other stories being created <br /> also spikes <br /> file it away - normally done on a printing whiteboard <br /> <br /> when the story was kicked off we&apos;d review the feature <br /> go over it again, see if we had learnt anything in the meantime <br /> adjust or add new scenarios <br /> make sure the size was the same <br /> when we had enough to start, we&#x2019;d just start <br /> new scenarios would come in later <br /> often as a result implementing the initial ones
  • get to a point where you can build it <br /> a working system gives you valuable feedback: <br /> how will it work? <br /> how could it work better? <br /> will it work at all? <br /> <br /> anyone had devs waiting on analysis to be done before they can start? <br /> analyse together to remove that bottleneck <br /> tight feedback about whether you have analysed enough <br /> <br /> just build it <br /> your understanding grows as you have something to play with <br /> <br /> generates more knowledge <br /> generates more questions about how it should work
  • questions are valuable <br /> they help grow knowledge of the feature <br /> <br /> everyone is responsible for asking questions <br /> a tester or QA specialises in this <br /> they will be the ones asking most of these questions <br /> <br /> a question may be "why doesn&apos;t it work like expected" - a bug <br /> a question may also be "should we expect it to work like this?" - change to a feature <br /> a question is not necessarily a bug <br /> <br /> lots of questions == good <br /> better quality product <br /> <br /> questions lead to more questions <br /> exploring the feature leads to more being raised <br /> this flattens off at the end as potential questions are exhausted <br /> there is a very juicy curve in the middle <br /> <br /> we can&#x2019;t uncover all questions <br /> uncover as many as we can
  • we all need to ask questions <br /> testing == really driving them out <br /> testing window is the &#x201C;quality time&#x201D; between tester and system <br /> more time spent == more questions asked <br /> <br /> here we uncover 2 questions during the window
  • doubling our window leads to uncovering 4x questions <br /> bigger window == more coverage of juicy part of curve <br /> we want to maximise our chance of hitting that flat spot <br /> we can all agree that this is a good thing? <br /> <br /> otherwise we risk things being discovered later <br /> like in production <br /> <br /> this doesn&apos;t always work out though
  • who has used a story wall before? <br /> tracks flow of work between different stages <br /> ready for dev, in dev and in test then DONE <br /> <br /> who has seen this on the second last day? <br /> who can tell me what is wrong with this one? <br /> <br /> pile everything onto the testers on the last day of iteration <br /> <br /> start testing earlier <br /> regulate the flow of work <br /> avoid testing being the bottleneck <br /> <br /> BDD facilitates this <br /> gives feedback on which scenarios are done <br /> they can then be tested <br /> we work on one scenario at a time <br /> when it is passing we should be able to let the testers at it <br /> <br /> previous project: <br /> demo a scenario to a tester as soon as it was done <br /> they would often dig things up immediately <br /> <br /> the test stage became a final check <br /> the bulk of the scenarios had been verified earlier <br /> <br /> move start of testing window earlier <br /> maximise it, maximise chance of exhausting questions
  • exploring early leads to more questions being asked <br /> higher quality <br /> <br /> everyone gets earlier feedback about bugs <br /> potential new scenarios and changes <br /> <br /> how else can we free up time for exploring?
  • useful byproducts <br /> <br /> bran is a useful byproduct of processing cereals <br /> we are really interested in refined grains <br /> but bran is still terribly terribly useful <br /> <br /> we have a similar situation with BDD <br /> <br /> discovering and implementing behaviour byproduct == automated tests <br /> automated tests are an awesome byproduct of BDD <br /> these tests are like bran: they&apos;re great stuff, we love them <br /> BUT discovering and implementing behaviour is our primary focus <br /> <br /> but the fact remains; automated tests are a great byproduct
  • byproduct is automated test suite <br /> <br /> who is familar with unit testing/automated testing? <br /> <br /> tightrope metaphor: <br /> making changes to code is like walking a tightrope <br /> automated tests are a safety net that tell us when we have broken something <br /> <br /> if we have no safety net we walk very, very slow <br /> if we have a safety net we can move a lot faster <br /> we know that if we fall, we&apos;ll be safe <br /> we have more confidence to try new tricks <br /> <br /> automated tests act like a safety net around the code <br /> <br /> anyone had something fail in the app but "the unit test passes?" <br /> move the safety net out further in the layers of the application <br /> when we add or change behaviour, we MUST keep our automated tests green <br /> <br /> more chance of catching things
  • automated tests are great <br /> having automated tests that describe behaviour is even better <br /> <br /> developers using automated tests should be able to see the benefit of this <br /> <br /> is this interesting to testers?
  • testers: <br /> who uses manual regression testing in their team? <br /> who likes it? <br /> <br /> manual regression testing can eat a lot of time and resources <br /> cost grows exponentially with: <br /> the size of the system <br /> number of releases <br /> rely on frequent releases to make things work; they must be cheap <br /> <br /> would it not be awesome to have testers do less manual regression testing? <br /> <br /> need to look at how we can make this work
  • this is not strictly part of BDD <br /> a way to get more benefit out of automated testing <br /> Cucumber model <br /> <br /> shared ownership <br /> <br /> everyone owns features <br /> they encode our shared understanding of the behaviour <br /> both developers and testers need to own the step defs <br /> need visibility if they are going to be asked to rely on them <br /> how do they know what is covered? <br /> how do they know how it is covered? <br /> <br /> need to be able to work on them with developers <br /> <br /> testers need more programming skills <br /> devs need more testing skills <br /> hopefully working together will achieve this <br /> <br /> I haven&apos;t yet seen this really work properly on a team <br /> I would very much like to
  • what if we do get this to work? <br /> <br /> regression testing time is freed up for exploratory testing <br /> doesn&apos;t replace manual regression testing but should reduce it greatly <br /> increases testing window <br /> increase the number of questions <br /> <br /> regression testing becomes cheaper and faster
  • specifications <br /> specifications document how the system should behave <br /> <br /> people like to know how their system behaves <br /> especially as it grows bigger <br /> we used to rely on written specifications for this <br /> you&apos;d update them when you change the code, right? <br /> packed away in a warehouse like the lost ark <br /> out of sight == out of mind <br /> it becomes dead information <br /> its connection with the system is severed and it dies <br /> the document becomes useless <br /> <br /> the place I was working did not like this <br /> provided more confusion than information <br /> this is one of the reasons they became interested in Cucumber and BDD
  • a BDD feature is "live" information <br /> specification is executable <br /> you can see if it still describes how the system actually behaves <br /> if you use continuous integration, you can make it a part of your build <br /> in fact, you should <br /> <br /> executable specs retain their relationship to the system that they describe <br /> <br /> you need to put a lot of effort into style <br /> you need to make sure that generated documentation makes sense <br /> best way is to get customers into habit of using it <br /> <br /> you should look at this generated documentation regularly <br /> make sure it it good enough for your customer, if it isn&apos;t then fix it <br /> you probably aren&apos;t specifying behaviour well enough <br /> <br /> this is Cucumber output <br /> rspec and other frameworks can also output nice content like this
  • documentation on demand <br /> <br /> tools like Cucumber, Rspec and others have ability <br /> use it; generate reports from your latest build <br /> <br /> tells you two things: <br /> what the system should do under certain scenarios <br /> what the system actually does under these scenarios (green steps/examples) <br /> <br /> don&apos;t try and keep documents in synch - it just doesn&apos;t work <br /> <br /> if the format doesn&#x2019;t suit, change it <br /> write a custom formatter <br /> ensure it can be used as the documentation for the system
  • a better understanding of the problem <br /> this is by far and beyond the big one <br /> <br /> a better chance of getting what I really need <br /> more efficient development <br /> quicker feedback <br /> live behavioural documentation
  • knowing where to start, what to do next and when to finish <br /> awesome, TDD-like flow <br /> the chance to start building something earlier <br /> safety net when I&#x2019;m making changes <br /> more confidence when making changes
  • more time to explore <br /> automate regression testing as much as possible <br /> something to explore earlier <br /> guidelines for which scenarios can be tested <br /> also means we tend to work on one scenario at a time
  • sounds pretty good right? <br /> it will not solve all of your problems <br /> <br /> this is what can happen when you do it well <br /> closer you get the more you should start seeing benefits <br /> <br /> I&apos;ve presented a lot of positive things here <br /> it may seem a bit idealistic <br /> like most agile approaches, the main negative == hard to implement properly <br /> requires more thought and communication than traditional methods <br /> need to be committed to continual improvement <br /> <br /> BDD is not about tools <br /> it is about communication and collaboration <br /> this is what allows you to make better software <br /> BDD just facilitates that

Transcript

  • 1. Behaviour Driven Development what’s in it for me? Brent Snook Thursday, 15 October 2009
  • 2. Brent who? • from Melbourne, Australia • self confessed Agile weenie • working with BDD for about a year • available for dev, coaching, children’s parties • fuglylogic.com • brentsnook Thursday, 15 October 2009
  • 3. Audience Thursday, 15 October 2009
  • 4. Audience Customer Thursday, 15 October 2009
  • 5. Audience Customer Developer Thursday, 15 October 2009
  • 6. Audience Customer Developer Tester Thursday, 15 October 2009
  • 7. BDD ≈ DDD + TDD Thursday, 15 October 2009
  • 8. Principles of BDD • It’s all behaviour • Deliver stakeholder value • Enough is enough Thursday, 15 October 2009
  • 9. Principles of BDD • It’s all behaviour • Deliver stakeholder value • Enough is enough Thursday, 15 October 2009
  • 10. In order to speed billing As a waiter I want to calculate bill total story descriptions (JIRA,Wiki,Word) Thursday, 15 October 2009
  • 11. cheque.sum .should == 12.0 automated unit and acceptance tests Thursday, 15 October 2009
  • 12. 1. Add £2.00 to bill 2. Add £10.00 to bill 3. Verify sum is £12.00 test procedures Thursday, 15 October 2009
  • 13. Translation Thursday, 15 October 2009
  • 14. Translation Thursday, 15 October 2009
  • 15. DO Translation NOT WANT!! Thursday, 15 October 2009
  • 16. Mmmmm.....Ubiquitous Given an empty bill When I add £2.00 And I add £10.00 Then the total is £12.00 Thursday, 15 October 2009
  • 17. Speak the Same Language We can understand each other. We are more likely to gain a deeper insight of the problem. We have a better chance of building the right thing. Cool bananas! Thursday, 15 October 2009
  • 18. Principles of BDD • It’s all behaviour • Deliver stakeholder value • Enough is enough Thursday, 15 October 2009
  • 19. Principles of BDD • It’s all behaviour • Deliver stakeholder value • Enough is enough Thursday, 15 October 2009
  • 20. In order to ... speed up billing ... why? so that billing is cheaper ... why? so that I can manage cost DING! Thursday, 15 October 2009
  • 21. Reduce Waste I waste less time and money building things that aren't really needed and uncovering value helps me to prioritise properly. Fantabulous! Thursday, 15 October 2009
  • 22. Principles of BDD • It’s all behaviour • Deliver stakeholder value • Enough is enough Thursday, 15 October 2009
  • 23. Principles of BDD • It’s all behaviour • Deliver stakeholder value • Enough is enough Thursday, 15 October 2009
  • 24. Are We There Yet? Scenario Step Thursday, 15 October 2009
  • 25. Demo Thursday, 15 October 2009
  • 26. Are We There Yet? Scenario Step Thursday, 15 October 2009
  • 27. A Place to Start, A Place to Stop Knowing where to start, what to do next and when to stop. Bonza! And less superfluous stuff! Thursday, 15 October 2009
  • 28. (Barely) Sufficient Detail Scenario: Simple bill total Given an empty bill When I add 2 pounds And I add 10 pounds Then the total is 12 pounds Thursday, 15 October 2009
  • 29. Just Build It I can start building something as soon as possible. Grouse! Something to play with earlier! Thursday, 15 October 2009
  • 30. Questions Asked 12 12 11 Total Questions 8 4 2 Time Thursday, 15 October 2009
  • 31. Questions Asked Testing window 12 12 11 Total Questions 8 4 2 Time Thursday, 15 October 2009
  • 32. Questions Asked Testing window 12 12 11 Total Questions 8 4 2 Time Thursday, 15 October 2009
  • 33. Spread the Load 2 DAYS LEFT !!! Ready Dev Test Done Thursday, 15 October 2009
  • 34. Explore Early Less chance of getting swamped and I get to uncover more problems. O' Frabjous day! Bugs and new scenarios earlier! Thursday, 15 October 2009
  • 35. Useful Byproducts Thursday, 15 October 2009
  • 36. Safety Net Thursday, 15 October 2009
  • 37. Automated Tests I can make changes with greater confidence and speed. W00t! Hmm...could I use those? Thursday, 15 October 2009
  • 38. Manual Regression Testing Thursday, 15 October 2009
  • 39. Shared Ownership Step Definitions Feature Thursday, 15 October 2009
  • 40. Automated Regression Suite I can focus more on exploratory testing. Zipidee do da! Regression testing is cheaper and faster. Thursday, 15 October 2009
  • 41. Dead Specifications Here Lies Total Bill Slipped away Out of sight Out of mind Won’t be remembered Thursday, 15 October 2009
  • 42. Live Specifications Feature: Total a bill In order to speed billing As a waiter I want to calculate bill total Scenario: Simple bill with two items Given an empty bill When I add 2 pounds And I add 10 pounds Then the bill total will be 12 pounds Scenario: Remove item from bill Given an bill totalling 20 pounds When I remove 4 pounds Then the bill total will be 16 pounds Thursday, 15 October 2009
  • 43. Documentation on Demand A comprehensive description of how my system should and does behave? On demand?! Splendiferous! Handy for verifying behaviour too. Thursday, 15 October 2009
  • 44. What’s in it for me? • better understanding of the problem • a better chance of getting what I really need • more efficient development • quicker feedback • live behavioural documentation Thursday, 15 October 2009
  • 45. What’s in it for me? • better understanding of the problem • knowing where to start, what to do next and when to finish • the chance to start building something earlier • safety net when I’m making changes Thursday, 15 October 2009
  • 46. What’s in it for me? • better understanding of the problem • more time to explore • something to explore earlier Thursday, 15 October 2009
  • 47. Whoah There! Thursday, 15 October 2009
  • 48. Questions? • brent@fuglylogic.com • brentsnook • pub Thursday, 15 October 2009
  • 49. Links • http://skillsmatter.com/podcast/agile-testing/bdd- whats-in-it-for-me • http://behaviour-driven.org/ • http://dannorth.net/whats-in-a-story • http://blog.objectmentor.com/articles/2008/11/27/the-truth-about-bdd • http://en.wikipedia.org/wiki/5_Whys • http://pragprog.com/titles/achbd/the-rspec-book • http://www.infoq.com/minibooks/domain-driven-design-quickly • http://cukes.info • http://alistair.cockburn.us/Balancing+lightness+with+sufficiency Thursday, 15 October 2009
  • 50. Images/Fonts • Blender - http://www.flickr.com/photos/lintmachine/2987986325 • Steering Wheel - http://www.flickr.com/photos/wheatfields/290438580 • Drinky Bird - http://www.flickr.com/photos/sfmike22/2326128380/ • Post It Note - http://www.flickr.com/photos/flatcat/3555774083/ • Digging for Treasure - http://www.flickr.com/photos/wessexarchaeology/51568417/ • Table Setting and Napkin - http://www.flickr.com/photos/sifu_renka/2789833722/ • Gravestone - http://www.flickr.com/photos/36041246@N00/3419197777/ • Bran - http://www.flickr.com/photos/trekkyandy/3316748814 • Tightrope - http://www.flickr.com/photos/marquette/1812518264/ • Repeat Icon - http://www.iconarchive.com/show/aesthetica-2-icons-by-dryicons/repeat-icon.html • Silver Bullet - http://www.flickr.com/photos/annguyenphotography/3268547290 • “No” Sign - http://commons.wikimedia.org/wiki/File:No_sign.svg • Avatar Editor - http://myavatareditor.com/ • Whiteboard Font - http://callsignkatejones.deviantart.com/art/House-Whiteboard-font-64929545 • Napkin Font - http://www.1001fonts.com/font_details.html?font_id=2178 Thursday, 15 October 2009