SlideShare uma empresa Scribd logo
1 de 30
The whole enchilada

    Inception to delivery in
         just 2 weeks




                               1
We write code... and we
    write it well

Oh... And we’re ON A
        BOAT!




                          2
Steve Jackson                                           Dave Shah
@stevejxsn                                             @daveshah
steve.jackson@leandogsoftware.com   dave.shah@leandogsoftware.com




                                                               3
WE LOVE BURRITOS...




                      4
We love apps....




                   5
We LOVE FEEDBACK!




                    6
Making assumptions explicit




                              7
Features




           8
Low Fidelity Prototyping




                           9
We Wrote a cuke...
Feature: Getting directions to Ohio City Burrito

As a hungry burrito lover
I want to drive to OCB
So I can get a Brother’s Burrito

Scenario: Directions button should take us to Google
Maps

Given I'm hungry for some OCB
When I touch the map icon
Then Google maps should provide me with directions




                                                       10
What’s A CUKE?...
                    Feature:

                    As a hungry burrito lover
                    I want to drive to OCB
                    So I can get a Brother’s

                    Scenario: Directions butt
                    take us to Google Maps

                    Given I'm hungry for some
                    When I touch the map icon
                    Then Google maps should p
                    with directions
                    CUKES ARE TESTS
                                          11
Why test first?




                  (MORE ON THIS LATER...)


                                            12
Why test first?   (CONVINCING YOUR BOSS)




                          CapersJones, SoftwareAssessments, Benchmarks, andBestPractices- Addison- Wesley, 2000




                                                                                                                  13
ATDD
     Acceptance Test    Developer Test
Define
 Def             Fail
                 Def         Fail
                             Def

                            TDD
                                      Pass
                                      Def



 Pass
 Def                       Refactor
                             Def


                                             14
Three amigos



 Knows what to build
 Knows how to build it
 Knows how to verify it




                           15
Our First cuke
Feature: Getting directions to Ohio City Burrito

As a hungry burrito lover
I want to drive to OCB
So I can get a Brother’s Burrito

Scenario: Directions button should take us to Google
Maps

Given I'm hungry for some OCB
When I touch the map icon
Then Google maps should provide me with directions




                                                       16
Why ATDD?
 Constant Collaboration
 Improved Understanding
 Eliminates Waste
 Move Risk Forward
 Bake Quality In




                           17
Sounds great in theory... lets see some
code!




                                          18
time travel




              19
@Override
protected void onStart() {
    super.onStart();
    ListView menuListView = (ListView) findViewById(id.menu_list_view);

    menuListView.setAdapter(new ArrayAdapter<String>(
            this,android.R.layout.simple_list_item_1,
            Arrays.asList("Burritos","Tacos","Choices and Additions")));
}




                                                                    20
Scenario: Checking pricesGiven I want to see what Ohio City Burrito
serves
When I touch the menu signThen I should see the prices:
| Brother’s Burrito | $6.15 || Baby Burrito      | $1.85 |
 |




                                                                  21
Then /^I should see the prices:$/ do |expected_items|
  actual_items = []
  expected_items.raw.each do |item, expected_price|
    price = on(MenuScreen).price item
    actual_items << [item, price]
  end
  expected_items.diff! actual_items
end




                                                        22
class MenuScreen
class MenuScreen
  include Gametel
  include Gametel

  ITEM = 0
  button(:directions, :id => "directions_button")
  DESCRIPTION = 1
  button(:call, :id => "call_button")
  PRICE = 2
end

  button(:directions, :id => "directions_button")
  button(:call, :id => "call_button")

  def price(item)
    Gametel::Views::ListItem.new(platform, :text => item).text[PRICE]
  end
end




                                                                   23
And Now...
LIVE
CODING!!!!




             24
So we mentioned science...




                             25
So we mentioned science...




                             26
So we mentioned science...
     Acceptance Test      Developer Test
