The Road to Test Driven Development

Designing reliable software is best done incrementally using evidence-based assurance of the software’s functionality. To do this effectively, developers must know how to recognise unhelpful coding patterns, apply strategies for changing the code without breaking its functionality, as well as write tests for legacy and new code bases.

This course is delivered with a mix of teaching concepts, real hands-on coding, and a broad range of freely available extension materials to allow developers to really get to grips with the benefit of a TDD discipline.



Code Smells and Anti-patterns

Learn how to identify and classify code into known “code smells”, and build up a shared vocabulary for your development team to use when discussing code quality.

Refactoring Code

By refactoring regularly, you will avoid taking on large quantities of technical debt and improve the readability and maintainability of the code. Learn a range of refactoring techniques to improve the excellence of your production code without changing how it behaves.

Micro Test Design

Micro-tests are the basis of software developer safety. They ensure the code that is written actually does as intended, and is still the same after any seemingly “unrelated” change is made. This module covers how to design a micro-test so that it extracts the interesting behaviours of a system and enshrines them in living documentation that notifies the developer when a behaviour has changed.

Faking and Mocks

Real software can be complex, and to be useful it needs to interact with the rest of the world. Discover how to isolate complex logic from interrelated services so that the module’s own behaviour and responses can be tested without interference from other systems.

Designing with Tests

Evolve your production software with a simple, clear design and exceedingly good test coverage. Learn the rhythms of building behaviour expectations before implementations and create software that does just what is desired and little else.

Excellent Software

Learning Outcomes

By the end of this course, attendees will be able to:


Attendees are expected to have some experience in building software as a team in an object-oriented language.

An IDE that has includes refactoring automation for the desired language is important. For example: