SlideShare a Scribd company logo
Growing software
from examples
Seb Rose, Claysnow Limited
Twitter:   @sebrose
Blog:      www.claysnow.co.uk
E-mail:         seb@claysnow.co.uk
Heavily influenced by GOOS book:
Growing software from examples
Growing software from examples
They’re called different things
The difference is that one is called Behaviour
Driven Development – and some people find that
wording useful – and one (or two) is called
(Acceptance) Test Driven Development – and
some people find that wording useful in a different
way.
And that’s it.
                                                             Liz Keogh, 2011
  http://lizkeogh.com/2011/06/27/atdd-vs-bdd-and-a-potted-history-of-some-related-stuff/
est                      Tes
        tom   er T                        De    tD
    Cus                                      velo riven
                                                 pm
                                                    ent
                                Domain D
                                        riven
   Specif                         Design
          ication
                  b   y Exam
                               ple
                                                    e Dr  iven
                                            Exam pl        ent
  A  cceptan ce Test                         D  eve l o pm
       en Deve l op m e n t
D ri v
                               Behaviour
                                         Driven
                                Developme
                                           nt
Pattern                     Generally good for                                     Generally bad for
                              Tests that require                                        • Tests that have
                              •a lot of setup OR                                            unimportant/simple/obvious
                              •easily forgotten setup                                       preconditions
                              Tests that have a non-obvious trigger
                              Tests with few expected outputs
                                                                                        •   Tests where there are multiple
      Given/When/Th                                                                         different inputs and multiple
      en                                                                                    different outputs
                                                                                        •   Tests where a single
                                                                                            Given/When/Then only
                                                                                            describes one of numerous very
                                                                                            similar test scenarios


                                 Tests that have numerous:                              •   Simple tests
                                 Inputs that affect output behavior                     •   Tests that are more about
                                 Outputs/expected behaviors                                 verifying simple UI behavior
                                 Tests where it’s important to test a lot For instance – “Test that an error
        Specification By of different data scenarios                                        message is displayed when the
        Example -                Tests where the trigger event is                           user enters an incorrect
        Conceptual or somewhat obvious                                                      password.”
        Concrete                 Any test where it seems like a table                   •   Test where there is really only
                                 would be useful to:                                        one input or precondition
                                 describe the test better, or
                                 help explore all of the possible inputs
                                 and outputs for a test.
http://www.scrumcrazy.com/file/view/ScrumCrazy.com_StoryTestingPatternsSummary3.pdf/391066838/ScrumCrazy.com_StoryTestingPatternsSummary3.pdf
Outside-in




             http://bddkickstart.com
http://exampler.com
Understandable
 Maintainable
  Necessary
  Granular
   Reliable
Understandable




                 http://plus.maths.org/latestnews/sep-dec08/proof/proof.jpg
Maintainable
Necessary
Granular
Reliable
Prefer declarative examples


Declarative - makes a statement (.)
Imperative - makes a command (.)
Interrogative - asks a question (?)
Exclamatory - shows excitement (!)
Imperative vs Declarative Style

Feature: Sign up
  Scenario: New user redirected to their own page
    Given I am not logged in
    And I visit the homepage
    And I follow "Sign up"
    And I fill in "Username" with "Seb"
    And I fill in "Password" with "password"
    And I fill in "Confirm password" with "password"
    When I press "Sign up"
    Then I should be on my feeds page
    And I should see "Hello, Seb"
Imperative vs Declarative Style




Feature: Sign up
  Scenario: New user redirected to their own page
    When I sign up for a new account
    Then I should be taken to my feeds page
    And I should see a greeting message
Imperative vs Declarative Style



Feature: The entire system

  This feature illustrates what can happen when you
  take the declarative style too far.

  Scenario: It works
    When I use the system
    Then it should work perfectly
Remember your audience


Who should be able to read the examples?
What is their interest in them?
Keep things clear.
Don’t hide the context




  [Test] public void asterisk_should_format_to_em()
  {
   String expected = "This is <em>em</em> text";
   String actual = f.Format("This is *em* text");

      Assert.AreEqual(expected, actual);   }
Don’t hide the context




