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
This course is built around a series of videos lessons by Dave Farley, with several opportunities for you to practise the techniques through practical exercises, each followed by a demo which shows how Dave would tackle the same problems.
Before You Start
We recommend that you dig into the Cyber Dojo site: https://cyber-dojo.org which we 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.
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.
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.
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?
We explore and explain Behaviour Driven Development and how it helps us improve our software engineering practices:
- What is BDD? and the Importance of Naming.
- The Shape of your Tests
- How Tests Improve Design
TDD is more about Design than it is about Testing. The final section of the course covers:
- SOLID and Engineering principles
- Design Problems and Solutions
- How to ‘listen to the code’
- TDD 'smells'
- Acceptance Test Driven Development
- Top Tips for TDD
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 and have the experience of putting these into practice.
- Use TDD and BDD techniques to improve the design and quality of your software.
- Know how to use feedback from your tests to improve the design of your software.
- Be able to write long-lasting, resilient tests.
- Have the skills and techniques to significantly reduce defect-rates in your code.
About Your Instructor - Dave Farley:
- Pioneer and expert practitioner in CD, DevOps, TDD and software development in general.
- Author of the best-selling books on "Continuous Delivery" and "Modern Software Engineering".
- 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:
"Valuable training on TDD and software engineering: I strongly recommend this course to anyone interested in making better software. This is not just about writing good tests, it is also (and before anything else) about design and software engineering in general. Be prepared to change your mind on several topics. It is hard not to buy into Dave's rational and well-thought-out approach."
- Senior Engineer
“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!”
"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