Test-Driven Development (TDD)

Test-driven development (TDD) is a proven software development process. It turns out that many more bugs get caught when tests are written alongside code.

title: TDD Mantra
Don’t write any production code unless you have a failing test.

“Testing shows the presence, not the absence of bugs” - Dijkstra

Some Testing Ideas / Topics

TDD Cycle

You first write failing tests before writing the program itself.


  1. Write the simplest possible test case (that the program doesn’t yet solve) Test Fails
  2. Write the simplest possible program until the test passes. Some sub-steps for this in C++:
    • G++: Compile the code
    • gtest: Run the test harness (ex: ./run_gtest.sh)
    • gcov: Confirm that the test suite provides 100% coverage
    • Valgrind: check for memory safety
    • Git: make commits
  3. Important step that is often overlooked: Refactor and tidy up code.
  4. Repeat until you have written passing test for all required functionalities

Benefits of TDD

  • Reduce debugging effort
  • Work incrementally. Stay focused on manageable tasks
  • Always have a working version of the program. git restore file.cpp to roll back to the working version