23
Teste baseado em falhas

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

Embed Size (px)

Citation preview

Page 1: 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

Teste baseado em falhas

Page 2: 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

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?

Page 3: 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

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.

Page 4: 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

Teste de Mutação

P

T0T1

T2

Tn

• Como saber se TS é adequada para encontrar erros?

TS =

Page 5: 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

Teste de Mutação

• P’ é uma versão que contém um erro!

• O que se pode concluir sobre TS?

P

T0T1

T2

Tn

P’

T0

T1

T2

…Tn

TS =

Page 6: 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

Teste de Mutação

• P’ é uma versão que contém um erro!

• O que se pode concluir sobre TS?

P

T0T1

T2

Tn

P’

T0

T1

T2

…Tn

TS =

Inadequado para encontrar erro introduzido em P’

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

Teste de Mutação

• O que o programador deve fazer ao perceber isto?

P

T0T1

T2

Tn

P’

T0

T1

T2

…Tn

TS =

Page 8: 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

Teste de Mutação

• O que o programador deve fazer ao perceber isto?

P

T0T1

T2

Tn

P’

T0

T1

T2

…Tn

TS =

Adicionar novo teste para capturar erro em P’

Page 9: 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

Teste de Mutação

• Novo teste deve passar em P e falhar em P’

• Definição: TS distingue programas P e P’

P

T0T1

T2

Tn

P’

T0

T1

T2

Tn

TS =

Tn+1 Tn+1

Page 10: 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

Terminologia

• Mutante

• Operador de Mutação

• Mutante morto

• Mutante sobrevivente

• Mutante equivalente

Page 11: 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

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

Page 12: 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

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

Page 13: 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

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!

Page 14: 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

Métodologia (Parte 1)

Input: P: Pgm, OPS: set of OpOutput: 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. *******************************************************/

Page 15: 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

Métodologia (Parte 2)

Input: P: Pgm, TS: set of Pgm, {P1, P2, …, Pn}: set of PgmOutput: /*survivors*/ set of Pgm x /*killed*/ set of PgmPseudo-code: encontreSobreviventesfor 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}donereturn (survivors, killed)

Page 16: 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

Metodologia (Parte 3)

P

TS

Set of Mutants

OPsgerarMutantes encontreSobreviventes

sobreviventesnovos testes

Page 17: 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

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)

Page 18: 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

Exemplo

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

Page 19: 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

Exemplo

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

Page 20: 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

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!

Page 21: 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

Nota: Definição de score

• Definição: #mortos / #mutantes

Aproximação pessimista do score ideal!

Page 22: 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

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

Page 23: 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

Resumo

• Modelo de falhas

• Mutante morto

• Mutante sobrevivente– Mutante equivalente

• Score de mutação