Testes de Mutação
baseado no artigo de Mário Correia,
Testes de Mutação, 2006, acessível
emhttp://deec.fe.up.pt/~ei02070/tqs/
7 Dezembro 2006
Teste e Qualidade de Software, 2006/07, Mário Correia
1
Índice
Introdução
Processo de teste com mutação
Jester
Problemas com a técnica
Comparação com testes de cobertura
Notas finais
Teste e Qualidade de Software, 2006/07, Mário Correia
2
Introdução
Objectivo dos Testes de Mutação:
●Verificar a qualidade dos testes.
Designações alternativas para Testes de Mutação:
●Test tester [Jester, 2005];
●Testing the testing [Himsworth, 2003];
●Automated error seeding [Jester, 2005].
Teste e Qualidade de Software, 2006/07, Mário Correia
3
Introdução
Ideias chave:
●Injecção de falhas no código original originam mutantes;
●A cada mutante é aplicado os testes originais:
●Se os testes passam -> testes devem ser melhorados;
●Se os testes falham -> o mutante diz-se neutralizado;
●Se os testes detectam as falhas artificiais podemos assumir que detectará
falhas reais;
●Falhas injectadas pela aplicação de operadores de mutação.
Teste e Qualidade de Software, 2006/07, Mário Correia
4
Processo de teste com mutação
Strong mutation testing:
●Mutantes executados até terminarem;
●Permite a recuperação de falhas;
●Resultados muito precisos;
●Gasta muito tempo.
Weak mutation testing:
●Mutantes terminam após detecção de falha;
●Não permite a recuperação de falhas;
●Resultados pouco precisos;
●Gasta pouco tempo.
Teste e Qualidade de Software, 2006/07, Mário Correia
5
Processo de teste com mutação
Firm mutation testing:
●Compromisso entre Strong e Weak mutation testing;
●Mutantes terminam execução algures entre o código do mutante e o fim
do programa;
●Deve ser o mais cedo possível para poupar tempo;
●Mas suficientemente tarde para permitir recuperar de falhas.
Teste e Qualidade de Software, 2006/07, Mário Correia
6
Jester
The Junit test tester:
●Testes de Mutação em Java (com portings para
Python e C#).
Operadores de mutação:
●Modificação de números literais: ex.: 0 para 1;
●Alteração de true por false e vice-versa;
●Alteração de if( para if(true || ;
●Alteração de if( para if(false && .
Teste e Qualidade de Software, 2006/07, Mário Correia
7
Jester: tutorial
O código exemplo para demonstrar o funcionamento do Jester será o
problema dos Extensos dado nas aulas de TQS.
Criar projecto e copiar ficheiros do Jester:
●jester.cfg: configuração do Jester;
●ignorelist.cfg: construções da linguagem a ignorar;
●mutations.cfg: mutações a aplicar;
●jester.jar: jar do Jester;
●lib/junit.jar: jar do Junit.
Teste e Qualidade de Software, 2006/07, Mário Correia
8
Jester: tutorial
Lançar Jester em consola:
●java -classpath .:lib/jester.jar:lib/junit.jar:src/ jester.TestTester
extensos.test.TestExtensos src/ > resultados.txt
Teste e Qualidade de Software, 2006/07, Mário Correia
9
Jester: tutorial
Após o Jester terminar, analisa-se os resultados:
Teste e Qualidade de Software, 2006/07, Mário Correia
10
Jester: tutorial
Teste e Qualidade de Software, 2006/07, Mário Correia
11
Jester: tutorial
Teste e Qualidade de Software, 2006/07, Mário Correia
12
Jester: notas
O Jester apenas executa se os testes passarem no código original;
●O Jester realiza as mutações directamente no código original -> manter
cópia do projecto ou ter o projecto sob controlo de versões;
●O código deve ser compilado para a mesma pasta onde reside o código
fonte (não pode ser para a pasta bin/ habitual no Eclipse).
●
Teste e Qualidade de Software, 2006/07, Mário Correia
13
Jester: avaliação da ferramenta
Jester it’s really a “jest” of mutation, [Offutt, 2005]
●Operadores muito simples;
●Trocar 0 por 1 é praticamente inútil pois os testes irão detectá-lo de
certeza -> Operadores instáveis;
●Jester resume-se a testar condições.
●Ferramenta muito ineficiente.
●
Teste e Qualidade de Software, 2006/07, Mário Correia
14
Jester: avaliação da ferramenta
[Bybro, 2003] propõe uma
ferramenta de mutação para
Java, com uma vasta gama de
operadores:
●
Teste e Qualidade de Software, 2006/07, Mário Correia
15
Problemas com a técnica
Vasto número de mutantes:
●Escolha criteriosa dos operadores de mutação.
●Processo dispendioso em tempo:
●Eliminação de mutantes equivalentes - mutantes com o mesmo
comportamento que o original;
●Processo Weak ou Firm.
●Detecção de mutantes equivalentes.
●Neutralização dos chamados stubborn mutants: mutantes não
equivalentes mas difíceis de neutralizar.
●
Teste e Qualidade de Software, 2006/07, Mário Correia
16
Comparação com testes de cobertura
Testes de Cobertura de código:
●Verificam se todas as possíveis condições de execução de um programa,
são cobridas pelos testes;
●Saber que uma instrução não está a ser executada pelos testes prova que
não está a ser testada; Contudo, o inverso não é verdade:
●Se uma linha de código é executada, isso não significa que está a ser
verdadeiramente testada.
Testes de Mutação:
●Alteram o código pela introdução de falhas, permitindo verificar se
efectivamente os testes cobrem a situação que foi alterada.
Teste e Qualidade de Software, 2006/07, Mário Correia
17
Notas finais
Testes de Mutação ajudam a melhorar a qualidade dos testes;
●Podem guiar o processo de criação de testes;
●Usados em complemento com outro tipo de testes, em especial testes de
cobertura de código;
●Técnica valiosa para sistemas confiáveis e tolerantes a falhas, em
conjunto com injecção de falhas por hardware;
●Mutação pode ser aplicada a outras áreas: ex.: geração de dados de teste
complexos [Shan and Zhu, 2006].
●
Teste e Qualidade de Software, 2006/07, Mário Correia
18
Download

Teste e Qualidade de Software, 2006/07, Mário Correia 1