Scenario: Increased delivery charges for zip code
Given my delivery zip code is in Alaska
When I go to the checkout
Then I will have to pay the higher delivery charges
 I will have to pay the higher delivery charges
Don’t hide the context




    @Test    public void
smoker_requires_manual_referral()    {
     Referral referral = underwriting.process(smoker);

     Assert.assertEquals(Referral.Manual, referral); }
Assert.assertEquals(Referral.Manual, referral); }
Make data explicit



    @Test     public void
smoker_requires_manual_referral()    {
     Customer customer = new Customer(“Joe”, “Smith”,
       “12/12/1980”, “Accountant”, “$300,000”, “Yes”,
       “No”);

    Referral referral = underwriting.process(customer);

     Assert.assertEquals(Referral.Manual, referral); }
Assert.assertEquals(Referral.Manual, referral); }
Emphasise interesting details


    @Test    public void
smoker_requires_manual_referral()    {
     CustomerBuilder builder = new CustomerBuilder();
     Customer customer = builder
       .withSmokerFlag()
       .build();

    Referral referral = underwriting.process(customer);

     Assert.assertEquals(Referral.Manual, referral); }
Assert.assertEquals(Referral.Manual, referral); }
Work collaboratively


Create a ubiquitous language.
Use examples to discover the domain.
Decompose ruthlessly.
User / Stakeholder Story

    Online subscriptions
   In order to increase subscriptions
   visitors should be able to
   subscribe online with a VISA card
User / Stakeholder Story

   VISA subscriptions
   In order to increase subscriptions
   visitors should be able to
   subscribe online with a VISA card
Acceptance Criteria

 VISA subscriptions
 Credit Card Processing
 Acceptance criteria:
  •Must support increase subscriptions
 In order to VISA
  •Does not need to support MasterCard, Switch
  •...
 visitors should be prevented from entering
  •Customers should be able to
  invalid credit card details
 subscribe online with
  • ...                         a VISA card
"Customers should be prevented from
       entering invalid credit card details"


Really? So tell me...
   • What exactly makes someone's
      credit card details invalid?
   • Can they use spaces?
   • Should we checksum the digits?
   • How do we feed back that the details
      are invalid?
Avoid workflow style


Every journey is made from single steps.
Workflows are more brittle.
A few workflows go a long way.
Exploratory
                      and
                    manual




https://www.ibm.com/developerworks/library/j-aopwork11/TestingPyramid.jpg
Workflow style


Scenario: Happy path for registration and purchase
Given I am on the homepage
And I register for an account in Alaska
And I go to the most popular item page
And I add the most popular item to my basket
And I go to checkout
And I select my delivery address
And I give valid payment details
When I confirm acceptance of terms and conditions
Then my purchase will be confirmed
 my purchase will be confirmed
Workflow style



Scenario: Correct postage price for Alaska
Given I am on the homepage
And I register for an account in “Alaska”
And I go to the most popular item page
And I add the most popular item to my basket
And I go to checkout
When I select delivery to my home address
Then I have to pay the higher delivery charge
 I have to pay the higher delivery charge
Focus on a single step




Scenario: Correct postage price for Alaska
Given I am on the checkout page
When I select delivery to “Alaska”
Then I have to pay the higher delivery charge
 I have to pay the higher delivery charge
Consider costs and benefits


Remove unnecessary examples
Exercise the thinnest slice possible
Automate when viable
Manual
Cost




                       Automate




                Risk
Don’t let example dictate mechanism


Visibility depends on interest not layer.
Insulate examples from technical details.
Acceptance tests not always end-to-end.
Growing software from examples
Make technical tests visible




Scenario: High Risk rates for Test Pilots
Given an applicant with occupation “Test Pilot”
When the underwriting engine is invoked
Then we will use the “High Risk” rates table
 we will use the “High Risk” rates table
Is this end to end?


@domain_model
@stubbed_underwriting
Scenario: Applicant with high risk occupation
Given a standard, single-life, male applicant
But with a high risk occupation
When the application is processed
Then it will be referred for manual underwriting
 it will be referred for manual underwriting
Categorise in multiple dimensions


Faster feedback is better.
Other dimensions are also useful.
Take advantage of partitioning.
Summary


