Teste baseado em falhas

Slides:



Advertisements
Apresentações semelhantes
Teste de Software 01: Introdução
Advertisements

Teste de Software 11: Teste baseado em falhas
Python: Recursão Claudio Esperança.
Boas Práticas Adotadas em um Projeto de Design de Testes – Um relato de experiência
Metodologia de testes Nome: Gustavo G. Quintão
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Técnicas de Teste de Software
Engenharia de Software
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
Estrutura de Dados e Algoritmos e Programação e Computadores II
Faculdade de Ciências Sociais e Aplicadas de Petrolina – FACAPE
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.
Michele Mengucci CVRM-Centro de Geo-Sistemas IST Lisboa
Pesquisa em Memória Primária
Pesquisa em Memória Primária
Porto Alegre, 5 de Outubro de 2009
Reliability verification of Digital Systems Design based on mutation Analysis Samuel S. Marczak.
(baseado em slides de ex-alunos)
Testes de Mutação baseado no artigo de Mário Correia,
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
Uma ferramenta para Geração de Mutantes para linguagem C#.
Conceitos Básicos.
REDUNDÂNCIA POR SOFTWARE
Prof. Marcelo de Oliveira Rosa
(vb) ARC – Diagnóstico e falhas – classificação de falhas Crash do sistema operativo; Bloqueio de programa; Crash de programa; Problema de.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Arquitetura do Software
Utilizando Testes Unitários Gleibson Rodrigo “dartanham” Fontes: antiga apresentação de testes da disciplina de ESS e na curso de testes do PDesigner.
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Um Framework Para Testes
Engenharia de Software
Estruturas de Dados Aula 9: Listas (parte 1)
Engenharia de Software
Java Bytecode Software Básico Mitsuo Takaki.
Controle de Concorrência Locks. Conceito de Transação Transações podem ser vistas como um grupo de operações combinadas em uma unidade lógica de trabalho.
PROCESSO DE DESENVOLVIMENTO DE SOFTWARE – PDS VALIDAÇÃO.
O Processo Unificado (UP)
Banco de Dados Aplicado ao Desenvolvimento de Software
METODOLOGIA, MÉTODOS E FERRAMENTAS
SCORE 2009 – aula a convite do Prof. Jaelson Castro Marcelo d’Amorim Testes em 2h.
Teste de Software 14: Geração de teste baseado em modelos: MBT
Desenvolvimento de Software Dirigido a Modelos
Ferramentas JMOCKIT, ALLPAIRS, ECLEMMA, MUCLIPSE
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Recursividade Profs. De Prog2 e Lab2.
Semântica de Linguagens de Programação
Regressão e Previsão Numérica.
Data Flow Testing. Vários critérios de adequação até aqui Baseado em entradas de função (funcional)‏ Baseado na estrutura do programa (estrutural)‏ Baseado.
Teste de Software 02: Oracles Marcelo d’Amorim
Alinhamento de Cadeias de DNA COMPARAÇÃO DE SEQÜÊNCIAS
Adequação do Teste. 2 Teste é incompleto Origem da incompletude –Seqüências insuficientes –Classificadores parciais É necessário uma medida que indique.
Critérios de adequação e os diversos tipos de teste
Seminário Técnico Conceitos e Projeto de Sistemas Distribuídos e Paralelos Adriano Machado Why do Internet services fail, and What.
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.
Introdução a Programação
Teste de Software 08: Teste Funcional Marcelo d’Amorim
Planejamento do Teste. Define que “tipo de teste” se quer fazer Depende de restrições do ambiente. Exemplo: –Deve basear-se em requisitos –Limitações.
Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!
Data Flow Testing. Vários critérios de adequação até aqui Baseado em entradas de função (funcional)‏ Baseado na estrutura do programa (estrutural)‏ Baseado.
SBMF 2008, Salvador-BA, Brasil Marcelo d'Amorim Fundamentos do Teste de Software.
Teste Funcional. 2 Teste funcional Considera o sistema como uma função O teste consiste em: –Gerar dados de entrada para função –Comparar saída com resultado.
Alinhamento Global de Seqüências Katia Guimarães.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Introdução 1.
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,
Teste de Software 09: Teste Estrutural Marcelo d’Amorim
MUTAÇÃO DE INTERFACE (MI) JACKSON ANTONIO DO PRADO LIMA SILVIA REGINA VERGILIO.
Transcrição da apresentação:

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… cobrir mais implica em encontrar mais erros?

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… cobrir mais implica em encontrar mais erros? Solução 2: Introduzir erro intencionalmente (fault seeding/injection) Permite identificar se a suíte encontrará ou não os erros injetados.

