Test Generation: The Oracle Problem
Geração Automática de Testes em Sistemas
Introdução à Geração de Testes
- A geração automática de testes pode ser realizada a partir de especificações do sistema, como máquinas de estado ou pré e pós-condições dos métodos.
- O setup do teste envolve a criação de objetos e a inicialização dos valores desses objetos, o que é relativamente fácil de gerar automaticamente.
Estrutura do Teste
- Além da criação dos objetos, é possível gerar chamadas para métodos disponíveis na classe analisando o código.
- A parte mais desafiadora é determinar o resultado esperado do teste, especialmente quando se tenta adicionar dois alunos com o mesmo CPF.
Desafios na Geração Automática
- A dificuldade em adivinhar a lógica do teste surge quando apenas temos acesso ao código e não às especificações comportamentais esperadas.
- O problema do oráculo se torna evidente: sem especificações claras, não conseguimos derivar resultados esperados automaticamente.
Tipos de Oráculos
- Existem situações onde podemos resolver o problema do oráculo utilizando funções inversas das ações testadas, mas isso é raro.
- Um tipo simples de oráculo é o oráculo de regressão, que verifica se um teste falha em comparação com versões anteriores do código.
Importância da Observação no Teste
- Se um teste que antes passava começa a falhar após modificações no código, isso indica uma mudança no comportamento que deve ser investigada.
- Outro tipo genérico de oráculo observa se o sistema lança exceções inesperadas durante os testes, sinalizando possíveis problemas.
Análise dos Recursos Utilizados
- Um terceiro tipo de oráculo analisa o uso excessivo dos recursos pelo sistema durante os testes; isso pode indicar anomalias no comportamento esperado.