Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Teste de Software 11: Teste baseado em falhas
Marcelo d’Amorim
2
Resumo Teste baseado em falhas e o teste de mutação
3
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 não se sabe se o teste eh adequado para encontrar erros
4
Problema Usuário não sabe se a suíte de teste é adequada ou não para encontrar erro Solução 2 Introduzir um bug (Fault seeding) É possível saber se o erro introduzido será ou não encontrado (Limitaçoes no final desta aula…)
5
Teste de Mutação Como saber se TS é adequada para encontrar erros?
… Tn P Como saber se TS é adequada para encontrar erros?
6
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?
7
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’
8
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?
9
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’
10
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’
11
Terminologia Mutante Operador de Mutação Mutante morto
Mutante sobrevivente Mutante equivalente
12
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
13
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!
14
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. *******************************************************/
15
Métodologia (Parte 2) Input: P: Pgm, TS: set of Pgm, {P1, P2, …, Pn}: set of Pgm Output: (survivors: set of Pgm, 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)
16
encontreSobreviventes
Metodologia (Parte 3) Set of Mutants gerarMutantes encontreSobreviventes P OPs TS sobreviventes novos testes
17
Score de Mutação Está para o teste de falhas assim com cobertura está para o teste estrutural Score: #mortos / (#mutantes - #equivalentes) Ex. 10 mutantes, 5 mortos, 2 equivalentes. Score = 5/8 = (62.5%)
18
Nota: Geração de Casos de Teste
Cobertura e score de mutação são usados com frequência para avaliar (comparar) técnicas de geração de casos de teste
19
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)
20
Resumo Teste baseado em falhas e o teste de mutação
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.