Example-based methods are very similar.
Minor variations by target audience.
Skills are transferable.
Nomenclature


Check
Example
Specification
Test
Seb Rose
Twitter:  @sebrose
Blog:     www.claysnow.co.uk
E-mail:seb@claysnow.co.uk
Backup
Growing software from examples
Growing software from examples
Growing software from examples
Drive out traceability


-
-
-
Verify dependencies


-
-
-

More Related Content

PDF
Testing an Erlang Backend
PPTX
Improving the Quality of Existing Software - DevIntersection April 2016
PPTX
Improving the Quality of Existing Software
PPTX
Improving The Quality of Existing Software
PDF
Seconf2011 database driven combinatorial testing
PDF
#NoEstimates does not mean "No estimates!" - Agile Cambridge 2015
PDF
Are you passionate - pecha kucha
PDF
Agile ones game
Testing an Erlang Backend
Improving the Quality of Existing Software - DevIntersection April 2016
Improving the Quality of Existing Software
Improving The Quality of Existing Software
Seconf2011 database driven combinatorial testing
#NoEstimates does not mean "No estimates!" - Agile Cambridge 2015
Are you passionate - pecha kucha
Agile ones game

Similar to Growing software from examples (20)

PPSX
Holistic Test Analysis & Design (2007)
PDF
Clean tests
ZIP
Test Driven Development
PDF
Agile Software Development in Practice - A Developer Perspective
PDF
Growing software from examples
PDF
Avatars of Test Driven Development (TDD)
PDF
Test Automation and Keyword-driven testing af Brian Nielsen, CISS/AAU
KEY
ATDD in Practice
PDF
Higher Order Testing
PDF
Agile Testing
PDF
Agile process
PDF
Tester Challenges in Agile ?
KEY
Introduction to Acceptance Test Driven Development
PPTX
Test design techniques
PDF
Shirly Ronen - User story testing activities
PPTX
Tdd pecha kucha_v2
PDF
TechDays 2013 Juhani Lind: Acceptance Test Driven Development With VS 2012
PDF
Growing Manual Testers into Automators
PDF
Anand Bagmar - Behavior Driven Testing (BDT) in Agile
PDF
Bdd For Web Applications from Scandinavian Developer Conference 2010
Holistic Test Analysis & Design (2007)
Clean tests
Test Driven Development
Agile Software Development in Practice - A Developer Perspective
Growing software from examples
Avatars of Test Driven Development (TDD)
Test Automation and Keyword-driven testing af Brian Nielsen, CISS/AAU
ATDD in Practice
Higher Order Testing
Agile Testing
Agile process
Tester Challenges in Agile ?
Introduction to Acceptance Test Driven Development
Test design techniques
Shirly Ronen - User story testing activities
Tdd pecha kucha_v2
TechDays 2013 Juhani Lind: Acceptance Test Driven Development With VS 2012
Growing Manual Testers into Automators
Anand Bagmar - Behavior Driven Testing (BDT) in Agile
Bdd For Web Applications from Scandinavian Developer Conference 2010
Ad

More from Seb Rose (20)

