TDD na prática: quem realmente pratica no dia a dia?
Toda pesquisa de "melhores práticas" de engenharia de software inclui TDD. Todo dev experiente diz que TDD é importante. E, na prática, a maioria não pratica.
Quero entender por quê, e se isso é problema.
O argumento a favor do TDD
Força você a pensar na interface antes da implementação. Isso melhora o design. Testes escritos depois tendem a testar implementação, não comportamento.
Feedback imediato. Você sabe na hora se quebrou algo.
Documentação executável. Testes bem escritos descrevem o que o sistema faz melhor do que qualquer README.
Por que não pratico consistentemente
Velocidade inicial. Na fase exploratória de uma feature, eu não sei ainda qual é a interface certa. Escrever teste antes de saber o que está testando gera retrabalho.
Tipos de código. TDD funciona bem para lógica de negócio. Para componentes visuais, integrações com APIs externas, scripts de migração: a aplicação mecânica de TDD gera testes frágeis.
Custo de manutenção. Testes mal escritos são piores do que não ter teste. E TDD praticado mal gera muitos testes mal escritos.
O que eu pratico de verdade
Testo depois, com cobertura nos caminhos críticos. Não é TDD, mas é o que realmente acontece.
Alguém aqui pratica TDD de forma consistente? Em que contexto funciona para vocês?