A software development methodology in which tests are written before the code that needs to pass those tests, promoting simple design and refactoring.