sábado, 21 de fevereiro de 2015

TDD porque não usar

Acho muito estranho todos falarem sobre TDD hoje em dia. Mas pouco tem definido o que é e como utilizar no benefício do projeto. A mais ou menos uns 3 anos eu assisti uma palestra do Lucas Bastos, "Ágil como o MacGyver" e nela ele falava exatamente o mesmo. As pessoas se prendem em modelos prontos de solução e deixam de analisar o que realmente elas precisam.

Sendo assim resolvi comentar um pouco sobre minha experiência com TDD.

Para que fazer testes ?

Acho engraçado quando vejo algumas pessoas atribuindo os testes aos bugs. Fazer ou não fazer os testes não é solução para evitar bugs. Uma vez que mesmo seus testes podem conter bugs ou dificilmente eles vão ser tão geniais quanto os usuários de um sistema.

Os testes servem para garantir a continuidade do funcionamento do seu sistemas e não para remover erros. Em outras palavras, garantir qualidade.

Já vi programadores incríveis escreverem mais de 30 linhas de código e nem mesmo executar 1 vez se quer seu código parar verificar se ele realmente está funcionando ou não. Porém o código funcionou perfeitamente, porque o programador nesse caso, tinha o domínio total do problema e sabia exatamente onde e como resolver o problema. E da mesma forma já vi programadores mudarem apenas duas palavras e gerarem erros catastróficos em todo o sistema.

Aaaaaa, mas se eles tivessem executado os testes isso não teria acontecido

Sim, iria. O teste esperava um update, porém foi removido os filtros do update, alterando todos os resultados da base. Durante o teste isso não era verificado.

Ele deveria ter feitos mais testes para prever esses casos

É claro, programadores mais maduros conseguem prever alguns problemas, esses não são errados. Mas atirar no escuro, sem base nenhuma, sempre vai ser um problema.

Em um sistema pequeno ter testes desnecessários, quase não é perceptível, porém ter testes desnecessário significa: lentidão na de rodar sua suíte de testes e tempo desperdiçado.

Portanto o melhor a ser feito é focar seus testes naquilo que a história pede, e nos casos de bugs, acrescentar um novo teste para cada correção. Cobrindo os problemas e mantendo a integridade da história.