SlideShare uma empresa Scribd logo
1 de 19
Test Driven Design
Behavior Driven Design
         Jason Noble
 instructor@jasonnoble.org
Test Driven Design
• TDD is a software development practice that
  relies on the repetition of a very short
  development cycle
  – Write a failing test that defines a desired
    improvement or new function
  – Write the minimum code possible to make the
    test pass
  – Refactor the code to acceptable standards
Red Green Refactor
• Write a failing test (Red)

• Make the test pass (Green)

• Refactor tests or code (NOT both!)
Why use TDD?
• Helps you break problems down into small
  manageable tasks

• Writing tests takes the fear out of
  programming

• Writing tests helps you communicate what
  your code SHOULD do/accomplish
TDD Example
• What can a calculator
  do?
  – Add        – Square Root
  – Subtract   – On / Off
               – Memory Clear
  – Multiply
               – Memory Set
  – Divide
               – Memory Recall
  – Equals
               – Negative numbers
  – Percent    – Decimals
Write a failing test (Red)
• Write a failing test
      # spec/calculator_spec.rb
      require ’./calculator’
      describe Calculator do
      end
• Failure:
     spec/calculator_spec.rb:1:in `require': cannot load such file –
      ./calculator (LoadError)
Make the test pass (Green)
• Write code to make the test pass

        touch calculator.rb

• Test Failure

       spec/calculator_spec.rb:3:in `<top (required)>': uninitialized
constant Calculator (NameError)
Make the test pass (Green)
• Write code to make the test pass

          # calculator.rb
          class Calculator
          end

• Test Success

          No examples found.

Finished in 0.00005 seconds
0 examples, 0 failures
What did we do?
•   Write a very simple test
•   Got a LoadError
•   Fixed the LoadError
•   Got a NameError
•   Fixed the NameError
•   Tests are green!
•   Refactor?
Add a test
      # spec/calculator_spec.rb
       let(:calculator) { Calculator.new }
       it "can be created" do
         calculator.should be_a(Calculator)
       end
Tests are still green!
      Running: spec/calculator_spec.rb

      Calculator
       can be created

      Finished in 0.00127 seconds
      1 example, 0 failures
What did we do?
•   Add a very simple test
•   Got no errors
•   Tests are green!
•   Refactor?
Add a test
     # spec/calculator_spec.rb
      describe "#total" do
        it "returns 0 by default" do
          calculator.total.should == 0
        end
      end

Tests are red!
Make the tests pass
• Add the minimum code to make the test fail in
  a different way (or succeed)
      # calculator.rb
      def total
      end
Make the tests pass
• Write the MINIMUM code necessary to make
  the test pass
     # calculator.rb
     def total
        0
     end
• Tests are GREEN!
• Refactor?
What did we do?
•   Write a very simple test (total.should == 0)
•   Got a NoMethod error
•   Fixed the NoMethodError
•   Got an unexpected result returned
•   Fixed the result to always return 0
•   Tests are green!
•   Refactor?
Behavior Driven Development
• Uses the basis of TDD, domain driven design
  and object oriented design to provide
  software developers and business analysts
  with shared tools in order to collaborate on
  software development
• TDD describes how the software works
• BDD describes how the end user uses the
  software
BDD Example
Scenario: User adds two positive numbers

Given I turn the calculator on,
Then I should see zero on the screen

When I add 5
And I add 7
Then I should see 12 on the screen
Ruby Cucumber
• Uses regular expressions to match steps
  Given /I turn the calculator on/ do
    @calculator = Calculator.new
    @calculator.on
  end
  Then /I should see (d+) on the screen/ do |expected_value|
      @calculator.total.should == expected_value
  end
  When /I add (d+) / do |number|
      @calculator.add(number)
  end
Further Readings
• Test Driven Development: By Example by Kent
  Beck
• Everyday Rails Testing with Rspec by Aaron
  Sumner
• The Cucumber Book by Matt Wynne and Aslak
  Hellesoy

Mais conteúdo relacionado

Mais procurados

Exactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in KostromaExactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in Kostroma
Iosif Itkin
 
Pitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz BankowskiPitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz Bankowski
Agileee
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testing
dversaci
 

Mais procurados (20)

Automate test, tools, advantages, and disadvantages
Automate test, tools, advantages,  and disadvantagesAutomate test, tools, advantages,  and disadvantages
Automate test, tools, advantages, and disadvantages
 
Exactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in KostromaExactpro Systems for KSTU Students in Kostroma
Exactpro Systems for KSTU Students in Kostroma
 
Example of TAF with batch execution of test cases
 Example of TAF with batch execution of test cases  Example of TAF with batch execution of test cases
Example of TAF with batch execution of test cases
 
Acceptance Test Driven Development With Spec Flow And Friends
Acceptance Test Driven Development With Spec Flow And FriendsAcceptance Test Driven Development With Spec Flow And Friends
Acceptance Test Driven Development With Spec Flow And Friends
 
Testing the Untestable
Testing the UntestableTesting the Untestable
Testing the Untestable
 