PDF
AI and developer obsolescence - BCS 2025.pdf
PDF
Software contracts - Global Enterprise Agile 2023.pdf
PDF
Micro-service delivery - without the pitfalls
PDF
DevSecOps - Agile Get-Together 2022.pdf
PDF
Contract testing - Sealights 2022.pdf
PDF
Example mapping - slice any story into testable examples - SoCraTes 2022.pdf
PDF
Software testing - learning to walk again (expoQA22)
PDF
DevSecOps - Unicom Agile and DevOps Expo (Adaptive Challenges) 2021
PDF
A brief history of requirements - Unicom 2022
PDF
Example mapping (with builds) - ProductWorld 2022
PDF
Example mapping - ProductWorld 2022
PDF
No code, low code, machine code QA ATL 2021
PDF
No code, low code, machine code QA ATL 2021
PDF
No code, low code, machine code - Unicom 2021
PDF
BDD: from soup to nuts - The Future of Work Scotland 2021
PDF
Contrasting test automation and BDD - 2020
PDF
Are BDD and test automation the same thing? Automation Guild 2021
PDF
"Our BDDs are broken!" Lean Agile Exchange 2020
PDF
User stories: from good intentions to bad advice - Agile Scotland 2019
PDF
User stories: from good intentions to bad advice - Lean Agile Scotland 2019
AI and developer obsolescence - BCS 2025.pdf
Software contracts - Global Enterprise Agile 2023.pdf
Micro-service delivery - without the pitfalls
DevSecOps - Agile Get-Together 2022.pdf
Contract testing - Sealights 2022.pdf
Example mapping - slice any story into testable examples - SoCraTes 2022.pdf
Software testing - learning to walk again (expoQA22)
DevSecOps - Unicom Agile and DevOps Expo (Adaptive Challenges) 2021
A brief history of requirements - Unicom 2022
Example mapping (with builds) - ProductWorld 2022
Example mapping - ProductWorld 2022
No code, low code, machine code QA ATL 2021
No code, low code, machine code QA ATL 2021
No code, low code, machine code - Unicom 2021
BDD: from soup to nuts - The Future of Work Scotland 2021
Contrasting test automation and BDD - 2020
Are BDD and test automation the same thing? Automation Guild 2021
"Our BDDs are broken!" Lean Agile Exchange 2020
User stories: from good intentions to bad advice - Agile Scotland 2019
User stories: from good intentions to bad advice - Lean Agile Scotland 2019
Ad

Recently uploaded (20)

PPTX
Spectroscopy.pptx food analysis technology
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
cuic standard and advanced reporting.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Big Data Technologies - Introduction.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
KodekX | Application Modernization Development
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Spectroscopy.pptx food analysis technology
Review of recent advances in non-invasive hemoglobin estimation
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
The AUB Centre for AI in Media Proposal.docx
cuic standard and advanced reporting.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Network Security Unit 5.pdf for BCA BBA.
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
Chapter 3 Spatial Domain Image Processing.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Big Data Technologies - Introduction.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
KodekX | Application Modernization Development
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
sap open course for s4hana steps from ECC to s4
Building Integrated photovoltaic BIPV_UPV.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy

