Testes de Mutação baseado no artigo de Mário Correia,
description
Transcript of Testes de Mutação baseado no artigo de Mário Correia,
Teste e Qualidade de Software, 2006/07, Mário Correia 1
Testes de Mutação
baseado no artigo de Mário Correia,Testes de Mutação, 2006, acessível em
http://deec.fe.up.pt/~ei02070/tqs/
7 Dezembro 2006
2Teste e Qualidade de Software, 2006/07, Mário Correia
Índice
Introdução
Processo de teste com mutação
Jester
Problemas com a técnica
Comparação com testes de cobertura
Notas finais
3Teste e Qualidade de Software, 2006/07, Mário Correia
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].
4Teste e Qualidade de Software, 2006/07, Mário Correia
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.
5Teste e Qualidade de Software, 2006/07, Mário Correia
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.
6Teste e Qualidade de Software, 2006/07, Mário Correia
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.
7Teste e Qualidade de Software, 2006/07, Mário Correia
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 && .
8Teste e Qualidade de Software, 2006/07, Mário Correia
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.
9Teste e Qualidade de Software, 2006/07, Mário Correia
Jester: tutorial
Lançar Jester em consola:●java -classpath .:lib/jester.jar:lib/junit.jar:src/ jester.TestTester
extensos.test.TestExtensos src/ > resultados.txt
10Teste e Qualidade de Software, 2006/07, Mário Correia
Jester: tutorial
Após o Jester terminar, analisa-se os resultados:
11Teste e Qualidade de Software, 2006/07, Mário Correia
Jester: tutorial
12Teste e Qualidade de Software, 2006/07, Mário Correia
Jester: tutorial
13Teste e Qualidade de Software, 2006/07, Mário Correia
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).
14Teste e Qualidade de Software, 2006/07, Mário Correia
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.
15Teste e Qualidade de Software, 2006/07, Mário Correia
Jester: avaliação da ferramenta
●[Bybro, 2003] propõe uma
ferramenta de mutação para
Java, com uma vasta gama de
operadores:
16Teste e Qualidade de Software, 2006/07, Mário Correia
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.
17Teste e Qualidade de Software, 2006/07, Mário Correia
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.
18Teste e Qualidade de Software, 2006/07, Mário Correia
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].