Pergunta

Ao fazer TDD , como dizer "isso é suficiente testes para esta classe / recurso" ?

i. quando você poderia dizer que você concluiu o teste de todos os casos de ponta?

Foi útil?

Solução

Com Test Driven Development, você vai escrever um teste antes de escrever o código testa. Quando estiver escrito o código eo teste passa, então é hora de escrever outro teste. Se você seguir TDD corretamente, você escreveu testes suficientes Quando estiver código faz tudo o que é necessário.

Quanto aos casos de ponta, vamos dar um exemplo como validar um parâmetro em um método. Antes de adicionar o parâmetro para você código, você criar testes que verificam o código irá lidar com cada caso corretamente. Então você pode adicionar o parâmetro e lógica associada, e garantir os testes passam. Se você acha-se mais casos de ponta, então mais testes podem ser adicionados.

Ao tomar um passo de cada vez, você não precisa se preocupar em casos extremos quando você terminar de escrever o seu código, porque você já escreveu os testes para todos eles. Claro, há sempre um erro humano, e você pode perder alguma coisa ... Quando essa situação ocorre, é hora de adicionar um outro teste e, em seguida, corrigir o código.

Outras dicas

O conselho de Kent Beck é escrever testes até voltas medo em tédio. Isto é, até você não está mais com medo de que alguma coisa vai quebrar, supondo que você começar com um nível adequado de medo.

Em algum nível, é um sentimento de intestino de

"Am I confiante de que os testes vão pegar todos os problemas que eu posso pensar agora? "

Em outro nível, você já tem um conjunto de requisitos de usuário ou do sistema que devem ser cumpridos, assim que você poderia parar por aí.

Enquanto eu fazer a cobertura de código uso dizer-me se eu não seguir o meu processo de TDD e encontrar um código que pode ser removido, eu não contaria a cobertura de código como uma forma útil para saber quando parar. Sua cobertura de código poderia ser 100%, mas se você se esqueceu de incluir uma exigência, bem, então você não está realmente feito, é você.

Talvez um equívoco sobre TDD é que você tem que saber tudo na frente para teste. Isto é mal orientado, porque os testes que resultam do processo de TDD são como uma trilha de navegação. Você sabe o que foi testado no passado, e pode guiá-lo até certo ponto, mas não vai lhe dizer o que fazer a seguir.

Eu acho que TDD pode ser pensado como um processo evolutivo. Ou seja, você começar com o seu projeto inicial e do conjunto de testes. Como seu código é golpeado na produção, você adiciona mais testes e código que faz com que esses testes passar. Cada vez que você adicionar um teste aqui, e um teste lá, você também está fazendo TDD, e não custa tanto assim. Você não sabia que esses casos existiam quando escreveu o seu primeiro conjunto de testes, mas você ganhou o conhecimento agora, e pode verificar esses problemas com o toque de um botão. Este é o grande poder de TDD, e uma das razões por que eu defendo para tanto.

Bem, quando você não pode pensar em mais nenhum caso de falha que não funciona como pretendido.

Parte do TDD é manter uma lista de coisas que você deseja implementar, e problemas com o seu atual implementação ... então quando essa lista se esgota, que são essencialmente feito ....

E lembre-se, você sempre pode voltar e adicionar testes quando você descobrir erros ou novos problemas com a implementação.

que o senso comum, não há resposta perfeita. TDD objetivo é remover o medo, se você se sentir confiante de que você testou bem o suficiente go on ...

Apenas não se esqueça que se você encontrar um bug, mais tarde, escrever um teste primeiro para reproduzir o bug, então corrigi-lo, então você vai evitar uma mudança futura para quebrá-lo novamente!

Algumas pessoas reclamam quando eles não têm X por cento da cobertura .... algum teste são inúteis, e 100% de cobertura não significa que você tudo o teste que pode fazer a sua pausa código, apenas o fato de que não vai quebrar para o maneira que você usou-lo!

Um teste é uma maneira de descrever precisamente algo que você quer. Adicionando um teste amplia o escopo do que você quer, ou adiciona detalhes do que você quer.