Growing software from examples

  • 1. Growing software from examples Seb Rose, Claysnow Limited Twitter: @sebrose Blog: www.claysnow.co.uk E-mail: seb@claysnow.co.uk
  • 5. They’re called different things The difference is that one is called Behaviour Driven Development – and some people find that wording useful – and one (or two) is called (Acceptance) Test Driven Development – and some people find that wording useful in a different way. And that’s it. Liz Keogh, 2011 http://lizkeogh.com/2011/06/27/atdd-vs-bdd-and-a-potted-history-of-some-related-stuff/
  • 6. est Tes tom er T De tD Cus velo riven pm ent Domain D riven Specif Design ication b y Exam ple e Dr iven Exam pl ent A cceptan ce Test D eve l o pm en Deve l op m e n t D ri v Behaviour Driven Developme nt
  • 7. Pattern Generally good for Generally bad for Tests that require • Tests that have •a lot of setup OR unimportant/simple/obvious •easily forgotten setup preconditions Tests that have a non-obvious trigger Tests with few expected outputs • Tests where there are multiple Given/When/Th different inputs and multiple en different outputs • Tests where a single Given/When/Then only describes one of numerous very similar test scenarios Tests that have numerous: • Simple tests Inputs that affect output behavior • Tests that are more about Outputs/expected behaviors verifying simple UI behavior Tests where it’s important to test a lot For instance – “Test that an error Specification By of different data scenarios message is displayed when the Example - Tests where the trigger event is user enters an incorrect Conceptual or somewhat obvious password.” Concrete Any test where it seems like a table • Test where there is really only would be useful to: one input or precondition describe the test better, or help explore all of the possible inputs and outputs for a test. http://www.scrumcrazy.com/file/view/ScrumCrazy.com_StoryTestingPatternsSummary3.pdf/391066838/ScrumCrazy.com_StoryTestingPatternsSummary3.pdf
  • 8. Outside-in http://bddkickstart.com
  • 10. Understandable Maintainable Necessary Granular Reliable
  • 11. Understandable http://plus.maths.org/latestnews/sep-dec08/proof/proof.jpg
  • 16. Prefer declarative examples Declarative - makes a statement (.) Imperative - makes a command (.) Interrogative - asks a question (?) Exclamatory - shows excitement (!)
  • 17. Imperative vs Declarative Style Feature: Sign up Scenario: New user redirected to their own page Given I am not logged in And I visit the homepage And I follow "Sign up" And I fill in "Username" with "Seb" And I fill in "Password" with "password" And I fill in "Confirm password" with "password" When I press "Sign up" Then I should be on my feeds page And I should see "Hello, Seb"
  • 18. Imperative vs Declarative Style Feature: Sign up Scenario: New user redirected to their own page When I sign up for a new account Then I should be taken to my feeds page And I should see a greeting message
  • 19. Imperative vs Declarative Style Feature: The entire system This feature illustrates what can happen when you take the declarative style too far. Scenario: It works When I use the system Then it should work perfectly
  • 20. Remember your audience Who should be able to read the examples? What is their interest in them? Keep things clear.
  • 21. Don’t hide the context [Test] public void asterisk_should_format_to_em() { String expected = "This is <em>em</em> text"; String actual = f.Format("This is *em* text"); Assert.AreEqual(expected, actual); }
  • 22. Don’t hide the context Scenario: Increased delivery charges for zip code Given my delivery zip code is in Alaska When I go to the checkout Then I will have to pay the higher delivery charges I will have to pay the higher delivery charges
  • 23. Don’t hide the context @Test public void smoker_requires_manual_referral() { Referral referral = underwriting.process(smoker); Assert.assertEquals(Referral.Manual, referral); } Assert.assertEquals(Referral.Manual, referral); }
  • 24. Make data explicit @Test public void smoker_requires_manual_referral() { Customer customer = new Customer(“Joe”, “Smith”, “12/12/1980”, “Accountant”, “$300,000”, “Yes”, “No”); Referral referral = underwriting.process(customer); Assert.assertEquals(Referral.Manual, referral); } Assert.assertEquals(Referral.Manual, referral); }
  • 25. Emphasise interesting details @Test public void smoker_requires_manual_referral() { CustomerBuilder builder = new CustomerBuilder(); Customer customer = builder .withSmokerFlag() .build(); Referral referral = underwriting.process(customer); Assert.assertEquals(Referral.Manual, referral); } Assert.assertEquals(Referral.Manual, referral); }
  • 26. Work collaboratively Create a ubiquitous language. Use examples to discover the domain. Decompose ruthlessly.
  • 27. User / Stakeholder Story Online subscriptions In order to increase subscriptions visitors should be able to subscribe online with a VISA card
  • 28. User / Stakeholder Story VISA subscriptions In order to increase subscriptions visitors should be able to subscribe online with a VISA card
  • 29. Acceptance Criteria VISA subscriptions Credit Card Processing Acceptance criteria: •Must support increase subscriptions In order to VISA •Does not need to support MasterCard, Switch •... visitors should be prevented from entering •Customers should be able to invalid credit card details subscribe online with • ... a VISA card
  • 30. "Customers should be prevented from entering invalid credit card details" Really? So tell me... • What exactly makes someone's credit card details invalid? • Can they use spaces? • Should we checksum the digits? • How do we feed back that the details are invalid?
  • 31. Avoid workflow style Every journey is made from single steps. Workflows are more brittle. A few workflows go a long way.
  • 32. Exploratory and manual https://www.ibm.com/developerworks/library/j-aopwork11/TestingPyramid.jpg
  • 33. Workflow style Scenario: Happy path for registration and purchase Given I am on the homepage And I register for an account in Alaska And I go to the most popular item page And I add the most popular item to my basket And I go to checkout And I select my delivery address And I give valid payment details When I confirm acceptance of terms and conditions Then my purchase will be confirmed my purchase will be confirmed
  • 34. Workflow style Scenario: Correct postage price for Alaska Given I am on the homepage And I register for an account in “Alaska” And I go to the most popular item page And I add the most popular item to my basket And I go to checkout When I select delivery to my home address Then I have to pay the higher delivery charge I have to pay the higher delivery charge
  • 35. Focus on a single step Scenario: Correct postage price for Alaska Given I am on the checkout page When I select delivery to “Alaska” Then I have to pay the higher delivery charge I have to pay the higher delivery charge
  • 36. Consider costs and benefits Remove unnecessary examples Exercise the thinnest slice possible Automate when viable
  • 37. Manual Cost Automate Risk
  • 38. Don’t let example dictate mechanism Visibility depends on interest not layer. Insulate examples from technical details. Acceptance tests not always end-to-end.
  • 40. Make technical tests visible Scenario: High Risk rates for Test Pilots Given an applicant with occupation “Test Pilot” When the underwriting engine is invoked Then we will use the “High Risk” rates table we will use the “High Risk” rates table
  • 41. Is this end to end? @domain_model @stubbed_underwriting Scenario: Applicant with high risk occupation Given a standard, single-life, male applicant But with a high risk occupation When the application is processed Then it will be referred for manual underwriting it will be referred for manual underwriting
  • 42. Categorise in multiple dimensions Faster feedback is better. Other dimensions are also useful. Take advantage of partitioning.
  • 43. Summary Example-based methods are very similar. Minor variations by target audience. Skills are transferable.
  • 45. Seb Rose Twitter: @sebrose Blog: www.claysnow.co.uk E-mail:seb@claysnow.co.uk

