Preface
Many years ago, I started avoiding cookbook-style books when I wanted to learn a new technology or develop a new skill. A book should guide us to understand fundamental ideas so we can adapt our learning to fit our needs. We should not get lost just because a recipe doesn’t match exactly what we want to accomplish.
I also tend to avoid books that are full of theory. You probably know what I mean. Instead of explaining how to use a technology, these books mention ideas with no exploration of putting the ideas into practice. Focusing on either one of these two tangents can leave the learning experience incomplete.
This book is different. Instead of giving you a few simple examples like a cookbook or droning on with rules and definitions, I’ll show you how to use tests to write software that does the following:
- What users expect and with ease
- Let’s you add new features without breaking what you’ve already done
- Clearly communicates what the code does
We’re going to start from the beginning and build multiple projects. You’ll learn what a test is and how it can help by building an easy and natural way to write tests in C++. This is called Test-Driven Development (TDD) and you’ll be using TDD to develop the tools needed for your projects.
In order to get the most benefit from TDD, you’ll need a way to write and run tests. Some programming languages already support TDD while C++ needs extra tools and libraries to support tests. I could have simply explained how to use various TDD tools that already exist. That would be a cookbook approach because each existing solution is slightly different. By starting from the beginning and building what you’ll need, you’ll learn TDD and at the same time you’ll learn how all the other solutions work. The concepts are the same.
For example, most people who learn how to drive a car will be able to drive a pickup truck or a van. Some minor differences are expected but the concepts are the same. Riding a motorcycle is more of a challenge but many of the same concepts are still valid. Driving a bus might need some extra training but is also similar.
If you decide to use other tools or even other languages, you’ll gain a deep understanding of how those other tools work by following the steps in this book. The other tools will be like driving a pickup truck.
This book is divided into three parts. You’ll build a testing library in the first part that will let you write and run tests. You’ll learn how to proceed one step at a time and let the tests guide you.
The second part will use the testing library to start a new project to help you log messages as your software runs. This is a logging library and this project will show you how to build software that meets the needs of your intended customer. You’ll be adding many features to the logging library and you’ll learn how to keep everything working while developing more features.
The intended customer for the logging library is a C++ micro-services developer and this customer focus extends into the third part where you’ll extend the testing library and build a simple service. The service will be used to explain one of the most difficult aspects of software development how to test multiple threads.
All three parts will combine to show you how to use TDD to effectively design and write software that meets the customers needs, gives you the confidence to make changes, and lets other team members understand the design.