Pergunta

Lendo sobre as respostas a esta pergunta Desvantagens do Desenvolvimento Orientado a testes? Eu tenho a impressão de que há um monte de mal-entendido sobre o que TDD é e como ele deve ser conduzido.Pode ser útil para resolver estas questões aqui.

Foi útil?

Solução

Eu sinto o aceite resposta foi um dos mais fracos (Desvantagens do Desenvolvimento Orientado a testes?), e o mais up-modded resposta cheiro de alguém que pode estar a escrever sobre testes especificados.

Grande investimento de tempo:para o simples caso você perder cerca de 20% do real implementação, mas complicadas de casos, você perde muito mais.

O TDD é um investimento.Eu achei que quando eu estava totalmente em TDD, o tempo que eu perdi é muito, muito pouco, e o tempo me fez perder foi mais do que fez quando ele veio para a manutenção do tempo.

Para casos complexos seus casos de teste são mais difícil de calcular, eu sugiro que no casos como o de tentar e usar automática de referência de código que será executado em paralelo com a versão de depuração / execução de teste, em vez do teste de unidade de casos mais simples.

Se o seu teste estão se tornando muito complexo, talvez seja hora de rever o seu projeto.TDD deve levá-lo para o caminho menores, menos complexos de unidades de código de trabalhar juntos

Às vezes, você, o design não é clara no início e evolui como você ir junto - o que irá forçar você a refazer o teste, que vai gerar um grande tempo a perder.Gostaria de sugerir o adiamento dos testes de unidade, neste caso, até que você tenha alguma compreensão do projeto em mente.

Este é o pior ponto de todos eles!!!TDD realmente deve ser "Orientado a testes Design".TDD é sobre design, não em testes.Para realizar plenamente o valor dos benefícios do TDD, você tem brinquedo unidade o seu design de seus testes.Portanto, você deve ser refazer o seu código de produção para fazer o teste passar, e não o contrário como este ponto sugere

Agora o mais upmodded: Desvantagens do Desenvolvimento Orientado a testes?

Quando você chegar ao ponto onde você tem um grande número de testes, mudando o sistema poderá exigir a re-escrita de alguns ou todos os seus testes, dependendo de quais ficou invalidado por alterações.Isto pode transformar-se relativamente rápido modificação em um muito demorado um.

Como aceitas as respostas primeiro momento, isso parece mais de especificação de testes e uma falta geral de compreensão do TDD processo.Ao fazer alterações, iniciar a partir do seu teste.Alterar o teste para o que o novo código deve fazer, e fazer a alteração.Se a mudança quebras de outros testes, os testes estão fazendo o que o seu suposto fazer, falhando.Testes de unidade, para mim, são projetados para falhar, daí por que o VERMELHO estágio é o primeiro, e nunca deve ser perdido.

Outras dicas

IMHO, O maior equívoco sobre TDD é que: o tempo gasto escrevendo e reescrevendo testes seria tempo perdido. O pensamento é como "sim, um conjunto de teste é bom, mas o recurso deverá ser concluído muito mais rápido se nós apenas codificadas por ele".

Quando feito corretamente, o tempo gasto escrevendo e mantendo testes é salvo várias vezes ao longo da vida do projeto no tempo não passou a depuração e a fixação de regressões.Desde que o custo do teste é up-front e o pagamento de salários é longo do tempo, é fácil esquecer.

Outros grandes equívocos incluem ignorando o impacto de TDD sobre o processo de design, e não percebendo que a "dolorosa testes" é um sério código cheiro que precisa ser corrigido rapidamente.

Eu vejo um monte de gente mal-entendido que os testes são realmente úteis para TDD.As pessoas escrevem grandes testes de aceitação em vez de pequenos testes de unidade e, em seguida, passar muito mais tempo, mantendo sua testa e, em seguida, concluir que TDD não funciona.Eu acho que o BDD as pessoas têm um ponto em evitar o uso da palavra teste inteiramente.

O outro extremo é o de que as pessoas parar de fazer testes de aceitação e acho que é porque eles fazem os testes de unidade, seu código é testado.Este é novamente um mal-entendido de que a função de um teste de unidade.Você ainda precisa de testes de aceitação de algum tipo.

O equívoco de que eu sempre vejo é que TDD garante bons resultados.

Muitas vezes, os testes são escritos fora errôneo, requisitos e, portanto, os desenvolvedores de produzir um produto que não faz o que o usuário está esperando.Chave para o TDD é, na minha opinião, trabalhar com os usuários para definir os requisitos, enquanto ajudam a gerir as suas expectativas.

São estas as questões que na minha opinião são bastante controversa e, portanto, propensos ao mal-entendido:

  • Na minha experiência, a maior vantagem é produzir um código melhor no custo de um monte de tempo gasto escrevendo testes.Então, é realmente vale a pena para projetos que exigem alta qualidade, mas em alguns outros, menos qualidade centrado sites, o tempo extra não vai valer a pena o esforço.

  • As pessoas parecem pensar que só um grande subconjunto das funcionalidades devem ser testadas, mas que é errado, na verdade, IMHO.Você precisa testar tudo para que o seu teste seja válido após a refatoração.

  • A grande desvantagem do TDD é a falsa sensação de segurança dada pela incompleto testes:Eu já vi sites de ir para baixo, porque as pessoas presumiram que os Testes de Unidade foi o suficiente para desencadear uma implantação.

  • Não há necessidade de estruturas de simulação para fazer TDD.É apenas uma ferramenta para testar alguns casos de forma mais fácil.Os melhores testes de unidade que são acionados alta na pilha e deve ser agnóstico em camadas no código.O teste de uma camada de cada vez é sem sentido neste contexto.

Basta jogar outra resposta no pote.

Uma das mais comuns de mal-entendidos é que o seu código fixo, ou seja,.Eu tenho este código, como agora, na terra, eu testar?Se é difícil escrever um teste, devemos fazer a pergunta:como posso modificar esse código para torná-lo mais fácil de fazer o teste?

Por quê..?

Bem O tipo de código que é fácil de teste é:

  1. Modular - cada método faz uma coisa.
  2. Parametrizáveis - cada método aceita tudo o que precisa e saídas de tudo o que deveria.
  3. Bem Especificadas, cada método faz exatamente o que deveria, não mais, não menos.

Se nós escrever código como este, o teste é muito fácil.O interessante é que o código que seja fácil de teste é, coincidentemente, código melhor.

Mais fácil leia, mais fácil teste, mais fácil entender, mais fácil depuração.É por isso que o TDD é muitas vezes descrito como um exercício de design.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top