Test Generation: Model Based Testing

Test Generation: Model Based Testing

Testes Automáticos: Reduzindo Custos e Aumentando Eficiência

Introdução aos Testes Automáticos

  • Os testes são essenciais para garantir a qualidade do software, mas possuem custos associados. A geração automática de testes pode ajudar a reduzir esses custos.
  • Muitos desenvolvedores não têm motivação para escrever testes, o que torna a automação uma solução interessante.

Geração Automática de Testes

  • Pesquisadores buscam maneiras de eliminar os custos da criação manual de testes através da geração automática, utilizando especificações formais do sistema.
  • Um exemplo é o uso de máquinas de estados, onde cada caminho representa um teste possível, definindo estados iniciais, ações e estados finais esperados.

Abordagens Baseadas em Modelos

  • As abordagens baseadas em modelos derivam casos de teste a partir do comportamento especificado do sistema. Isso permite criar subconjuntos desse comportamento como casos de teste.
  • Embora essa abordagem reduza custos na execução dos testes, construir especificações detalhadas ainda pode ser caro e nem sempre viável.

Especificações com JML

  • O uso da linguagem JML (Java Modeling Language) permite especificar pré-condições e pós-condições associadas a métodos.
  • Exemplo prático: um método que ordena um array deve ter uma pré-condição que garante que o array não seja nulo e uma pós-condição que assegura que o array está ordenado após a execução.

Geração Automática com Pré e Pós Condições

  • Com as especificações adequadas, ferramentas podem gerar automaticamente os testes ao criar entradas aleatórias que satisfazem as pré-condições.
  • Após executar o método testado, verifica-se se as pós-condições são válidas; isso simplifica o processo de teste ao utilizar as próprias condições como oráculo.

Exemplos Práticos de Testes Gerados

  • Ferramentas automatizadas conseguem gerar entradas para testar métodos com base nas condições estabelecidas nas especificações.
  • Exemplos incluem arrays gerados aleatoriamente sendo testados quanto à sua ordenação após chamar o método correspondente.
Playlists: Testing+