Your SlideShare is downloading. ×
Test Driven Development - Overview and Adoption
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Test Driven Development - Overview and Adoption


Published on

- What is TDD …

- What is TDD
- TDD adoption stages
- Adopting a test strategy
- Making TDD stick

Published in: Technology, Education

1 Comment
  • Não consegui realizar o download, poderia me disponibilizar por e-mail?
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Test-Driven Development
  • 2. Why Test-Driven Development (TDD)?
    • Agile implies adapting to change quickly…
    • In code, this translates to “easy to maintain & refactor” and implies…
      • Clean design
      • No duplication
      • Low/loose coupling
      • Eliminating “code smells”
      • Thorough test coverage
    • TDD is a technique that helps getting there
  • 3. What is TDD?
    • Originates from test-first programming concepts of Extreme Programming (XP)
    • Is a software design method more than a testing method
    • Developers create automated unit tests that define code requirements before writing the code itself
  • 4. Extreme Programming Practices Overview source:
  • 5. The TDD cycle
    • Add a test
    • Run all tests and see if the new one fails
    • Write code
    • Run all tests and see the new test succeed
    • Refactor the code
    Test Code Refactor source: Test-Driven Development by Example, by Kent Beck
  • 6. TDD Key Principles
    • Write code if and only if an automated unit test fails
    • Eliminate duplication and other “ smells”
  • 7. Benefits
    • If done well, TDD can bring tons of benefits:
    • Better test coverage
      • A safety net for refactoring
      • Helps prevent regression
      • Measurable
    • Better design
      • Developer acts as user of his own code
      • Looser coupling
      • Easier to test
      • Constant elimination of “code smells”
  • 8. Benefits (continued)
    • Functionality required only
      • “ You Ain’t Gonna Need It” (YAGNI) principle
      • Lower maintenance cost
    • Helps managing fear in face of complexity
      • Brings confidence in the code base
      • Decreases pressure
    • Documents code
      • Lots of example usage of the code
  • 9. Benefits (continued)
    • Improves overall quality
      • Reduces number of bugs released
      • Reduces chances of bugs reoccuring
  • 10. TDD Adoption Stages
    • The developer starts writing unit tests around their code using a test framework like JUnit or TestNG.
    • As the body of tests increases the developer begins to enjoy a strongly increased sense of confidence in their work.
    • At some point the developer has the insight (or are shown) that writing the tests before writing the code, helps them focus on only writing the code that they need.
  • 11. TDD Adoption Stages (continued)
    • The developer also notices that when they return to some code that they haven't seen for a while, the tests serve to document how the code works.
    • A point of revelation occurs when the developer realizes that writing tests in this way helps them to "discover" the API to their code. TDD has now become a design process.
    • Expertise in TDD begins to be drawn at the point where the developer realizes that TDD is not about testing, it is about defining behavior.
    • Behavior is about the interactions between components of the system and so the use of mocking is a fundamental to advanced TDD.
  • 12. Pitfall stopping midway
    • Too many integration tests vs unit tests
    • Tests more complex
    • Tests become constraint on change
    • Tests take much time to run
    • Tests code tightly coupled to implementation
    • A common failure mode for code bases on Agile projects
    • A solution: Use Mocks!
  • 13. Adopting a test strategy Unit tests Integration tests Functional tests Acceptance tests + - $$
  • 14. Another Categorization Unit tests Integration tests + - $$ Unit tests Integration tests End-to-end tests Customer tests Developer tests
  • 15. Making TDD stick
    • Classroom training
    • Use measurement tools
    • Pair programming
    • Support from management
    • Community
    • Coding dojos
    • Reading workshops
    • Patience… it will take more time than you expect!
    • Pizza
    source:, Making TDD stick, Problems and Solutions for Adopters, by Mark Levison
  • 16. References
    • Test-Driven Development by Example ,
    • Kent Beck – Addison-Wesley, 2002
    • Making TDD Stick, Problems and Solutions for Adopters , Mark Levison,, January 2009
  • 17. Questions ?