teste baseado em falhas. problema usuário não sabe se a suíte de teste é adequada ou não para...
TRANSCRIPT
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 há correlação
direta com capacidade de encontrar 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 ainda não há correlação
direta com capacidade de encontrar erros.• Solução 2
– Introduzir bug intecionalmente (fault seeding). Permite identificar se a suíte encontrará ou não o bug.
Teste de Mutação
PT0T1T2…Tn
• Como saber se TS é adequada para encontrar erros?
TS =
Teste de Mutação
• P’ é uma versão que contém um erro!• O que se pode concluir sobre TS?
PT0T1T2…Tn
P’T0T1T2…Tn
TS =
Teste de Mutação
• P’ é uma versão que contém um erro!• O que se pode concluir sobre TS?
PT0T1T2…Tn
P’T0T1T2…Tn
TS =
Inadequado para encontrar erro introduzido em P’
Teste de Mutação
• O que o programador deve fazer ao perceber isto?
PT0T1T2…Tn
P’T0T1T2…Tn
TS =
Teste de Mutação
• O que o programador deve fazer ao perceber isto?
PT0T1T2…Tn
P’T0T1T2…Tn
TS =
Adicionar novo teste para capturar erro em P’
Teste de Mutação
• Novo teste deve passar em P e falhar em P’• Definição: TS distingue programas P e P’
PT0T1T2…Tn
P’T0T1T2…Tn
TS =
Tn+1 Tn+1
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
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 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. *******************************************************/
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)
Metodologia (Parte 3)
P
TS
Set of Mutants
OPsgerarMutantes encontreSobreviventes
sobreviventesnovos 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!
Nota: Definição de score
• Definição: #mortos / #mutantes
Aproximação pessimista do score preciso!
Nota: Geração de Casos de Teste
É comum usar cobertura e scores de mutação para avaliar (comparar) técnicas de geração de casos de teste (através das suítes que geram).
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)
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 usa esta caracterização para criar mutantes
Resumo
• Modelo de falhas• Mutante morto• Mutante sobrevivente
– Mutante equivalente• Score de mutação