(baseado em slides de ex-alunos)

Slides:



Advertisements
Apresentações semelhantes
Análise do Rational Suite
Advertisements

Creating an Eclipse-based IDE for the D programming language
Teste de Software 11: Teste baseado em falhas
Boas Práticas Adotadas em um Projeto de Design de Testes – Um relato de experiência
Desenvolvimento de Plug-ins Orientado a Testes
Programação em Java Prof. Maurício Braga
Rational Unified Process
Protótipo de Simulador de Elevadores
Iniciando na plataforma Eclipse
Planificação do Projecto de SW
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes
Sistema para Gerenciamento de Redes Baseado em Agentes Móveis
Mutação de Interface Interface Mutation: An Approach for Integration Testing Marcio E. Delamaro José C. Maldonado Aditya P. Mathur.
Mutação Orientada a Objeto para Assegurar a Qualidade de Testes Baseado no Artigo: Object-Oriented Mutation to Asses the Quality of Tests Anna Derezinska.
Desenvolvimento Guiado por Testes
Confiabilidade e Segurança MO828 – Eng. Software II Prof
April 05 Prof. Ismael H. F. Santos - 1 Modulo II CheckStyle Professor Ismael H F Santos –
April 05 Prof. Ismael H. F. Santos - 1 Modulo II Findbugs Professor Ismael H F Santos –
Introdução à Lógica de Programação (cont.)
Porto Alegre, 5 de Outubro de 2009
Reliability verification of Digital Systems Design based on mutation Analysis Samuel S. Marczak.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Adaptando um Processo de Desenvolvimento de Software para Análise de Cobertura de Código Prof. Alexandre Marcos Lins de Vasconcelos 06/out/2007.
7 Abstração Genérica Unidades genéricas e instanciação.
Testes de Mutação baseado no artigo de Mário Correia,
Uso do Eclipse/SourceForge Paradigmas de Linguagem de Programação
Linguagem Técnica II Testes Automatizados Aula 04 Prof
Introdução aos conceitos de Teste de Software
Introdução ao Teste Unitário com JUnit
REDUNDÂNCIA POR SOFTWARE
Mestrado Profissional em Gestão Ambiental
testes de regressão e testes baseados em riscos
PROGRAMAÇÃO ESTRUTURADA II
Introdução a Computação Trabalho Final PUC Minas – São gabriel
Programação Orientada à Objetos
Carlos Oberdan Rolim Ciência da Computação
Análise e Desenvolvimento de Sistemas
Test Driven Development Nazareno Andrade Baseado no material do prof. Hyggo Almeida.
Interpretador Python.
Tarefa 02 Visual Studio 2005 Visual C# Programa Hello World.
Prof. Alexandre Vasconcelos
Um Framework Para Testes
How to Break Software Capítulo 3 Taíse Dias Testing from the user Interface.
1 Test Driven Development John Jonathan da Silva /
Programação I Laboratório I
Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery.
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Programação Orientada a Objetos - Java
Aula Prática 4 Monitoria IP/CC (~if669).
Análise Léxica Prof. Alexandre Monteiro
Introdução a Teste de Software
+ Java Básico Aula 1 por Flávio Juvenal. + Histórico Green Project (1991) Desenvolver plataforma para eletrodomésticos inteligentes Tentaram usar C++
Provas Datas: – P1 : 18/09/2014 – P2: 18/11/2014 – Exame : 09/12/2014.
Back-End Compilação aula-11-back-end.pdf.
Capítulo 9 Arquivos JAR.
Ferramentas JMOCKIT, ALLPAIRS, ECLEMMA, MUCLIPSE
Aglets.
Teste baseado em falhas. Problema Usuário não sabe se a suíte de teste é adequada ou não para encontrar erro Solução 1 –Medir cobertura. Mas ainda não.
1 Linguagens de Programação Pedro Lopes 2010/2011.
Engenharia de Software
Influencias sobre o Projeto da Linguagem
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
18/09/ /12/20082 Testes Baseados Em Modelo Diana Rúbia Paulo César Qualidade, Processos e Gestão de Software Alexandre Vasconcelos {drrr, pco,
Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários.
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.
Testes de Mutação baseado no artigo de Mário Correia,
TQS - Teste e Qualidade de Software (Software Testing and Quality) Test Driven Devlopment Experiment João Pascoal Faria.
(baseado em slides de ex-alunos)
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