Test Generation: The Oracle Problem

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.
Playlists: Testing+