Testes de Mutação baseado no artigo de Mário Correia,

18
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

description

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. Introdução Processo de teste com mutação Jester Problemas com a técnica Comparação com testes de cobertura Notas finais. Índice. - PowerPoint PPT Presentation

Transcript of Testes de Mutação baseado no artigo de Mário Correia,

Page 1: 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

Page 2: Testes de Mutação baseado no artigo de Mário Correia,

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

Page 3: Testes de Mutação baseado no artigo de Mário Correia,

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].

Page 4: Testes de Mutação baseado no artigo de Mário Correia,

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.

Page 5: Testes de Mutação baseado no artigo de Mário Correia,

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.

Page 6: Testes de Mutação baseado no artigo de Mário Correia,

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.

Page 7: Testes de Mutação baseado no artigo de Mário Correia,

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 && .

Page 8: Testes de Mutação baseado no artigo de Mário Correia,

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.

Page 9: Testes de Mutação baseado no artigo de Mário Correia,

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

Page 10: Testes de Mutação baseado no artigo de Mário Correia,

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

Jester: tutorial

Após o Jester terminar, analisa-se os resultados:

Page 11: Testes de Mutação baseado no artigo de Mário Correia,

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

Jester: tutorial

Page 12: Testes de Mutação baseado no artigo de Mário Correia,

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

Jester: tutorial

Page 13: Testes de Mutação baseado no artigo de Mário Correia,

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).

Page 14: Testes de Mutação baseado no artigo de Mário Correia,

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.

Page 15: Testes de Mutação baseado no artigo de Mário Correia,

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:

Page 16: Testes de Mutação baseado no artigo de Mário Correia,

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.

Page 17: Testes de Mutação baseado no artigo de Mário Correia,

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.

Page 18: Testes de Mutação baseado no artigo de Mário Correia,

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].