1 / 18

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

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.

valiant
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  3. 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]. Introdução

  4. 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. Introdução

  5. 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. Processo de teste com mutação

  6. 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. Processo de teste com mutação

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

  8. 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. Jester: tutorial

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

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

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

More Related