A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Testes de Mutação baseado no artigo de Mário Correia,"— Transcrição da apresentação:

1 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

2 Índice Introdução Processo de teste com mutação Jester
Problemas com a técnica Comparação com testes de cobertura Notas finais

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

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

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

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

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

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

9 Jester: tutorial Lançar Jester em consola:
java -classpath .:lib/jester.jar:lib/junit.jar:src/ jester.TestTester extensos.test.TestExtensos src/ > resultados.txt

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

11 Jester: tutorial

12 Jester: tutorial

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

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

15 Jester: avaliação da ferramenta
[Bybro, 2003] propõe uma ferramenta de mutação para Java, com uma vasta gama de operadores:

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

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

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


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

Apresentações semelhantes


Anúncios Google