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

Post on 24-Jan-2016

29 views 0 download

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,

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