Uma das poucas coisas que a maioria dos desenvolvedores de software concorda é que você não deve confiar no código para funcionar corretamente, a menos que você o teste. Se você não testá-lo, pode haver erros ocultos que só irão causar mais trabalho no caminho.
Entendo como testar meu código normal, mas como devo testá-lo para garantir que ele encontre e relate erros de maneira eficaz quando presentes? Pessoalmente, fui estúpido o suficiente para escrever casos de teste errados que passariam quando não deveriam, derrotando, assim, o propósito dos meus testes de escrita. Felizmente, encontrei e corrigi os erros com o tempo, mas, de acordo com o mantra de teste, parece que nenhum conjunto de testes estaria completo sem ter seu próprio conjunto de testes para garantir que funcionasse.
Parece-me que a melhor maneira de fazer isso seria garantir que o teste falhe para o código de buggy. * Se eu passar 2 minutos alternadamente adicionando bugs ao código e me certificando de que ele falhar, eu deveria ter um grau aceitável de confiança de que os testes 'funcionam'. Isso me leva à minha segunda pergunta: Quais são as boas maneiras de introduzir bugs para garantir que eles sejam capturados pelos casos de teste? Devo apenas comentar aleatoriamente declarações, certifique-se o ramo errado de um if-else
é executado negando sua condição e alterar a ordem de execução de código com efeitos colaterais, etc., até que eu estou satisfeito meus testes vai pegar maiserros comuns? Como os desenvolvedores profissionais validam que seus testes realmente fazem o que deveriam fazer? Eles apenas assumem que os testes funcionam, ou eles tomam tempo para testá-los também? Se sim, como eles testam os testes?
Não estou sugerindo que as pessoas devam gastar tanto tempo testando seus testes e testando-os para que nunca escrevam o código real, mas fiz coisas estúpidas o suficiente para me beneficiar um pouco. de 'meta-teste' e estava curioso sobre a melhor maneira de fazer isso. : D
* Eu poderia verificar se o teste é aprovado ao testar o código 'sem erros', mas usar o código como uma especificação para o teste parece um tanto atrasado ...