Define
 Def             Fail
                 Def           Fail
                               Def

                               TDD
                                         Pass
                                         Def



 Pass
 Def                          Refactor
                                Def


                                                 27
                                                12
So we mentioned science...
                     Write a Test == Experiment
          Hypothesis               Fail
                                   Def


                                      Results
                        Repeat          Pass
                                         Def


                              Conclusion
                                 Refactor
                                  Def


                                                 28
                                                12
Thanks!




          Michael Lemley
          @audienceofnone




                      29
Happy hacking!

           https://github.com/leandog/OCBMobile
Steve Jackson                                           Dave Shah
@stevejxsn                                             @daveshah
steve.jackson@leandogsoftware.com   dave.shah@leandogsoftware.com




                                                               30

Mais conteúdo relacionado

Destaque

Data visualization
Data visualizationData visualization
Data visualizationkksijo
 
You are my all in all
You are my all in allYou are my all in all
You are my all in allMrAiono
 
Kumpulan materi-pendapatan-nasional-1
Kumpulan materi-pendapatan-nasional-1Kumpulan materi-pendapatan-nasional-1
Kumpulan materi-pendapatan-nasional-1apasalahkukaubuat
 
MIT 100K Pitch Contest Keynote 2012
MIT 100K Pitch Contest Keynote 2012MIT 100K Pitch Contest Keynote 2012
MIT 100K Pitch Contest Keynote 2012Rahim Fazal
 
Can ban ve thiet ke va lap trinh game
Can ban ve thiet ke va lap trinh gameCan ban ve thiet ke va lap trinh game
Can ban ve thiet ke va lap trinh gameKim Hyun Hai
 
112988 633632132031191250
112988 633632132031191250112988 633632132031191250
112988 633632132031191250143mannu
 
自分に合ったWeb出店とは? in まるたまサマースクール
自分に合ったWeb出店とは? in まるたまサマースクール自分に合ったWeb出店とは? in まるたまサマースクール
自分に合ったWeb出店とは? in まるたまサマースクールRikiya Suzuki
 
Basics of r commands
Basics of r commandsBasics of r commands
Basics of r commandskksijo
 
Public contests of neologisms in Estonia
Public contests of neologisms in EstoniaPublic contests of neologisms in Estonia
Public contests of neologisms in EstoniaTERMCAT
 

Destaque (17)

Data visualization
Data visualizationData visualization
Data visualization
 
You are my all in all
You are my all in allYou are my all in all
You are my all in all
 
vaulin
vaulinvaulin
vaulin
 
De toan a_2012
De toan a_2012De toan a_2012
De toan a_2012
 
Kumpulan materi-pendapatan-nasional-1
Kumpulan materi-pendapatan-nasional-1Kumpulan materi-pendapatan-nasional-1
Kumpulan materi-pendapatan-nasional-1
 
burak t a
burak t aburak t a
burak t a
 
MIT 100K Pitch Contest Keynote 2012
MIT 100K Pitch Contest Keynote 2012MIT 100K Pitch Contest Keynote 2012
MIT 100K Pitch Contest Keynote 2012
 
Can ban ve thiet ke va lap trinh game
Can ban ve thiet ke va lap trinh gameCan ban ve thiet ke va lap trinh game
Can ban ve thiet ke va lap trinh game
 
Abu bakar al miski
Abu bakar al miskiAbu bakar al miski
Abu bakar al miski
 
The Bunker Script
The Bunker ScriptThe Bunker Script
The Bunker Script
 
Subtraction 5
Subtraction 5Subtraction 5
Subtraction 5
 
Alat peraga secang
Alat peraga  secangAlat peraga  secang
Alat peraga secang
 
112988 633632132031191250
112988 633632132031191250112988 633632132031191250
112988 633632132031191250
 
自分に合ったWeb出店とは? in まるたまサマースクール
自分に合ったWeb出店とは? in まるたまサマースクール自分に合ったWeb出店とは? in まるたまサマースクール
自分に合ったWeb出店とは? in まるたまサマースクール
 
