Duration: 2 to 3 days
Recommended Class Size: 15 to 30
Prerequisites: Skilled to Advanced development

This course takes a pragmatic approach to Test Driven Development (TDD). We believe testing should be a fundamental, integral part of the software development process including design and programming. By fundamental, we mean that doing testing well leads to better designs and programs. By integral, we mean that it is part of the normal day-to-day life of the programmer, not a burdensome task added at the end of the real work. Test Driven Development is not always done as Test-First Development and it is core to know what to test vs what not to test. The course is a mixture of lecture, short readings, discussion, and labs. Attendees will write acceptance criteria, functional acceptance tests unit tests. Core testing best practices will be examined included some advanced topics such as organizing tests, test environments, continuous integration, and testing web services. Additionally, testing techniques such as using Mock Objects and testing for different qualities such as performance and security are discussed. The attendees will read information about testing, learn the details of the techniques, and apply them in a group setting (preferably to systems they are currently working on).

Joe's training provided me with the knowledge and skills needed to assist my company in the process of TDD adoption. The course gathers theory and practice and provides a solid foundation on refactoring. As a bonus, you have the opportunity to meet Joe, a guru from our area, an extremely fun person with incredible teaching skills. -- Guilherme Utrabo, Software Engineer

For more information about Pragmatic Test Driven Development, read our blog on the topic.

Slides to our Agile 2012 Presentation on Testing System Qualities can be found on SlideShare (Click Here).

Slides to our Agile 2012 Presentation on Pragmatic, Not Dogmatic TDD can be found on Slide Share (Click Here).

Course Objectives

  • Effectively write unit tests in an agile development environment
  • Learn how to write maintainable tests
  • Isolate test code from the code it depends on
  • Write well-formed acceptance tests
  • Refactor test code and build test suites
  • Test for boundary and normal conditions
  • Know what to test (and what not to test)
  • Write acceptance tests for system qualities

 Course Topics

  • What is Test-Driven Development?
  • Two different TDD rhythms: Test first and test frequently
  • Different tests and how they support agile development: acceptance, function, unit, integration and smoke test
  • Effective test and production coding practices
  • When tests are run (and who should write them)
  • What makes a good unit test?
  • What makes a good acceptance test?
  • The 10 commandments for testing
  • Where tests add value and where they don't
  • How refactoring affects tests
  • Organizing and managing tests
  • Effective test automation
  • Testing external services
  • Mocking and techniques for isolating test code
  • What makes good assertions?
  • The basic structure of a test scenario