Editor's Notes

  • #2: Scene setting Properties of examples Commonalities between approaches Nomenclature
  • #3: Background &amp; GOOS book
  • #4: TDD red/green/refactor
  • #5: Extended
  • #6: Examples or tests - Liz Keogh
  • #7: Various methods &amp; brief potted history
  • #8: The Bradley document
  • #9: - Try to get a manager to explain what TDD is - summarise / generalise that explanation: we start with a clear goal, before doing the work to achieve it - we can use this same pattern at lots of levels in a software project: if statements in the centre, business goal on the outside
  • #10: Example based Marick
  • #11: Example based properties
  • #12: Living documentation - at all layers - ubiquitous language - single source of truth - required domain knowledge varies
  • #13: Pragmatic ideas - DRY
  • #14: How exhaustive should we be?
  • #15: Single behaviour - granular
  • #16: Must be reliable - cost of failures in time &amp; reputation
  • #17: Commonality 1 - Understandable - Maintainable
  • #18: Declarative vs. Imperative - relate to maintainability and readability - all layers
  • #21: - Understandable - Necessary
  • #22: Background/setup
  • #23: Background/setup
  • #24: Data
  • #25: Data
  • #26: Builders
  • #27: Understandable - Ubiquitous language - Structure of examples Maintainable - Removal of repetition
  • #28: - Credit Liz Keogh for this version of the template - Don&apos;t let the template stop you from thinking! - Anti-pattern: In order to X as a user I want X - &apos;Why&apos; is the cure
  • #29: - Credit Liz Keogh for this version of the template - Don&apos;t let the template stop you from thinking! - Anti-pattern: In order to X as a user I want X - &apos;Why&apos; is the cure
  • #30: - Mention Agile Estimation &amp; Planning / User Stories Applied - Traditional agile - Mike Cohn calls them &apos;conditions of satisfaction&apos; - rules about scope, but not (normally) expressed as examples
  • #32: -Understandable -Maintainable -Granular -Reliable
  • #33: Testing pyramid
  • #34: Background/setup
  • #35: Background/setup
  • #36: Background/setup
  • #37: Consider Cost &amp; benefit - reliable - necessary
  • #38: Cost/risk graph - don’t automate everything - Necessary?
  • #39: Understandable Reliable
  • #40: Testing iceberg
  • #41: Making technical tests visible
  • #42: Mocking/stubbing - only at technical layers? - not interesting to business consumers?
  • #43: Necessary? Granular? Feedback velocity - know the purpose of every example - partition by speed and value
  • #44: Summary - pretty much the same. minor variations depending on target audience
  • #45: Nomenclature - Examples not tests.
  • #48: Testing quadrants - Marick/Hendrickson Is this useful?
  • #49: Decoupling as a matter of course
  • #50: Ports &amp; adaptors
  • #51: Drive Out Traceability - how do we know it’s tested? - how can we be sure it’s only tested once?
  • #52: Verify dependencies - External components - contract &amp; collaboration