Course: Test-Driven Development and Refactoring - Java, C++, or Ruby (3 days)

Target audience:
agile teams
Class size:
10 to 16
Prerequisites:
at least six months relevant programming experience

You're not attempting to do agile software development without TDD, are you? The ability to do TDD is an essential programmer skill, as is the ability to keep a code base clean through refactoring.

In our most popular course, you'll obtain a solid foundation for doing test-driven development (TDD). You'll also learn the value of continual refactoring, a practice core to TDD and essential to sustaining your investment in your software. Lecture is brief, as we instead emphasize lots of hands-on coding exercises and demonstrations. You'll learn why we consider TDD a design technique, and how to increase the value of the tests you build.

Due to the popularity of the Java version of this offering, we've recently introduced comparable training in C++ and Ruby.

We are usually able to provide exercises using your unit testing tool of choice, whether it be JUnit 3.x, JUnit 4.x, TestNG, RSpec, CppUnit, CppUnit Lite, Tut, CppUTest, or something else.

Topics Covered

Overview of Test-Driven Development
xUnit (tool) overview
Basic TDD technique - demo and exercise
TDD and design
Basic "mock" technique - demo and exercise
Test smells - exercise
Refactoring and design
Refactoring drivers
   Code smells
   Simple design
   Simple style
   Classic design principles
Basic refactorings - demo and exercise
Additional catalog refactorings
Macro refactorings - demo and exercise
   Backing into tests
Additional mock topics - demos, exercises
   Mock organization (including self shunt)
   Mock injection (factory, override)
   Challenges with mocking
   When to use and not use
Optional Topics (see below)
Conclusions
Many customers are interested in learning about various topics related to TDD. The last half day is focused on a topic or topics near and dear to your needs. Most customers choose the legacy code or acceptance test material. We can customize your experience beyond what you see here. Let us know what you're looking for.

Optional Topics

Writing tests for legacy code (exercises available)
Integration testing vs. unit and acceptance testing (discussion)
Performance and load testing (exercise available)
Testing web sites (exercise available)
UIs (exercise available)
Asynchronous services (exercise available)
Synchronization (exercise available)
Databases (discussion)
Acceptance Tests (ATs) (discussion, exercises available)
   Deriving ATs from Stories
   ATs vs. Use Cases
   Fitnesse
   Increasing Unit Test Coverage Via ATs
   Designing Tests With Fitnesse Tables
   Building Fitnesse Fixtures

Pricing / Details

For Further Information:

Astels, David. Test-Driven Development: A Practical Guide
Beck, Kent. Test-Driven Development: By Example
Fowler, Martin. Refactoring: Improving the Design of Existing Code
Koskela, Lasse. Test-Driven: TDD and Acceptance TDD for Java Developers
Langr, Jeff. Agile Java: Crafting Code With Test-Driven Development
Langr, Jeff. "Evolution of Test and Code Via Test-First Design"
Link, Johannes. Unit Testing in Java: How Tests Drive the Code
Yahoo! Group: Test-Driven Development
Yahoo! Group: Refactoring