O software de teste de unidade pode ser usado para o teste de unidade?

8

O QUnit se anuncia em sua página da web assim:

... capaz de testar qualquer código JavaScript genérico, incluindo ele próprio!

Você pode realmente usar o software de teste de unidade para testar a si mesmo? Defeitos no software não significam que os resultados não são confiáveis?

JJJ
fonte
2
Esse é realmente um problema que você deseja solucionar? Ou você pretende iniciar um debate sobre teoria?
Jim G.
8
@JimG. Tenho certeza de que esta pergunta tem uma resposta definitiva e não discutível.
21412 JJJ

Respostas:

16

Sim pode. A JUnit possui um amplo conjunto de testes para testar seus próprios recursos e perguntar a qualquer um dos autores que você gosta - eles dirão que isso é essencial para a produtividade deles na extensão do projeto. Provavelmente, a maioria das ferramentas de teste faz o mesmo.

O truque é que não há necessidade particular de um teste de um novo recurso estar realmente usando o novo recurso - ele apenas precisa exercitá- lo e testar o resultado. Dessa maneira, a confiança em parte da funcionalidade de um sistema pode ser usada para estabelecer confiança em uma parte muito maior. Isso é semelhante à maneira como os compiladores auto-hospedados são inicializados e é uma técnica fundamental na teoria da computação.

Kilian Foth
fonte
O próprio exemplo de escrever um framework de testes por meio de testes é coberto no excelente livro "Código Limpo
CaffGeek
7

O livro de Kent Beck, "Test Driven Development By Example", faz exatamente isso: como exemplo de TDD, ele inicializa uma estrutura de teste que, desde o início, é usada para se desenvolver.

Frank Shearar
fonte
talvez este seja o livro que eu pretendia referenciar, não o Código Limpo ... livros demais, com pouca memória.
CaffGeek
1
+1 para bootstraping, que é tão relevante para estruturas de teste quanto para compiladores, consulte também dogfooding .
Mark Booth
3

Você está correto, os defeitos no software significam que os resultados não são confiáveis. No entanto, existe uma maneira de contornar isso e criar um conjunto confiável de testes.

A idéia é criar um pequeno equipamento de teste que teste a funcionalidade "básica" muito básica de cada componente do sistema de teste (geralmente, consiste em pelo menos uma estrutura e um corredor). Se a estrutura de teste for flexível o suficiente, você poderá conectar esse chicote diretamente ao seu sistema, por exemplo, implementando uma interface ou fornecendo um conjunto de métodos necessários na implementação do seu chicote.

O restante da funcionalidade deve ser testado, contando apenas com a funcionalidade "principal", que já foi testada usando o chicote. Se você se encarregar de usar apenas a funcionalidade do "núcleo" para testar a funcionalidade não essencial, terá um conjunto de testes nos quais poderá confiar.

dasblinkenlight
fonte
0

Não conheço o qunit, mas já trabalhei em vários projetos em que versões anteriores de uma solução foram usadas para validar versões posteriores, por isso não a vejo como uma abordagem inválida.

Qualquer pacote de teste de unidade no vácuo sem integração ou teste de UAT será suscetível a uma falha no próprio pacote de teste, bem como a todos os problemas de integração usuais que um conjunto de testes de unidade não pode cobrir, por isso não tenho certeza de que iria tanto quanto dizer que o autoteste na mesma versão é mais defeituoso do que confiar em novos testes de unidade em qualquer outro projeto.

Ao ler brevemente o site vinculado do projeto, parece mais que eles apontam que não há nada de especial no cenário de teste ou nos alvos que você pode testar do que anunciando que uma biblioteca de autoteste é a solução perfeita.

Conta
fonte
-1

Não, você não pode testar o software consigo mesmo, pelo menos de uma maneira que seria aceitável em uma situação de auditoria. A verificação independente tornou-se uma norma bem estabelecida, porque é muito menos provável que dois X diferentes (pessoas, estruturas, ferramentas) cometerão o mesmo erro / com os mesmos erros. Isso não garante que o que quer que você teste esteja realmente correto, mas significa que há uma menor chance de aprovação incorreta em qualquer teste. Testar algo consigo mesmo não pode aumentar sua confiança de que ele funciona corretamente, mas pode ser útil como uma verificação rápida e suja para reduzir o tempo necessário para receber feedback.

Ryathal
fonte
Você percebe que os testes devem testar os casos de sucesso e falha? Também normalmente, quando você testa uma estrutura de teste, deve usar uma versão "conhecida" da estrutura. Eu usaria apenas uma versão de "desenvolvimento" de uma estrutura de teste como um teste de aceitação final antes de lançar.
Binarycleric