Apenas complementando:
O desenvolvimento dirigido a testes é uma abordagem para o desenvolvimento de programas em que se intercalam testes e desenvolvimento de código. Essencialmente, você desenvolve um código de forma incremental, em conjunto com um teste para esse incremento. Você não caminha para o próximo incremento até que o código desenvolvido passe no teste.
Fluxo do TDD:
1) Identificar nova funcionalidade
2) Escrever teste
3) Executar o teste (caso seja executado com sucesso, volta para o passo 1)
4) Implementar funcionalidade e refatorar
Um argumento forte a favor do desenvolvimento dirigido a testes é que ele ajuda os desenvolvedores a clarear suas ideias sobre o que um segmento de código supostamente deve fazer.
Além de um melhor entendimento do problema, outros benefícios do desenvolvimento dirigido a testes são:
1) Cobertura de código: cada código é testado enquanto está sendo escrito.
2) Teste de regressão: um conjunto de testes é desenvolvido de forma incremental enquanto um programa é desenvolvido. Você sempre pode executar testes de regressão para verificar se as mudanças no programa não introduziram novos bugs. (Como mudanças de regras de negócios não ocorreram, então o esperado é que o teste de regressão seja executado com sucesso)
3) Depuração simplificada: quando um teste falha, a localização do problema deve ser óbvia.
4) Documentação do sistema: Os testes em si mesmos agem como uma forma de documentação que descreve o que o código deve estar fazendo.
Fonte: Sommerville, 9ª Edição, Capítulo 8.