(baseado em slides de ex-alunos)

Slides:



Advertisements
Apresentações semelhantes
Teste de Software 11: Teste baseado em falhas
Advertisements

Mutação de Interface Interface Mutation: An Approach for Integration Testing Marcio E. Delamaro José C. Maldonado Aditya P. Mathur.
Confiabilidade e Segurança MO828 – Eng. Software II Prof
(baseado em slides de ex-alunos)
Testes de Mutação baseado no artigo de Mário Correia,
Introdução a Testes Automatizados AgilCoop – Cursos de Verão 2010 Mariana Bravo IME/USP.
Programação Orientada a Objetos com C++ Descrição do Trabalho Final.
07/06/ João Paulo Pizani Flor ( Síntese comportamental de componentes de um Sistema Operacional em hardware João Paulo Pizani.
Ferramenta de apoio aos testes baseados em requisitos Acadêmico: Leandro da Cunha Orientador: Everaldo Artur Grahl.
Testes de hipótese com uma amostra. Teste de hipótese  Um processo que usa estatísticas amostrais para testar a afirmação sobre o valor de um parâmetro.
Liderança nos Custos (Estratégias de Baixo Custo).
Ferramenta Web para testes de fórmulas matemáticas Kauê da Silva Vieira Orientador: Aurélio Faustino Hoppe.
FERRAMENTA DE SUPORTE A GESTÃO DE DEFEITOS COM INTEGRAÇÃO ENTRE 0800NET E MANTIS Thiago Fabian Lenzi Professor Everaldo Artur Grahl, Orientador.
Automação Industrial Trabalho de Introdução a Engenharia.
Algoritmos e Programação utilizando Visualg
Operadores lógicos Em ocasiões que consideramos mais de uma expressão, podemos usar os operadores lógicos para unir essas expressões. Determinados casos,
Arquivos necessários para a Aula1
(remover ou substituir) (remover ou substituir)
Projeto de Compiladores
Redes Industriais Alarmes
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
Gestão de Projetos Aula 1
(baseado em slides de ex-alunos)
Estruturas de Decisão.
Orientanda: Ana Paula Joslin de Oliveira
Métodos Formais em Engenharia de Software Utilização da Ferramenta VDMTools Lite João Pascoal Faria
Complementos de Engenharia de Software A linguagem VDM++ (4ª parte – Funções avançadas) João Pascoal Faria
ERSS, 2004/05 Gestão de Requisitos
Ferramentas Capture/Replay
Métodos Formais em Engenharia de Software Especificação Algébrica em CafeOBJ (3ª parte) João Pascoal Faria
Geração automática de testes de caixa branca
TQS - Teste e Qualidade de Software (Software Testing and Quality) Análise de cobertura de testes com a ferramenta Coverlipse.
João Pascoal Faria TQS - Teste e Qualidade de Software (Software Testing and Quality) Análise de cobertura de código com.
TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit.
Ant Ferramenta de script Equivalente ao make.
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
TQS - Teste e Qualidade de Software (Software Testing and Quality) Teste Envolvendo Acesso a Bases de Dados João Pascoal.
Prof. Wellington Franco
Software para gerenciamento e configuração de roteadores
Complementos de Engenharia de Software 2005/06
Testes de Mutação baseado no artigo de Mário Correia,
Gestão das Inspeções na Operação da Usina de Itaipu Binacional
Programador/a de Informática
TQS - Teste e Qualidade de Software (Software Testing and Quality) Test Driven Devlopment Experiment João Pascoal Faria.
Parte 2 Métodos e técnicas de pesquisa
FEUP/LEEC Algoritmos e Estruturas de Dados 2001/2002
Criação e manipulação de objetos
Introdução à programação orientada por objetos
Fatores e Métricas de Qualidade
TQS - Teste e Qualidade de Software (Software Testing and Quality) Discussão de Exercícios de Análise de Cobertura de Código.
Workshop Agile tdd - Test Driven development
Serviço Nacional de Aprendizagem Comercial do Rio Grande do Sul
TQS - Teste e Qualidade de Software (Software Testing and Quality) Discussão de Exercícios de Teste Baseado em Modelos.
Como elaborar provas que ajudam na aprendizagem Ensino Fundamental II.
Programação Estruturada Aula 1 Prof. Jorge Barreto Julho 2018.
Linguagem de Programação
Estratégias para Redução do Custo do Teste de Mutação
Programação Orientada a Objetos
Expressões Lógicas e Comandos de Decisão
LÓGICA FORMAL.
Professora Roberta Bonamichi Guidi Garcia
Linguagem de Programação I
Usando JUnit.
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
PROCEDIMENTO OPERACIONAL PADRÃO
Orientações Nossa avaliação será dia , por esse motivo não haverá apresentação O trabalho deve ser montado conforme instruções abaixo. Caso tenha.
Tipos Primitivos de Dados
SISTEMAS DISTRIBUIDOS
Introdução a progrmação Comandos condicionais: if e switch
Tratamento de Não Conformidade Necessidade ou expectativa que é expressa, geralmente, de forma implícita ou obrigatória. Requisito.
Transcrição da apresentação:

(baseado em slides de ex-alunos) TQS - Teste e Qualidade de Software (Software Testing and Quality) Testes de Mutação João Pascoal Faria jpf@fe.up.pt www.fe.up.pt/~jpf (baseado em slides de ex-alunos)

Índice O que são testes de mutação? Operadores de mutação Experiência com Jester Comparação com testes de cobertura Conclusões

O que são testes de mutação? 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 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 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!) Se os testes detectam as falhas artificiais podemos assumir que detectarão falhas reais

Exemplo de operadores de mutação [Bybro, 2003]

Jester The Junit test tester Open source Testes de Mutação em Java (com portings para Python e C#) Open source 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 &&” Pouco eficiente Jester it’s really a “jest” of mutation [Offutt, 2005] Mas permite ilustrar o conceito …

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

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

Análise: Código sob teste original

Análise: Teste original

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!

Melhoria dos testes Se tivesse sido usado TDD, este problema não teria acontecido! Porquê? (Recordar: “Ver o teste a falhar”)

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

Conclusões 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 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

Exercício 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) 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. (Fora das aulas) Experimentar com Jester ou outra ferramenta

Referências e mais informação [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 , http://www-128.ibm.com/developerworks/library/j-jester/ [Jester, 2005] Ivan Moore, Jester - the JUnit test tester, 7 Novembro 2005, http://jester.sourceforge.net/ [Moore, 2002] Ivan Moore, Jester - a JUnit Test Tester, 25 Maio 2002, Agile Alliance, http://agilealliancebeta.org/show/881 [Offutt, 2005] Jeff Offutt, An analysis of Jester based on published papers, Abril 2005, http://ise.gmu.edu/~ofut/jester-anal.html [Himsworth, 2003] Phil Himsworth, Software mutation testing, 21 Janeiro 2003, http://everything2.com/index.pl?node id=1418661 [Bybro, 2003] Mattias Bybro, A Mutation Testing Tool for Java Programs, http://www.nada.kth.se/~karlm/a mutation testing tool for java.pdf