Writing useful automated tests for the single page applications you build
Writing useful automated tests for the single page applications you buildWriting useful automated tests for the single page applications you build
Writing useful automated tests for the single page applications you build
 
TDD and BDD and ATDD
TDD and BDD and ATDDTDD and BDD and ATDD
TDD and BDD and ATDD
 
Jbehave selenium
Jbehave seleniumJbehave selenium
Jbehave selenium
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everything
 
Unit testing - A&BP CC
Unit testing - A&BP CCUnit testing - A&BP CC
Unit testing - A&BP CC
 
Pitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz BankowskiPitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz Bankowski
 
Behavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile TestingBehavior Driven Development (BDD) and Agile Testing
Behavior Driven Development (BDD) and Agile Testing
 
Arquillian & Citrus
Arquillian & CitrusArquillian & Citrus
Arquillian & Citrus
 
Parallel run selenium tests in a good way
Parallel run selenium tests in a good  wayParallel run selenium tests in a good  way
Parallel run selenium tests in a good way
 
Principles and patterns for test driven development
Principles and patterns for test driven developmentPrinciples and patterns for test driven development
Principles and patterns for test driven development
 
iOS Unit Testing
iOS Unit TestingiOS Unit Testing
iOS Unit Testing
 
Behavior Driven Development Testing (BDD)
Behavior Driven Development Testing (BDD)Behavior Driven Development Testing (BDD)
Behavior Driven Development Testing (BDD)
 
DDD with Behat
DDD with BehatDDD with Behat
DDD with Behat
 
VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)
 
Testing in AngularJS
Testing in AngularJSTesting in AngularJS
Testing in AngularJS
 

Semelhante a Intro to TDD and BDD

Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test community
Kerry Buckley
 
Effective TDD - Less is more
Effective TDD - Less is moreEffective TDD - Less is more
Effective TDD - Less is more
Ben Lau
 
{10.0} Test Driven Development.pptx
{10.0} Test Driven Development.pptx{10.0} Test Driven Development.pptx
{10.0} Test Driven Development.pptx
AmalEldhose2
 
BDD style Unit Testing
BDD style Unit TestingBDD style Unit Testing
BDD style Unit Testing
Wen-Tien Chang
 
Behaviour driven development present
Behaviour driven development presentBehaviour driven development present
Behaviour driven development present
Raul Panjiyar
 

Semelhante a Intro to TDD and BDD (20)

Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test community
 
Ruby Testing: Cucumber and RSpec
Ruby Testing: Cucumber and RSpecRuby Testing: Cucumber and RSpec
Ruby Testing: Cucumber and RSpec
 
TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012TDD reloaded - JUGTAA 24 Ottobre 2012
TDD reloaded - JUGTAA 24 Ottobre 2012
 
Tdd
TddTdd
Tdd
 
Effective TDD - Less is more
Effective TDD - Less is moreEffective TDD - Less is more
Effective TDD - Less is more
 
Tdd
TddTdd
Tdd
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
{10.0} Test Driven Development.pptx
{10.0} Test Driven Development.pptx{10.0} Test Driven Development.pptx
{10.0} Test Driven Development.pptx
 
Test Driven Development on Android (Kotlin Kenya)
Test Driven Development on Android (Kotlin Kenya)Test Driven Development on Android (Kotlin Kenya)
Test Driven Development on Android (Kotlin Kenya)
 
Test Driven Development Introduction
Test Driven Development IntroductionTest Driven Development Introduction
Test Driven Development Introduction
 
Software Craftsmanship @ Ntnu
Software Craftsmanship @ NtnuSoftware Craftsmanship @ Ntnu
Software Craftsmanship @ Ntnu
 
An Introduction To Software Development - Test Driven Development, Part 1
An Introduction To Software Development - Test Driven Development, Part 1An Introduction To Software Development - Test Driven Development, Part 1
An Introduction To Software Development - Test Driven Development, Part 1
 
Debug - MITX60012016-V005100
Debug - MITX60012016-V005100Debug - MITX60012016-V005100
Debug - MITX60012016-V005100
 
Test Driven Development with Laravel
Test Driven Development with LaravelTest Driven Development with Laravel
Test Driven Development with Laravel
 
BDD style Unit Testing
BDD style Unit TestingBDD style Unit Testing
BDD style Unit Testing
 
Unit Test Your Database
Unit Test Your DatabaseUnit Test Your Database
Unit Test Your Database
 
Start with passing tests (tdd for bugs) v0.5 (22 sep 2016)
Start with passing tests (tdd for bugs) v0.5 (22 sep 2016)Start with passing tests (tdd for bugs) v0.5 (22 sep 2016)
Start with passing tests (tdd for bugs) v0.5 (22 sep 2016)
 
2.2 Demonstrate the understanding of Programming Life Cycle
2.2 Demonstrate the understanding of Programming Life Cycle2.2 Demonstrate the understanding of Programming Life Cycle
2.2 Demonstrate the understanding of Programming Life Cycle
 
Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013
 
Behaviour driven development present
Behaviour driven development presentBehaviour driven development present
Behaviour driven development present
 

Mais de Jason Noble

Mais de Jason Noble (17)

