Overview
Traditional, non-agile development approaches separate development into distinct analysis, design and coding phases. The underlying assumption is that the cost of change increases rapidly over time, so that it's important to make design decisions as early as possible. Unfortunately, subsequent experience with the problem domain and the implementation technology often shows us that our design decisions weren't optimal, and would have been better if we had made them later.
Test Driven Development (TDD) is a design technique that forces developers to focus on component interfaces, rather than the underlying implementation details. TDD produces components that are highly cohesive and loosely coupled, and supported by a fully automated regression testing suite, which vastly reduces the cost of subsequent changes. TDD developers are consequently free to incorporate lessons learned as the project progresses.
Intended For
Anyone involved in programming, or the design of software, will benefit from an understanding of test driven design.
Prerequisites
Examples and exercises will be presented in introductory level Java, so an understanding of Java is useful but not essential.
Learning outcomes
By the end of this course, participants will be able to:
- Understand the fundamental principles of Test Driven Development
- Understand how TDD relates to more traditional design approaches and how they can be used together
- Implement simple applications using TDD
- Use more sophisticated TDD techniques, when appropriate, for complex applications.
Content
- Overview of Test Driven Development
- Building a simple application using TDD
- Agile modeling
- Dependency injection
- State vs interaction based testing
- Mock object frameworks
- The role of code coverage tools
- Testing external interfaces
- Testing graphical user interfaces
Method Used
Each facet of TDD is presented using a worked example, followed by discussion and a comparable exercise to be completed by the attendees. Examples and exercises are presented in Java, and developed using freely available open source tools.


