Course Objectives:

Dave Farley shares his expertise, advice and works through real-life examples with you, so you can:

  • Learn how to write long-lasting tests that are resilient to changes in your code.
  • Adopt Test Driven Development as an approach to software Design rather than focus on “after-the-fact” unit-testing.
  • Adopt a Behaviour Driven Development (BDD) approach to the use of TDD.
  • Learn how to “listen to the code” and use the feedback from test creation to modify designs for the better.
  • Develop the  skills and techniques which  drive the creation of higher-quality software, and  significantly reduce defect-rates in production code.

Course Structure & Requirements

The course is delivered LIVE, over 2 consecutive days, from 10am to 4pm (UK time). 

This is an interactive programme, not a sit and listen course.

The course comprises  a combination of talks by Dave Farley, practical exercises and group Q&A discussions, complemented by on-line videos and reading material.

Each module includes Practical Exercises where you can apply what you have learned, practise the skills and techniques, and get individual feedback and advice from Dave.


Most of Dave's coding examples will be written in Java and Python. However, you can use your current preferred language for your practical exercises. But, if you use an unusual language, please let Dave know in advance.

Before You Start

We recommend  that you dig into the Cyber Dojo site: which we will use during the course. Here you can practise coding 'Katas' and TDD exercises in a variety of languages, so you can have a go at writing some simple tests and get used to the site. 

Course Content

Part One

TDD is really more about Test Driven Design than it is about testing, and is is one of those very rare software engineering practices that can make a real difference to the quality of your code.

We commence with an introduction to the benefits of TDD and the principles of “How Test First Improves Design”, and "Red, Green, Refactor”. 

TDD encourages an iterative way of working, an incremental approach to design, and a continuous learning approach, which helps us to write Better Software Faster.

Part Two

We then dive into the technical details of "How to Write Great Tests": 

  • What are the properties of a “Good Test”?
  • What makes code "testable"?
  • How do we keep tests isolated and atomic?
  • What is Dependency Injection, and how best to use it?
  • What is Mocking, and how best to use it?
  • What are the patterns and anti-patterns in TDD?
  • When not to test?

Part Three

In the final module, Dave Farley explores “What is BDD?” and how it helps us improve our software engineering practices. 

  • What is BDD?
  • Where to start with a Test?
  • How does Naming affect the code that we write and its readability and expressibility.
  • Why is Naming important for software testing? 
  • What constitutes good names? (we give examples of both good and bad naming)
  • How do I ‘Listen to the code’?

We also provide a list of useful References and Links with suggestions for further reading and exploration, so you can extend your learning.

When You Complete the Course, You Will:

  • Get a Completion Certificate
  • Understand the benefits of TDD and BDD
  • Understand the design principles that underpin the effective use of TDD as a practice to create high-quality software
  • Have hands-on experience of TDD in practice
  • Use TDD and BDD techniques to improve the quality of your software
  • Know how to use feedback from your tests to improve the design of your software

About Your Instructor - Dave Farley:

Dave is:

  • Pioneer and expert practitioner in CD, DevOps, TDD and software development in general.
  • Author of the award-winning "Continuous Delivery" book
  • Inventor of Deployment Pipelines 
  • Creator of the CD YouTube channel

Dave has spent 25+ years developing world class software, and is passionate about helping software developers around the world to improve the design, quality and reliability of their software, by sharing his expertise through his consultancy, YouTube channel, and training courses.

Dave has reconfigured his successful live courses, into an on-line learning format, so you can study and practise these techniques at a time and a place that fits around your busy schedule.

What People Say About Dave's Training Courses:

“I'm still trying to process all of the knowledge but I can tell you now that it was invaluable to my professional development in DevOps! Thank you!”
      - Developer

"If your current project or software engineering approach in general does not match your team's or your business' expectations for any reason, I highly recommend to deep dive into the details and taking all the advice presented during this course seriously. Chances are that it will reveal very important aspects that you might want to focus on in order to improve your overall experience."

         - Principal Software Engineer

"It has helped me to know what great looks like and come up with a plan to get there. It's well put together. The worksheets encourage doing, rather than just consuming."
      - Co. Founder

“The fact that Dave is one of the creators of the discipline and had successfully implemented it gives him huge credibility.”
      - Senior Developer