Trin-E-Cards
Trin-E-CardsTrin-E-Cards
Trin-E-Cards
 
Basics of r commands
Basics of r commandsBasics of r commands
Basics of r commands
 
Public contests of neologisms in Estonia
Public contests of neologisms in EstoniaPublic contests of neologisms in Estonia
Public contests of neologisms in Estonia
 

Semelhante a The Whole Enchilada

Learning Fast With A/B Testing and Continuous Deployment
Learning Fast With A/B Testing and Continuous DeploymentLearning Fast With A/B Testing and Continuous Deployment
Learning Fast With A/B Testing and Continuous DeploymentBrett Durrett
 
Solution to warsaw's crackme1.1
Solution to warsaw's crackme1.1Solution to warsaw's crackme1.1
Solution to warsaw's crackme1.1Aodrulez
 
How to talk to developers for your first prototype.
How to talk to developers for your first prototype.How to talk to developers for your first prototype.
How to talk to developers for your first prototype.Dan Rockwell
 
Talking about craftsmanship with ensaimadas and katas
Talking about craftsmanship with ensaimadas and katasTalking about craftsmanship with ensaimadas and katas
Talking about craftsmanship with ensaimadas and katasRachel M. Carmena
 
When to embrace Behavior Driven Development?
When to embrace Behavior Driven Development?When to embrace Behavior Driven Development?
When to embrace Behavior Driven Development?Ranjith Tharayil
 
Talking about craftsmanship with "ensaimadas" and katas (May, 2018)
Talking about craftsmanship with "ensaimadas" and katas (May, 2018)Talking about craftsmanship with "ensaimadas" and katas (May, 2018)
Talking about craftsmanship with "ensaimadas" and katas (May, 2018)Rachel M. Carmena
 
Testing is Fun @Confoo.ca 2012
Testing is Fun @Confoo.ca  2012Testing is Fun @Confoo.ca  2012
Testing is Fun @Confoo.ca 2012Gourav Tiwari
 
Sikuli: Using Screenshots for GUI Automation and Testing
Sikuli: Using Screenshots for GUI Automation and TestingSikuli: Using Screenshots for GUI Automation and Testing
Sikuli: Using Screenshots for GUI Automation and Testingvgod
 

Semelhante a The Whole Enchilada (11)

Week 5
Week 5Week 5
Week 5
 
Week 5
Week 5Week 5
Week 5
 
Learning Fast With A/B Testing and Continuous Deployment
Learning Fast With A/B Testing and Continuous DeploymentLearning Fast With A/B Testing and Continuous Deployment
Learning Fast With A/B Testing and Continuous Deployment
 
Solution to warsaw's crackme1.1
Solution to warsaw's crackme1.1Solution to warsaw's crackme1.1
Solution to warsaw's crackme1.1
 
How to talk to developers for your first prototype.
How to talk to developers for your first prototype.How to talk to developers for your first prototype.
How to talk to developers for your first prototype.
 
Talking about craftsmanship with ensaimadas and katas
Talking about craftsmanship with ensaimadas and katasTalking about craftsmanship with ensaimadas and katas
Talking about craftsmanship with ensaimadas and katas
 
When to embrace Behavior Driven Development?
When to embrace Behavior Driven Development?When to embrace Behavior Driven Development?
When to embrace Behavior Driven Development?
 
Spoilers fosdem-2013
Spoilers fosdem-2013Spoilers fosdem-2013
Spoilers fosdem-2013
 
Talking about craftsmanship with "ensaimadas" and katas (May, 2018)
Talking about craftsmanship with "ensaimadas" and katas (May, 2018)Talking about craftsmanship with "ensaimadas" and katas (May, 2018)
Talking about craftsmanship with "ensaimadas" and katas (May, 2018)
 
Testing is Fun @Confoo.ca 2012
Testing is Fun @Confoo.ca  2012Testing is Fun @Confoo.ca  2012
Testing is Fun @Confoo.ca 2012
 
Sikuli: Using Screenshots for GUI Automation and Testing
Sikuli: Using Screenshots for GUI Automation and TestingSikuli: Using Screenshots for GUI Automation and Testing
Sikuli: Using Screenshots for GUI Automation and Testing
 

Último

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 

Último (20)

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 

The Whole Enchilada

  • 1. The whole enchilada Inception to delivery in just 2 weeks 1
  • 2. We write code... and we write it well Oh... And we’re ON A BOAT! 2
  • 3. Steve Jackson Dave Shah @stevejxsn @daveshah steve.jackson@leandogsoftware.com dave.shah@leandogsoftware.com 3
  • 10. We Wrote a cuke... Feature: Getting directions to Ohio City Burrito As a hungry burrito lover I want to drive to OCB So I can get a Brother’s Burrito Scenario: Directions button should take us to Google Maps Given I'm hungry for some OCB When I touch the map icon Then Google maps should provide me with directions 10
  • 11. What’s A CUKE?... Feature: As a hungry burrito lover I want to drive to OCB So I can get a Brother’s Scenario: Directions butt take us to Google Maps Given I'm hungry for some When I touch the map icon Then Google maps should p with directions CUKES ARE TESTS 11
  • 12. Why test first? (MORE ON THIS LATER...) 12
  • 13. Why test first? (CONVINCING YOUR BOSS) CapersJones, SoftwareAssessments, Benchmarks, andBestPractices- Addison- Wesley, 2000 13
  • 14. ATDD Acceptance Test Developer Test Define Def Fail Def Fail Def TDD Pass Def Pass Def Refactor Def 14
  • 15. Three amigos  Knows what to build  Knows how to build it  Knows how to verify it 15
  • 16. Our First cuke Feature: Getting directions to Ohio City Burrito As a hungry burrito lover I want to drive to OCB So I can get a Brother’s Burrito Scenario: Directions button should take us to Google Maps Given I'm hungry for some OCB When I touch the map icon Then Google maps should provide me with directions 16
  • 17. Why ATDD?  Constant Collaboration  Improved Understanding  Eliminates Waste  Move Risk Forward  Bake Quality In 17
  • 18. Sounds great in theory... lets see some code! 18
  • 20. @Override protected void onStart() { super.onStart(); ListView menuListView = (ListView) findViewById(id.menu_list_view); menuListView.setAdapter(new ArrayAdapter<String>( this,android.R.layout.simple_list_item_1, Arrays.asList("Burritos","Tacos","Choices and Additions"))); } 20
  • 21. Scenario: Checking pricesGiven I want to see what Ohio City Burrito serves When I touch the menu signThen I should see the prices: | Brother’s Burrito | $6.15 || Baby Burrito | $1.85 | | 21
  • 22. Then /^I should see the prices:$/ do |expected_items| actual_items = [] expected_items.raw.each do |item, expected_price| price = on(MenuScreen).price item actual_items << [item, price] end expected_items.diff! actual_items end 22
  • 23. class MenuScreen class MenuScreen include Gametel include Gametel ITEM = 0 button(:directions, :id => "directions_button") DESCRIPTION = 1 button(:call, :id => "call_button") PRICE = 2 end button(:directions, :id => "directions_button") button(:call, :id => "call_button") def price(item) Gametel::Views::ListItem.new(platform, :text => item).text[PRICE] end end 23
  • 25. So we mentioned science... 25
  • 26. So we mentioned science... 26
  • 27. So we mentioned science... Acceptance Test Developer Test Define Def Fail Def Fail Def TDD Pass Def Pass Def Refactor Def 27 12
  • 28. So we mentioned science... Write a Test == Experiment Hypothesis Fail Def Results Repeat Pass Def Conclusion Refactor Def 28 12
  • 29. Thanks! Michael Lemley @audienceofnone 29
  • 30. Happy hacking! https://github.com/leandog/OCBMobile Steve Jackson Dave Shah @stevejxsn @daveshah steve.jackson@leandogsoftware.com dave.shah@leandogsoftware.com 30