Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

ACH 2006
Engenharia de Sistemas de Informação I
Prof. Marcelo Medeiros Eler
marceloeler@usp.br 
Escola de Artes, Ciências e Humanidades - Universidade de São Paulo
Aula 18 - Teste de Software:
Análise de Mutantes
mailto:marceloeler@usp.br
Objetivos
Apresentar a técnica de teste baseada em erros
Apresentar o critério de teste de mutação
Propor exercícios para exercitar os conceitos da técnica
Como encontrar todas as falhas de um software?
Um conjunto de casos de teste com qualidade ótima é capaz de 
revelar todas as falhas de um software
Para encontrar todas as falhas e garantir que o software está livre 
de defeitos é necessário testá-lo em todas as condições e com 
todos os dados de entrada possíveis
Como encontrar todas as falhas de um software?
Entretanto, as condições, os cenários, os dados de entrada e suas 
combinações tendem a ser infinitos ou muito grandes
Portanto, criar um conjunto de casos de teste ótimo é geralmente 
impossível ou impraticável
Uma pergunta importante neste cenário
Como criar um conjunto de casos de teste que seja:
● Finito e factível?
● Capaz de revelar o maior número de falhas perceptíveis?
● Capaz de revelar as falhas mais críticas ou relevantes do software?
Esta pergunta esconde algumas outras:
● Como selecionar cenários/dados para criar bons casos de teste?
● Quantos testes são necessários para testar um software ou parte dele?
● Como saber se os testes criados são suficientes? 
Técnicas e critérios de teste
Um bom caso de teste é aquele que tem uma alta probabilidade de revelar uma 
falha ainda não descoberta
Portanto, técnicas e critérios de teste foram propostos para orientar o testador na 
tarefa de derivar os casos de teste com base nos artefatos do projeto 
(especificação, código, modelos, etc):
● Teste Adhoc
● Teste Exploratório
● Teste Funcional ou Caixa-Preta
● Teste Estrutural ou Caixa-Branca
● Teste Baseado em Erros
Critérios de teste
Definem requisitos de teste que devem ser satisfeitos pelos casos de 
teste
Um critério é satisfeito somente quando todos os requisitos que ele define 
são satisfeitos
Ajudam a responder às questões:
● Como selecionar valores de entrada para criar bons casos de teste?
● Quantos casos de teste devem ser criados?
● Quando parar de testar?
Teste funcional ou caixa-preta (aula anterior)
Teste estrutural ou teste caixa-branca
Técnica de teste baseada em erros
Os requisitos de teste são derivados a partir dos erros mais freqüentes cometidos 
durante o processo de desenvolvimento do software
Critério mais conhecido:
● Teste de Mutação (Análise de Mutantes, Mutação de interface)
Teste de Mutação
Hipótese do Programador Competente
● Programadores experientes escrevem programas corretos ou muito próximos 
do correto.
Efeito de Acoplamento
● Casos de teste capazes de revelar erros simples são tão sensíveis que, 
implicitamente, também são capazes de revelar erros mais complexos.
Teste de Mutação
● Consiste em introduzir pequenas mudanças no programa sob teste e 
observar o comportamento dos casos de teste existentes
● Isto vai avaliar a qualidade dos casos de teste existentes, ou seja, se ele é 
capaz de revelar falhas a partir de defeitos introduzidos artificialmente
Teste de Mutação
● Considere um programa P que, em teoria, está correto
P
Teste de Mutação
● O que acontece com P se uma mudança for introduzida?
P Mudanças P’
Teste de Mutação
● O que acontece com P se uma mudança for introduzida? 
○ P’ é uma versão defeituosa de P
P Mudanças P’
Teste de Mutação
● O que acontece com P se uma mudança for introduzida? 
○ P’ é uma versão defeituosa de P
○ P’ é uma versão equivalente de P
P Mudanças P’
Teste de Mutação
● Como descobrir?
P Mudanças P’
Teste de Mutação
● Como descobrir?
P Mudanças P’
T
Teste de Mutação
● Como descobrir?
P Mudanças P’
T
Resultados
Teste de Mutação
● Como descobrir?
P Mudanças P’
TT
Resultados
Teste de Mutação
● Como descobrir?
P Mudanças P’
TT
Resultados Resultados
Teste de Mutação
● Como descobrir?
P Mudanças P’
TT
Resultados Resultadoscomparar
Teste de Mutação
● Como descobrir?
P Mudanças P’
TT
Resultados Resultados
Resultados iguais
Programas equivalentes?
Teste de Mutação
● Como descobrir?
P Mudanças P’
TT
Resultados Resultados
Resultados diferentes
Defeito introduzido
Teste de Mutação
Processo para avaliar e aperfeiçoar casos de teste com base no teste de mutação
1. Geração de Mutantes
2. Execução do Programa (com casos de teste)
3. Execução dos Mutantes (com casos de teste)
4. Análise dos mutantes vivos
1 - Geração de Mutantes
Para modelar os desvios sintáticos mais comuns, operadores de mutação são 
aplicados a um programa, transformando-o em programas similares: mutantes
P
1 - Geração de Mutantes
Para modelar os desvios sintáticos mais comuns, operadores de mutação são 
aplicados a um programa, transformando-o em programas similares: mutantes
P Operadores 
de Mutação
1 - Geração de Mutantes
Para modelar os desvios sintáticos mais comuns, operadores de mutação são 
aplicados a um programa, transformando-o em programas similares: mutantes
P Operadores 
de Mutação
P1 P2 P3
P4 ... Pn
1 - Geração de Mutantes
Operadores de Mutação
- Limites de condicionais
- Incrementos
- Retornos falsos/verdadeiros/nulos
- Negação
- Substituição de constantes
- ...
Exemplo: https://pitest.org/quickstart/mutators/
1 - Geração de Mutantes
Operadores de Mutação
- Limites de condicionais
- Incrementos
- Retornos falsos/verdadeiros/nulos
- Negação
- Substituição de constantes
- ...
Exemplo: https://pitest.org/quickstart/mutators/
1 - Geração de Mutantes
Seleção dos operadores de mutação
- São dependentes de linguagem de programação
- Abrangentes
- Capazes de modelar a maior parte dos erros
- Pequena cardinalidade
- Problemas de custo
- Quanto maior o número de operadores utilizados, maior o número de mutantes gerados
1 - Geração de Mutantes
2 - Execução do Programa
O programa original é executado contra os casos de teste existentes
Idealmente, todos os casos de teste devem passar, indicando que o programa 
sob teste está “correto”
3 - Execução dos Mutantes
Os mutantes gerados são executados contra os casos de teste existentes
M1 M2 M3 M4 M5 M6 M7
3 - Execução dos Mutantes
Os mutantes gerados são executados contra os casos de teste existentes
M1 M2 M3 M4 M5 M6 M7
T T T T T T T
3 - Execução dos Mutantes
Os mutantes gerados são executados contra os casos de teste existentes
M1 M2 M3 M4 M5 M6 M7
T T T T T T T
3 - Execução dos Mutantes
Os mutantes gerados são executados contra os casos de teste existentes
M1 M2 M3 M4 M5 M6 M7
T T T T T T T
Morto Morto Morto MortoVivo Vivo Vivo
3 - Execução dos Mutantes
Os mutantes gerados são executados contra os casos de teste existentes
M1 M2 M3 M4 M5 M6 M7
T T T T T T T
Morto Morto Morto MortoVivo Vivo Vivo
Defeitos possivelmente inseridos pelas mutações 
não foram detectados pelos casos de teste!
4 - Análise dos Mutantes Vivos
Identificar a quantidade de mutantes mortos e vivos
Identificar os mutantes equivalentes
Calcular o score de mutação: 
SM(P,T) = MM(P,T) / (M(P) - ME(P))
- SM = Score de Mutação
- MM = Número de Mutantes Mortos
- M(P) = Número de Mutantes Gerados
- ME = Número de Mutantes Equivalentes
4 - Análise dos Mutantes Vivos
Quanto maior o score de mutação, melhor
O objetivo é chegar ao score = 1 (100% de mutantes mortos)
Aperfeiçoar os casos de teste para aumentar o score de mutação
3 - Execução dos Mutantes
Execução dos casos de testes aperfeiçoados
M1 M2 M3 M4 M5 M6 M7
T’ T’ T’ T’ T’ T’ T’
3 - Execução dos Mutantes
Execução dos casos de testes aperfeiçoados
M1 M2 M3 M4 M5 M6 M7
T’ T’ T’ T’ T’ T’ T’
Morto Morto Morto MortoMorto Morto Vivo
4 - Análise dos Mutantes Vivos
SM(P,T) = MM(P,T) / (M(P) - ME(P))
- SM = Score de Mutação
- M = 7
- MM = Mutantes Mortos (6)
- ME = Mutantes Equivalentes (0)
SM = 6/(7-0)
SM = 0,86
3 - Execuçãodos Mutantes
Execução dos casos de testes aperfeiçoados
M1 M2 M3 M4 M5 M6 M7
T’ T’ T’ T’ T’ T’ T’
Morto Morto Morto MortoMorto Morto Vivo
Equivalente
4 - Análise dos Mutantes Vivos
SM(P,T) = MM(P,T) / (M(P) - ME(P))
- SM = Score de Mutação
- M = 7
- MM = Mutantes Mortos (6)
- ME = Mutantes Equivalentes (1)
SM = 6/(7-1)
SM = 1
Teste de Mutação
● 100% de cobertura estrutural não garante a efetividade do conjunto de casos 
de teste na detecção de defeitos
● O teste de mutação leva o testador a aperfeiçoar os casos de testes de tal 
forma que os defeitos inseridos resultem em falhas nos casos de teste
● Desta forma, a capacidade de detecção de falhas dos casos de teste 
aumenta, que é o objetivo final da atividade de teste de software
Exemplo
O bom e velho método para classificar um Triângulo
Exemplo
O bom e velho método para classificar um Triângulo: 
Exemplo
O bom e velho método para classificar um Triângulo: 
Arquivo: 
ExemploMutanteTriangulo.pdf
https://drive.google.com/file/d/1yxTAoQLiy6TPu1I7NUtsMFCI-1KLaTDb/view?usp=sharing
Ferramenta (Java): PITEST
https://pitest.org/
https://pitest.org/quickstart/maven/
Ferramenta (Java): PITEST
Ferramenta (Java): PITEST
Ferramenta (Java): PITEST
Ferramenta (Java): PITEST
ACH 2006
Engenharia de Sistemas de Informação I
Prof. Marcelo Medeiros Eler
marceloeler@usp.br 
Escola de Artes, Ciências e Humanidades - Universidade de São Paulo
Aula 18 - Teste de Software:
Análise de Mutantes
mailto:marceloeler@usp.br

Mais conteúdos dessa disciplina