A software development process where tests are written first, and software development proceeds based on the test results.