Se você não pode pensar em algo mais que você quer, ou quaisquer refinamentos para o que você quer, em seguida, passar para outra coisa. Você sempre pode voltar mais tarde.

Os testes em TDD está prestes cobrindo o especificação , na verdade, eles podem ser um substituto para uma especificação. Em TDD, os testes não são sobre cobrindo o código. Eles garantem as tampas de código a especificação, porque o código irá falhar um teste se ele não cobre a especificação. Qualquer código extra que você tem, não importa.

Então você tem provas suficientes quando os testes parecem que descrevem todas as expectativas que você ou as partes interessadas ter.

Talvez eu perdi alguma coisa em algum lugar no mundo do Agile / XP, mas o meu entendimento do processo foi que o desenvolvedor eo cliente especificar os testes como parte do recurso . Isso permite que os casos de teste para substituir documentação mais formal requisitos, ajuda a identificar os casos de uso para o recurso, etc. Então você está teste feito e codificação quando todos esses testes passar ... além de mais quaisquer casos de borda que você pensa de ao longo do caminho

Alberto Savoia diz que " se todos os seus testes passam, as chances são de que seu teste não são bom o suficiente ". Eu acho que é uma boa maneira de pensar sobre os testes: perguntar se você está fazendo casos extremos, passar algum parâmetro inesperado e assim por diante. Uma boa maneira de melhorar a qualidade de seus testes é um trabalho com um par - especialmente um testador - e obter ajuda sobre mais casos de teste. Par com testadores é bom porque eles têm um ponto de vista diferente.

Claro, você poderia usar alguma ferramenta para fazer testes de mutação e obter mais confiança de seus testes. Eu tenho usado Jester e melhorar os meus testes e da maneira que eu escrevi. Considere usar algo como isso.

Atenciosamente

Teoricamente você deve cobrir todas as combinações possíveis de entrada e de teste que a saída está correta, mas às vezes não é apenas a pena.

Muitos dos outros comentários bateu o prego na cabeça. Você se sente confiante sobre o código de ter escrito dada a sua cobertura de teste? Como seus evolui código que seus testes ainda cobri-lo adequadamente? Seus testes capturar o comportamento desejado e funcionalidade para o componente em teste?

Deve haver um meio termo. Como você adicionar mais e mais casos de teste seus testes pode tornar-se frágil como o que é considerado um caso extremo muda continuamente. Após muitas das sugestões anteriores pode ser muito útil para obter tudo o que você pode pensar em frente e depois adicionando novos testes como o software cresce. Este tipo de crescer orgânica pode ajudar seus testes crescer sem todo o esforço na frente.

Eu não vou mentir, mas muitas vezes eu ficar com preguiça quando voltar a escrever testes adicionais. Eu poderia perder aquela propriedade que contém 0 código ou o construtor padrão que eu não preocupam. Às vezes, não sendo completamente anal sobre o processo você pode economizar tempo n áreas que são menos críticos (a 100% mito de cobertura de código).

Você tem que lembrar que o objetivo final é obter um produto top de linha para fora da porta e não se matar testando. Se você tem esse sentimento de intestino como se estivesse faltando alguma coisa, então as chances são que você está tem e que você precisa adicionar mais testes.

Boa sorte e feliz codificação.

Você sempre pode usar uma ferramenta de cobertura de teste como EMMA ( http://emma.sourceforge.net/) ou seu Eclipse plug-in EclEmma ( http://www.eclemma.org/ ) ou similar. Alguns desenvolvedores acreditam que a cobertura do teste de 100% é um objetivo digno; outros discordam.

Basta tentar chegar a todas as formas dentro da razão que você poderia fazer com que algo falhar. valores nulos, valores fora da faixa, etc. Uma vez que você não pode facilmente chegar a qualquer coisa, basta continuar para outra coisa.

Se a estrada você alguma vez encontrar um novo bug ou chegar a uma forma, adicionar o teste.

Não se trata de cobertura de código. Essa é uma métrica perigoso, porque o código é "coberta" muito antes de ele é "testadas bem".

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