No meu projeto atual (um jogo, em C ++), decidi que usaria o Test Driven Development 100% durante o desenvolvimento.
Em termos de qualidade do código, isso tem sido ótimo. Meu código nunca foi tão bem projetado ou livre de erros. Não me arrependo ao visualizar o código que escrevi há um ano no início do projeto, e adquiri uma noção muito melhor de como estruturar as coisas, não apenas para ser mais facilmente testável, mas para ser mais simples de implementar e usar. .
No entanto ... já faz um ano desde que iniciei o projeto. É verdade que só posso trabalhar no meu tempo livre, mas o TDD ainda está me atrasando consideravelmente em comparação com o que estou acostumado. Eu li que a velocidade mais lenta de desenvolvimento melhora com o tempo, e eu definitivamente penso nos testes com muito mais facilidade do que costumava fazer, mas estou nisso há um ano e ainda estou trabalhando no ritmo de um caracol.
Cada vez que penso na próxima etapa que precisa de trabalho, tenho que parar toda vez e pensar em como escreveria um teste para isso, para permitir que eu escrevesse o código real. Às vezes, fico preso por horas, sabendo exatamente o código que quero escrever, mas sem saber como detalhá-lo o suficiente para cobri-lo completamente com testes. Outras vezes, pensarei rapidamente em uma dúzia de testes e passarei uma hora escrevendo testes para cobrir um pequeno pedaço de código real que, de outra forma, levaria alguns minutos para ser escrito.
Ou, depois de terminar o 50º teste para cobrir uma entidade específica no jogo e todos os aspectos de sua criação e uso, olho para a minha lista de tarefas e vejo a próxima entidade a ser codificada, e me encolho de horror ao pensar em escrever outros 50 testes semelhantes para implementá-lo.
Chegou ao ponto de que, olhando para o progresso do ano passado, estou pensando em abandonar o TDD por uma questão de "concluir o maldito projeto". No entanto, desistir da qualidade do código que acompanha ele não é algo que estou ansioso. Receio que, se eu parar de escrever testes, deixarei o hábito de tornar o código tão modular e testável.
Talvez eu esteja fazendo algo errado para ainda ser tão lento nisso? Existem alternativas que aceleram a produtividade sem perder completamente os benefícios? TAD? Menos cobertura de teste? Como outras pessoas sobrevivem ao TDD sem matar toda a produtividade e motivação?