Sei que algumas pessoas são grandes defensoras do desenvolvimento orientado a testes. Eu usei testes de unidade no passado, mas apenas para testar operações que podem ser testadas facilmente ou que acredito que possivelmente estejam corretas. A cobertura completa ou quase completa do código parece demorar muito tempo.
- Para quais projetos você usa o desenvolvimento orientado a testes? Você o usa apenas para projetos acima de um determinado tamanho?
- Devo usá-lo ou não? Me convença!
programming-practices
unit-testing
tdd
Casebash
fonte
fonte
Respostas:
Ok, algumas vantagens para o TDD:
Você pediu para se convencer, então esses eram benefícios. Veja esta pergunta para uma visão mais equilibrada.
fonte
Robert C. Martin fez esses pontos originalmente - posso apoiá-los com minha própria experiência:
Pratico TDD o tempo todo, esteja trabalhando na produção ou no código do jogo; Atualmente, acho difícil codificar de qualquer outra maneira.
fonte
(Isenção de responsabilidade: quase não faço coisas com a interface do usuário, não posso discutir o TDD para UIs.)
Eu uso o TDD em praticamente tudo o que faço, de aplicativos triviais a pilhas SIP inteiras.
Não uso TDD em um site PHP herdado que assumi. Acho doloroso não fazer exames. E eu acho que é extremamente irritante quebrar acidentalmente partes do site porque eu não tenho um conjunto de testes de regressão dizendo que eu quebrei alguma coisa. O cliente não tem o orçamento para eu (a) escrever testes para a base de código e (b) no processo tornar o código testável em primeiro lugar, então eu apenas o aguento.
fonte
fonte
O que? Nenhuma resposta negativa !?
Isenção de responsabilidade: Eu não sou anti-unit-testing. Quando as pessoas dizem TDD, eu suponho que elas significam a versão que soa como doença em que estão escrevendo testes antes de escrever o código para 80-100% de todo o código que escrevem.
Eu deveria argumentar:
É um facilitador. Se a captura de problemas de regressão é um problema tão grande para você que o TDD totalmente automático desde o início parece valer a pena, escrever testes para cada último pedaço de código que você escreve pode realmente ajudá-lo a ignorar o problema real.
Ajuda as pessoas a ignorar o problema real. Ao consertar um bug, ele se transforma em um jogo de whack-a-mole, onde mais dois pop-ups, a arquitetura explode. Foco. Concentre-se no problema real. Ver as toupeiras antes que elas precisem ser golpeadas é legal, mas você não deveria estar lá em primeiro lugar.
Come muito tempo. Eu batia erros ocasionais. Não encontro tantos que pareça valer a pena prefixar cada coisa nova que escrevo com um teste. Capture problemas onde eles provavelmente acontecerão. Manipule os erros de maneira que sejam fáceis de diagnosticar. Validar. Teste nos principais pontos de sobreposição / gargalo. Mas, pelo amor de Deus, não teste cada ultimo getter e setter em algo que provavelmente não deveria ter tido em primeiro lugar.
Foco no design: não há absolutamente nenhuma maneira de um bom desenvolvedor escrever o melhor código possível quando também estiver focado no teste. Se parece que é a única maneira de ter um design decente, recomendo ver o item acima sobre "focar no problema real".
Falha no design de macro: a base de código no meu trabalho atual está repleta de interfaces que nunca são usadas mais de uma vez e violações maciças do princípio DRY básico que só finalmente comecei a entender quando percebi que as pessoas estavam escrevendo para as estruturas de teste e testes em geral. O teste não deve levar a arquitetura estúpida. Não, na verdade, não há nada que seja de alguma forma mais escalável ou digno da empresa sobre copiar e colar 20 arquivos e, em seguida, fazer apenas alterações significativas em dois deles. A idéia é separar as preocupações, não dividi-las ao meio. Cruft e abstração sem sentido custarão mais do que não ter 95% de cobertura.
É realmente popular e muitas pessoas realmente gostam. Se isso não for motivo suficiente para, pelo menos, adivinhar e / ou avaliar a porcaria de qualquer tecnologia antes da adoção, aprenda um pouco de paranóia.
fonte