Teste de Mutação Como saber se TS é adequada para encontrar erros?  … Tn  P Como saber se TS é adequada para encontrar erros?

Teste de Mutação P’ é uma versão que contém um erro! TS = T0 T1 T2 … Tn  T0 T1 T2 … Tn  P P’ P’ é uma versão que contém um erro! O que se pode concluir sobre TS?

Teste de Mutação P’ é uma versão que contém um erro! TS = T0 T1 T2 … Tn  T0 T1 T2 … Tn  P P’ P’ é uma versão que contém um erro! O que se pode concluir sobre TS? Inadequado para encontrar erro introduzido em P’

Teste de Mutação O que o programador deve fazer ao perceber isto?   TS = T0 T1 T2 … Tn  T0 T1 T2 … Tn  P P’ O que o programador deve fazer ao perceber isto?

Teste de Mutação O que o programador deve fazer ao perceber isto? TS = T0 T1 T2 … Tn  T0 T1 T2 … Tn  P P’ O que o programador deve fazer ao perceber isto? Adicionar novo teste para capturar erro em P’

Teste de Mutação Novo teste deve passar em P e falhar em P’ TS = T0 T1 T2 … Tn  T0  P P’ T1  T2  … Tn  Tn+1  Tn+1  Novo teste deve passar em P e falhar em P’ Definição: TS distingue programas P e P’

Terminologia Mutante Operador de Mutação Mutante morto Mutante sobrevivente Mutante equivalente

Terminologia Mutante: Programa original modificado Operador de Mutação: Definição de uma transformação (de original para mutante)‏ Mutante morto: Quando a suíte de teste consegue distinguir mutante do original Mutante sobrevivente: Não morto (acima)‏ Mutante equivalente: Semântica do mutante é equivalente ao original

Modelo de falhas Caracterização dos problemas frequentes em um domínio E.g., reentrância em AOP, null-pointer em OO, deadlocks em programação concorrente, etc. Gerador de mutantes (operadores de mutação) usam esta caracterização para criar mutantes

Mutantes sobreviventes Duas razões para Pm sobreviver ao teste de distinção de P em relação a TS Suíte TS não consegue distinguir Pm e P P e Pm são equivalentes => problema indecidível!

Métodologia (Parte 1)‏ Input: P: Pgm, OPS: set of Op Output: set of Pgm Pseudo-code: gerarMutantes /******************************************************* * gera vários novos programas derivados de P. * Para cada um, identifica um operador de * mutação em OPS e uma posicão para aplicá-lo * em P. Em geral, cada mutante inclui apenas * uma modificação. *******************************************************/

Métodologia (Parte 2)‏ Input: P: Pgm, TS: set of Pgm, {P1, P2, …, Pn}: set of Pgm Output: /*survivors*/ set of Pgm x /*killed*/ set of Pgm Pseudo-code: encontreSobreviventes for each Pm in {P1,P2, …,Pn} do // distinguir mutante if (exists some T in TS s.t. RUN(T,Pm) == FAIL)‏ killed = killed U {Pm} else survivors = survivors U {Pm} done return (survivors, killed)‏

encontreSobreviventes Metodologia (Parte 3)‏ P TS Set of Mutants OPs gerarMutantes encontreSobreviventes sobreviventes novos testes

Score de Mutação Métrica usada no teste de mutaçao Está para o teste de falhas assim com cobertura está para o teste estrutural Definição: #mortos / (#mutantes - #equivalentes)‏

Exemplo Qual o score para o cenário 10 mutantes, 5 mortos, 2 equivalentes?

Exemplo Qual o score para o cenário 10 mutantes, 5 mortos, 2 equivalentes? Score = 5/(10-2) = 5/8 = .625 = 62.5%

Nota: Definição de score Definição: #mortos / (#mutantes - #equivalentes)‏ É comum desconsiderar #equivalentes, pois não é possível identificar de forma automatizada e ainda precisa!

Nota: Definição de score Definição: #mortos / #mutantes Aproximação pessimista do score ideal!

Principais limitações Não se sabe se erro introduzido por um operador de mutação é relevante Classificar um mutante como equivalente é manual (caro e passível de erro)‏ Custo alto: Número de mutantes elevado requer várias execuções do teste

Resumo Modelo de falhas Mutante morto Mutante sobrevivente Mutante equivalente Score de mutação