TDD é o Desenvolvimento Orientado por Testes (Test Driven Development). Isso mesmo! Desenvolvemos o nosso software baseado em testes que são escritos antes do nosso código de produção!
Basicamente o TDD se baseia em pequenos ciclos de repetições, onde para cada funcionalidade do sistema um teste é criado antes. Este novo teste criado inicialmente falha, já que ainda não temos a implementação da funcionalidade em questão e, em seguida, implementamos a funcionalidade para fazer o teste passar! Depois que o teste passa, faz-se necessário refatorá-lo usando boas práticas de Desenvolvimento de Software. Simples assim!
Ciclo de Desenvolvimento
Red, Green, Refactor. Ou seja:
Escrevemos um Teste que inicialmente não passa (Red)
Adicionamos uma nova funcionalidade do sistema
Fazemos o Teste passar (Green)
Refatoramos o código da nova funcionalidade (Refactoring)
Escrevemos o próximo Teste
Neste tipo de estratégia, tem-se um feedback rápido sobre a nova funcionalidade e sobre uma possível quebra de outra funcionalidade do sistema. Assim tem-se muito mais segurança para as refatorações e muito mais segurança na adição de novas funcionalidades.
Motivos para o uso
Temos diversos ganhos com esta estratégia e vou citar alguns:
Feedback rápido sobre a nova funcionalidade e sobre as outras funcionalidades existentes no sistema
Código mais limpo, já que escrevemos códigos simples para o teste passar
Segurança no Refactoring pois podemos ver o que estamos ou não afetando
Segurança na correção de bugs
Maior produtividade já que o desenvolvedor encontra menos bugs e não desperdiça tempo com depuradores
Código da aplicação mais flexível, já que para escrever testes temos que separar em pequenos "pedaços" o nosso código, para que sejam testáveis, ou seja, nosso código estará menos acoplado.
Fontes: http://www.devmedia.com.br/test-driven-development-tdd-simples-e-pratico/18533