Davinci git brown_bag
Davinci git brown_bagDavinci git brown_bag
Davinci git brown_bag
 
Rspec 101
Rspec 101Rspec 101
Rspec 101
 
Dash of ajax
Dash of ajaxDash of ajax
Dash of ajax
 
jQuery Intro
jQuery IntrojQuery Intro
jQuery Intro
 
Intro to Rails Give Camp Atlanta
Intro to Rails Give Camp AtlantaIntro to Rails Give Camp Atlanta
Intro to Rails Give Camp Atlanta
 
Google apps
Google appsGoogle apps
Google apps
 
Smarter cart
Smarter cartSmarter cart
Smarter cart
 
Cart creation-101217222728-phpapp01
Cart creation-101217222728-phpapp01Cart creation-101217222728-phpapp01
Cart creation-101217222728-phpapp01
 
Catalog display
Catalog displayCatalog display
Catalog display
 
Validation unit testing
Validation unit testingValidation unit testing
Validation unit testing
 
Creating the application
Creating the applicationCreating the application
Creating the application
 
Capistrano
CapistranoCapistrano
Capistrano
 
Atlanta Pm Git 101
Atlanta Pm Git 101Atlanta Pm Git 101
Atlanta Pm Git 101
 
Regex Intro
Regex IntroRegex Intro
Regex Intro
 
Git101
Git101Git101
Git101
 
Git Atlrug
Git AtlrugGit Atlrug
Git Atlrug
 
Git102
Git102Git102
Git102
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 

Intro to TDD and BDD

  • 1. Test Driven Design Behavior Driven Design Jason Noble instructor@jasonnoble.org
  • 2. Test Driven Design • TDD is a software development practice that relies on the repetition of a very short development cycle – Write a failing test that defines a desired improvement or new function – Write the minimum code possible to make the test pass – Refactor the code to acceptable standards
  • 3. Red Green Refactor • Write a failing test (Red) • Make the test pass (Green) • Refactor tests or code (NOT both!)
  • 4. Why use TDD? • Helps you break problems down into small manageable tasks • Writing tests takes the fear out of programming • Writing tests helps you communicate what your code SHOULD do/accomplish
  • 5. TDD Example • What can a calculator do? – Add – Square Root – Subtract – On / Off – Memory Clear – Multiply – Memory Set – Divide – Memory Recall – Equals – Negative numbers – Percent – Decimals
  • 6. Write a failing test (Red) • Write a failing test # spec/calculator_spec.rb require ’./calculator’ describe Calculator do end • Failure: spec/calculator_spec.rb:1:in `require': cannot load such file – ./calculator (LoadError)
  • 7. Make the test pass (Green) • Write code to make the test pass touch calculator.rb • Test Failure spec/calculator_spec.rb:3:in `<top (required)>': uninitialized constant Calculator (NameError)
  • 8. Make the test pass (Green) • Write code to make the test pass # calculator.rb class Calculator end • Test Success No examples found. Finished in 0.00005 seconds 0 examples, 0 failures
  • 9. What did we do? • Write a very simple test • Got a LoadError • Fixed the LoadError • Got a NameError • Fixed the NameError • Tests are green! • Refactor?
  • 10. Add a test # spec/calculator_spec.rb let(:calculator) { Calculator.new } it "can be created" do calculator.should be_a(Calculator) end Tests are still green! Running: spec/calculator_spec.rb Calculator can be created Finished in 0.00127 seconds 1 example, 0 failures
  • 11. What did we do? • Add a very simple test • Got no errors • Tests are green! • Refactor?
  • 12. Add a test # spec/calculator_spec.rb describe "#total" do it "returns 0 by default" do calculator.total.should == 0 end end Tests are red!
  • 13. Make the tests pass • Add the minimum code to make the test fail in a different way (or succeed) # calculator.rb def total end
  • 14. Make the tests pass • Write the MINIMUM code necessary to make the test pass # calculator.rb def total 0 end • Tests are GREEN! • Refactor?
  • 15. What did we do? • Write a very simple test (total.should == 0) • Got a NoMethod error • Fixed the NoMethodError • Got an unexpected result returned • Fixed the result to always return 0 • Tests are green! • Refactor?
  • 16. Behavior Driven Development • Uses the basis of TDD, domain driven design and object oriented design to provide software developers and business analysts with shared tools in order to collaborate on software development • TDD describes how the software works • BDD describes how the end user uses the software
  • 17. BDD Example Scenario: User adds two positive numbers Given I turn the calculator on, Then I should see zero on the screen When I add 5 And I add 7 Then I should see 12 on the screen
  • 18. Ruby Cucumber • Uses regular expressions to match steps Given /I turn the calculator on/ do @calculator = Calculator.new @calculator.on end Then /I should see (d+) on the screen/ do |expected_value| @calculator.total.should == expected_value end When /I add (d+) / do |number| @calculator.add(number) end
  • 19. Further Readings • Test Driven Development: By Example by Kent Beck • Everyday Rails Testing with Rspec by Aaron Sumner • The Cucumber Book by Matt Wynne and Aslak Hellesoy