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

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

1 Testes de mutação, João Pascoal Faria, 2007 TQS - Teste e Qualidade de Software (Software Testing and Quality) Testes de Mutação João Pascoal Faria

Apresentações semelhantes


Apresentação em tema: "1 Testes de mutação, João Pascoal Faria, 2007 TQS - Teste e Qualidade de Software (Software Testing and Quality) Testes de Mutação João Pascoal Faria"— Transcrição da apresentação:

1 1 Testes de mutação, João Pascoal Faria, 2007 TQS - Teste e Qualidade de Software (Software Testing and Quality) Testes de Mutação João Pascoal Faria (baseado em slides de ex-alunos)

2 2 Testes de mutação, João Pascoal Faria, 2007 Índice n O que são testes de mutação? n Operadores de mutação n Experiência com Jester n Comparação com testes de cobertura n Conclusões

3 3 Testes de mutação, João Pascoal Faria, 2007 O que são testes de mutação? n Técnica de avaliação (e melhoria) da qualidade dos testes com base na determinação da sua capacidade de detectar falhas injectadas artificialmente no código já testado, representativas de falhas reais n Injecção de falhas no código origina mutantes Falhas são injectadas pela aplicação de operadores de mutação, representando erros típicos n A cada mutante é aplicado o conjunto de testes originais Se os testes falham -> o mutante diz-se neutralizado Se os testes passam -> o mutante sobreviveu -> testes devem ser melhorados (ou mutante é equivalente ao código original -> análise manual!) n Se os testes detectam as falhas artificiais podemos assumir que detectarão falhas reais

4 4 Testes de mutação, João Pascoal Faria, 2007 Exemplo de operadores de mutação [Bybro, 2003]

5 5 Testes de mutação, João Pascoal Faria, 2007 Jester n The Junit test tester Testes de Mutação em Java (com portings para Python e C#) n Open source n Número limitado de 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 && n Pouco eficiente n Jester its really a jest of mutation [Offutt, 2005] n Mas permite ilustrar o conceito …

6 6 Testes de mutação, João Pascoal Faria, 2007 Experimentação com Jester n Experimentado com o problema dos extensos n Gerou 77 mutantes, dos quais 1 sobreviveu n Análise posterior (ver a seguir) revelou 2 testes de má qualidade

7 7 Testes de mutação, João Pascoal Faria, 2007 Experimentação com Jester: Detalhes técnicos n 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 n Lançar Jester em consola: java -classpath.:lib/jester.jar:lib/junit.jar:src/ jester.TestTester extensos.test.TestExtensos src/ > resultados.txt n Analisar resultados n Nota: 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)

8 8 Testes de mutação, João Pascoal Faria, 2007 Análise: Código sob teste original

9 9 Testes de mutação, João Pascoal Faria, 2007 Análise: Teste original

10 10 Testes de mutação, João Pascoal Faria, 2007 Análise: Mutante sobrevivente No testBelowMin, salta o if e dá ArrayOutOfBoundsException mais adiante (-1), em vez de IllegalArgumentException, conforme especificado. O método testBelowMin vai considerar que funcionou bem porque espera uma excepção qualquer, em vez de restringir a IllegalArgumentException!

11 11 Testes de mutação, João Pascoal Faria, 2007 Melhoria dos testes Se tivesse sido usado TDD, este problema não teria acontecido! Porquê? (Recordar: Ver o teste a falhar)

12 12 Testes de mutação, João Pascoal Faria, 2007 Comparação com testes de cobertura n Testes de cobertura de código: Verificam se todas as possíveis condições de execução de um programa, são cobertas 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 n 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

13 13 Testes de mutação, João Pascoal Faria, 2007 Conclusões n Testes de mutação ajudam a melhorar a qualidade dos testes n Podem guiar o processo de criação de testes n Usados em complemento com outro tipo de testes, em especial testes de cobertura de código n Técnica valiosa para sistemas confiáveis e tolerantes a falhas, em conjunto com injecção de falhas por hardware n Principais dificuldades: Vasto número de mutantes possíveis: -Escolha criteriosa dos operadores de mutação Elevado esforço na análise de mutantes sobreviventes e detecção de eventuais mutantes equivalentes Poucas ferramentas

14 14 Testes de mutação, João Pascoal Faria, 2007 Exercício n No projecto da conversão de números para extenso, experimentar injectar manualmente pequenas mutações no código sob teste e verificar se os mutante gerados são mortos pelos testes No caso de não ter ficheiros próprios, usar Extensos.java e TestExtensos.java Aplicar manualmente pelo menos 10 mutações (uma de cada vez), do tipo das realizadas pela ferramenta Jester (alteração de condições, troca de operadores, troca de constantes) n O objectivo é encontrar algum mutante que não é morto pelos testes, e que não é equivalente ao código original, devendo-se depois melhorar o conjunto dos testes para matar também esse mutante. n (Fora das aulas) Experimentar com Jester ou outra ferramenta

15 15 Testes de mutação, João Pascoal Faria, 2007 Referências e mais informação n [Harold, 2005] Elliotte Rusty Harold, Test your tests with Jester: Test-suite flaws are no joke, 3 Março 2005, IBM developer works - Java technology, n [Jester, 2005] Ivan Moore, Jester - the JUnit test tester, 7 Novembro 2005, n [Moore, 2002] Ivan Moore, Jester - a JUnit Test Tester, 25 Maio 2002, Agile Alliance, n [Offutt, 2005] Jeff Offutt, An analysis of Jester based on published papers, Abril 2005, n [Himsworth, 2003] Phil Himsworth, Software mutation testing, 21 Janeiro 2003, id= n [Bybro, 2003] Mattias Bybro, A Mutation Testing Tool for Java Programs, mutation testing tool for java.pdf


Carregar ppt "1 Testes de mutação, João Pascoal Faria, 2007 TQS - Teste e Qualidade de Software (Software Testing and Quality) Testes de Mutação João Pascoal Faria"

Apresentações semelhantes


Anúncios Google