Há pouco mais de um ano, tive a sorte de poder tirar uma folga de 9 meses do trabalho. Decidi que, naquele tempo, aperfeiçoaria minhas habilidades em C #. Comecei a trabalhar em vários projetos e me forcei a seguir o TDD.
Foi um processo bastante esclarecedor.
Foi difícil no começo, mas com o tempo aprendi a escrever código mais testável (que, como se vê, tende a ser mais código SOLID) e, no processo, também aprimorei minha habilidade em design de OO.
Agora estou de volta à força de trabalho e estou percebendo algo estranho.
Eu prefiro não seguir TDD.
Acho que o TDD me deixa mais lento e torna mais difícil projetar um aplicativo limpo.
Em vez disso, adotei uma abordagem ligeiramente (massivamente) diferente:
- Escolha uma fatia vertical do trabalho
- Desenvolver um protótipo funcional
- Refatorar até que tudo esteja agradável e arrumado
- Relaxe e aprecie o código lindamente sólido e testável que escrevi.
Você deve ter notado que a etapa 1 não foi "definir a superfície pública do meu alvo de teste" e a etapa 2 não foi "testar o bejesus a partir dessa superfície pública". Você também deve ter notado que nenhuma das etapas envolve testes. Estou escrevendo código testável, mas não estou testando ... ainda.
Agora, gostaria de deixar claro que na verdade não estou renunciando a nenhum tipo de teste. O código que estou escrevendo funciona . Funciona porque estou testando manualmente.
Também gostaria de deixar claro que também não estou renunciando a todos os testes automatizados. É aqui que meu processo é diferente. E é por isso que estou fazendo essa pergunta.
TDD em teoria. Não na prática.
Meu processo evoluiu um pouco e encontrei um equilíbrio entre TDD e nenhum teste que considero muito produtivo e também razoavelmente seguro. É o seguinte:
- Implemente uma fatia de trabalho vertical de trabalho tendo em mente os testes, mas não escreva nenhum teste.
- Se no caminho (por exemplo, um mês depois), essa fatia precisa ser modificada
- Escreva Testes de Unidade, Testes de Integração, Testes de Comportamento, etc., que garantam que a fatia do trabalho esteja correta
- Modifique o código
- Se essa fatia não precisar de modificação,
- Fazer nada
Simplesmente mudando o fardo de escrever testes de antes de escrever o código para antes de modificar o código, eu pude produzir muito mais código funcional. E, quando passo a escrever testes, escrevo muito menos deles, mas abro quase o mesmo terreno (maior ROI).
Gosto desse processo, mas estou preocupado que ele possa não ser bem dimensionado. Seu sucesso depende de desenvolvedores serem diligentes em escrever testes antes de mudarem as coisas. E isso parece ser um risco muito grande. Mas, o TDD tem o mesmo risco.
Então, eu estou indo para o inferno, ou isso é uma forma comum de codificação e testes pragmáticos?
Eu gostaria de continuar trabalhando dessa maneira. O que posso fazer para que esse processo funcione a longo prazo?
Nota:Sou o único desenvolvedor dos meus projetos e sou responsável por tudo: coleta de requisitos, design, arquitetura, teste, implantação etc. Suspeito que é por isso que meu processo está funcionando.
If that slice doesn't need modification
. lizkeogh.com/2012/06/24/beyond-test-driven-development