Você está na página 1de 79

Introdução ao

Teste de Software

Ricardo A. Ramos

[Baseado na apresentação do LABS –ICMC-USP -> http://www.labes.icmc.usp.br]


Organização

 Introdução
 Teste de Software
 Terminologia e Conceitos Básicos
 Técnicas e Critérios de Teste

 Automatização da Atividade de Teste

 Estudos Empíricos

 Perspectivas

Introdução ao Teste de Software 2


Introdução

 Qualidade de Software
Conformidade com requisitos funcionais
e de desempenho, padrões de desenvolvimento
documentados e características
implícitas esperadas de todo software
profissionalmente desenvolvido.

 Corretitude
 Confiabilidade
 Testabilidade

Introdução ao Teste de Software 3


Introdução

 Garantia de Qualidade de Software


 Conjunto de atividades técnicas aplicadas
durante todo o processo de desenvolvimento
 Objetivo
 Garantirque tanto o processo de desenvolvimento
quanto o produto de software atinjam os níveis de
qualidade especificados
 VV&T – Verificação, Validação e Teste

Introdução ao Teste de Software 4


Introdução

 Validação: Assegurar que o produto final corresponda


aos requisitos do usuário
Estamos construindo o produto certo?

 Verificação: Assegurar consistência, completitude e


corretitude do produto em cada fase e entre fases
consecutivas do ciclo de vida do software
Estamos construindo corretamente o produto?

 Teste: Examina o comportamento do produto por meio


de sua execução

Introdução ao Teste de Software 5


Terminologia

 Defeito Erro Falha


 Defeito: deficiência mecânica ou algorítmica
que, se ativada, pode levar a uma falha
 Erro: item de informação ou estado de
execução inconsistente
 Falha: evento notável em que o sistema
viola suas especificações

Introdução ao Teste de Software 6


Defeitos no Processo de
Desenvolvimento

 A maior parte é de origem humana


 São gerados na comunicação e na
transformação de informações
 Continuam presentes nos diversos produtos de
software produzidos e liberados (10 defeitos a
cada 1000 linhas de código)
 A maioria encontra-se em partes do código
raramente executadas

Introdução ao Teste de Software 7


Defeitos no Processo de
Desenvolvimento

 Principal causa: tradução incorreta de


informações
 Quanto antes a presença do defeito for
revelada, menor o custo de correção do
defeito e maior a probabilidade de corrigi-lo
corretamente
 Solução: introduzir atividades de VV&T ao
longo de todo o ciclo de desenvolvimento

Introdução ao Teste de Software 8


Teste e Depuração

 Teste
Processo de executacao de um programa com
o objetivo de revelar a presença de erros.
Contribuem para aumentar a confiança de que o
software desempenha as funções especificadas.

 Depuração
Conseqüência não previsível do teste.
Após revelada a presença do erro, este
deve ser encontrado e corrigido.
Introdução ao Teste de Software 9
Teste de Software

 Fundamental em todos os ramos de


engenharia
 Software: produto da Engenharia de Software
 Atividade essencial para ascensão ao nível 3
do Modelo CMM/SEI
 Atividade relevante para avaliação da
característica funcionalidade
(ISO 9126,14598-5)

Introdução ao Teste de Software 10


Teste de Software

Objetivo: revelar a presença de erros

D P
X

? T

 Inexistência de erro:
 Software é de alta qualidade?
 Conjunto de casos de teste T é de baixa qualidade?

Introdução ao Teste de Software 11


Teste de Software

 Defeitos e erros não revelados


 Falhas se manifestam durante a utilização
pelos usuários
 Erros devem ser corrigidos durante a
manutenção
 Alto custo

Introdução ao Teste de Software 12


Teste de Software

 Falhas graves
 Qualidade e confiabilidade suspeitas
 Modificação do projeto
 Novos testes
 Erros de fácil correção
 Funções aparentemente funcionam bem
 Qualidade e confiabilidade aceitáveis
 Testes inadequados para revelar a presença de
erros graves
 Novos testes

Introdução ao Teste de Software 13


Teste de Software

 Limitações
 Não existe um algoritmo de teste de propósito
geral para provar a corretitude de um programa
 Em geral, é indecidível se dois caminhos de um
mesmo programa ou de diferentes programas
computam a mesma função
 É indecidível se existe um dado de entrada que
leve à execução de um dado caminho de um
programa; isto é, é indecidível se um dado
caminho é executável ou não

Introdução ao Teste de Software 14


Teste de Software

Configuração
de Software Resultados
de Teste
Avaliação Erros
Atividades de
Teste Depuração
Dados
da Taxa
de Erros
Configuração
de Teste Resultados Modelo de
Esperados Confiabilidade Correções

Confiabilidade
Prevista
Introdução ao Teste de Software 15
Teste de Software

 Fases de Teste
 Teste de Unidade
 Identificar erros de lógica e de implementação
em cada módulo do software, separadamente
 Teste de Integração
 Identificar erros associados às interfaces entre os
módulos do software
 Teste de Sistema
 Verificar se as funções estão de acordo com a
especificação e se todos os elementos do sistema
combinam-se adequadamente

Introdução ao Teste de Software 16


Teste de Software

 Etapas do Teste
 Planejamento
 Projeto de casos de teste
 Execução do programa com os casos de teste
 Análise de resultados

Introdução ao Teste de Software 17


Teste de Software

 Caso de teste
 Especificação de uma entrada para o programa e
a correspondente saída esperada
 Entrada: conjunto de dados necessários para uma
execução do programa
 Saída esperada: resultado de uma execução do
programa
 Oráculo
 Um bom caso de teste tem alta probabilidade de
revelar um erro ainda não descoberto

Introdução ao Teste de Software 18


Teste de Software

 Projeto de casos de teste


 O projeto de casos de teste pode ser tão difícil
quanto o projeto do próprio produto a ser testado
 Poucos programadores/analistas gostam de teste
e, menos ainda, do projeto de casos de teste
 O projeto de casos de teste é um dos melhores
mecanismos para a prevenção de defeitos
 O projeto de casos de teste é tão eficaz em
identificar erros quanto a execução dos casos de
teste projetados

Introdução ao Teste de Software 19


Teste de Software

 Maneira sistemática e planejada para


conduzir os testes
 Técnicas e Critérios de Teste
 Conjunto de Casos de Teste T
 Características desejáveis
 Deve ser finito
 Custo de aplicação deve ser razoável

Introdução ao Teste de Software 20


Técnicas e Critérios de Teste

 Critério de Teste C
 Objetivo
 Obter, de maneira sistemática, um conjunto T de
casos de teste que seja efetivo quanto à meta principal
de teste (revelar a presença de erros no programa)
 Propriedades
i) incluir todos os desvios de fluxo de execução
ii) incluir pelo menos um uso de todo resultado
computacional
iii) T mínimo e finito

Introdução ao Teste de Software 21


Técnicas e Critérios de Teste

 Critério de Seleção de Casos de Teste


 Procedimento para escolher casos de teste
para o teste de P

 Critério de Adequação
 Predicado para avaliar T no teste de P
 T é C-adequado ⇔ todo elemento requerido
por C é exercitado por pelo menos por
um t, t ∈ T

Introdução ao Teste de Software 22


Técnicas e Critérios de Teste

 Técnica Funcional
 Requisitos funcionais do software
 Critério Particionamento em Classes de Equivalência
 Técnica Estrutural
 Estrutura interna do programa
 Critérios Baseados em Fluxo de Dados
 Técnica Baseada em Erros
 Errosmais freqüentes cometidos durante o
processo de desenvolvimento de software
 Critério Análise de Mutantes

Introdução ao Teste de Software 23


Automatização da Atividade de Teste

 Ferramentas de Teste
Para a aplicação efetiva de um critério de teste faz-se
necessário o uso de ferramentas automatizadas que
apóiem a aplicação desse critério.

 Contribuem para reduzir as falhas produzidas pela


intervenção humana
 Aumento da qualidade e produtividade da atividade de
teste
 Aumento da confiabilidade do software
 Facilitam a condução de estudos comparativos
entre critérios

Introdução ao Teste de Software 24


Automatização da Atividade de Teste

 Critérios Estruturais: Fluxo de Dados


 Asset,Proteste – programas em Pascal
 xSuds – programas em C, C++ e Cobol

 Poke-Tool – programas em C, Cobol e Fortran

 Critérios Baseados em Mutação


 Mothra – programas em Fortran
 Proteum – programas em C (unidade)

 Proteum/IM – programas em C (integração)

 Proteum/RS – especificações

Introdução ao Teste de Software 25


Automatização da Atividade de Teste

 xSuds (Software Understanding &


Diagnosis System)
 xAtac: teste
 xSlice: depuração

 xVue: manutenção

 xProf: melhoria de performance

 xDiff: comparação de código

Estado da Arte X Estado da Prática

Introdução ao Teste de Software 26


Técnica Funcional (Caixa Preta)

 Baseia-se na especificação do software


para derivar os requisitos de teste
 Aborda o software de um ponto de vista
macroscópico
 Envolve dois passos principais:
 Identificar as funções que o software deve realizar
(especificação dos requisitos)
 Criar casos de teste capazes de checar se essas
funções estão sendo executadas corretamente

Introdução ao Teste de Software 27


Técnica Funcional

 Problema
 Dificuldade em quantificar a atividade de teste:
não se pode garantir que partes essenciais ou
críticas do software foram executadas
 Dificuldade de automatização
 Critérios da Técnica Funcional
 Particionamento em Classes de Equivalência
 Análise do Valor Limite
 Grafo de Causa-Efeito

Introdução ao Teste de Software 28


Técnica Funcional: Exemplo

 Particionamento em Classes de
Equivalência
 Divideo domínio de entrada do programa em
classes de dados (classes de equivalências)
 Os dados de teste são derivados a partir das classes
de equivalência

Introdução ao Teste de Software 29


Técnica Funcional: Exemplo

 Passos
 Identificar classes de equivalência
 Condições de entrada
 Classes válidas e inválidas
 Definir os casos de teste
 Enumeram-se as classes de equivalência
 Casos de teste para as classes válidas
 Casos de teste para as classes inválidas

Introdução ao Teste de Software 30


Técnica Funcional: Exemplo

 Especificação do programa Identifier


O programa deve determinar se um identificador é válido ou não
em Silly Pascal (uma variante do Pascal). Um identificador
válido deve começar com uma letra e conter apenas letras ou
dígitos. Além disso, deve ter no mínimo um caractere e no
máximo seis caracteres de comprimento.

 Exemplo
abc12 (válido); 1soma (inválido);
cont*1 (inválido); a123456 (inválido)

Introdução ao Teste de Software 31


Técnica Funcional: Exemplo

 Classes de equivalência
Condições de Entrada Classes Válidas Classes Inválidas
1≤t≤6 t>6
Tamanho t do identificador (1) (2)
Sim Não
Primeiro caractere c é uma letra
(3) (4)
Sim Não
Só contém caracteres válidos (5) (6)

 Exemplo de Conjunto de Casos de Teste


 T0 = {(a1,Válido), (2B3, Inválido), (Z-12, Inválido), (A1b2C3d, Inválido)}
(1, 3, 5) (4) (6) (2)

Introdução ao Teste de Software 32


Técnica Funcional: Análise de valor-limite

 Observações da prática profissional mostram que


grande parte dos erros ocorre nas fronteiras do
domínio de entrada
 Completa a técnica de classes de equivalência
 Casos de teste são selecionados nas bordas da
classe.
 Também deriva casos de testes para a saída.

Introdução ao Teste de Software 33


Técnica Funcional: Análise de valor-limite

 Se os limites da condição de entrada forem a e b, projetar


c.t. para os valores imediatamente acima e abaixo de a e b.
 Se uma condição de entrada especifica vários valores ,
projetar casos de teste para os valores imediatamente
acima e abaixo do valor mínimo e do valor máximo.
 Aplicar as mesmas diretrizes para os valores de saída.
 Se as estruturas de dados internas do programa têm limites
especificados, projeto um caso de teste para exercitar a
estrutura de dados no seu limite.

Introdução ao Teste de Software 34


Técnica Funcional: Exemplo

 Classes de equivalência

Condições de Entrada Classes Válidas Classes Inválidas


t =1, 6 t =0, 7
Tamanho t do identificador (1) (2)
-- --
Primeiro caractere c é uma letra

-- --
Só contém caracteres válidos

 Exemplo de Conjunto de Casos de Teste


 T0 = { (a, Válido), (Abcdef, Válido), ( , Inválido), (abcdefg, Inválido}
(1) (1) (2) (2)

Introdução ao Teste de Software 35


Técnica Estrutural (Caixa Branca)

 Baseada no conhecimento da estrutura


interna (implementação) do programa
 Teste dos detalhes procedimentais

 A maioria dos critérios dessa técnica utiliza


uma representação de programa
conhecida como grafo de programa ou
grafo de fluxo de controle

Introdução ao Teste de Software 36


Técnica Estrutural

 Grafo de Programa
 Nós: blocos “indivisíveis”
 Não existe desvio para o meio do bloco
 Uma vez que o primeiro comando do bloco é
executado, os demais comandos são
executados seqüencialmente
 Arestas ou Arcos: representam o fluxo de
controle entre os nós

Introdução ao Teste de Software 37


Identifier.c (função main)
/* 01 */ {
/* 01 */ char achar;
/* 01 */ int length, valid_id;
/* 01 */ length = 0;
/* 01 */ printf (“Identificador: “);
/* 01 */ achar = fgetc (stdin);
/* 01 */ valid_id = valid_s(achar);
/* 01 */ if (valid_id)
/* 02 */ length = 1;
/* 03 */ achar = fgetc (stdin);
/* 04 */ while (achar != '\n')
/* 05 */ {
/* 05 */ if (!(valid_f(achar)))
/* 06 */ valid_id = 0;
/* 07 */ length++;
/* 07 */ achar = fgetc (stdin);
/* 07 */ }
/* 08 */ if (valid_id && (length >= 1) && (length < 6) )
/* 09 */ printf (“Valido\n“);
/* 10 */ else
/* 10 */ printf (“Invalido\n“);
/* 11 */ }

Introdução ao Teste de Software 38


Técnica Estrutural

Grafo de Programa
 Detalhes considerados
 nó
 arco
 caminho
 simples (2,3,4,5,6,7)
 completo (1,2,3,4,5,7,4,8,9,11)
 fluxo de controle
Grafo de Programa do identifier
Gerado pela View-Graph

Introdução ao Teste de Software 39


Identifier.c (função main)
/* 01 */ {
/* 01 */ char achar;
/* 01 */ int length, valid_id; Caminho
/* 01 */ length = 0;
/* 01 */ printf (“Identificador: “);
Não-Executável
/* 01 */ achar = fgetc (stdin);
/* 01 */ valid_id = valid_s(achar);
/* 01 */ if (valid_id)
/* 02 */ length = 1;
/* 03 */ achar = fgetc (stdin);
/* 04 */ while (achar != '\n')
/* 05 */ {
/* 05 */ if (!(valid_f(achar)))
Identifier=2
/* 06 */ valid_id = 0; (1,3,4,8,9,11)
/* 07 */ length++;
/* 07 */ achar = fgetc (stdin);
/* 07 */ }
/* 08 */ if (valid_id && (length >= 1) && (length < 6) )
/* 09 */ printf (“Valido\n“);
/* 10 */ else
/* 10 */ printf (“Invalido\n“);
/* 11 */ }

Introdução ao Teste de Software 40


Técnica Estrutural

 Critérios da Técnica Estrutural


 Baseados em Fluxo de Controle
 Todos-Nós, Todas-Arestas e Todos-Caminhos

 Baseados em Fluxo de Dados


 Critérios de Rapps e Weyuker
 Todas-Defs, Todos-Usos, Todos-P-Usos e outros

 Critérios Potenciais-Usos (Maldonado)


 Todos-Potenciais-Usos, Todos-Potenciais-Usos/DU e outros

 Baseados em Complexidade
 Critério de McCabe

Introdução ao Teste de Software 41


Técnica Estrutural

 Critérios Baseados em
Fluxo de Controle
 Todos-Nós
1,2,3,4,5,6,7,8,9,10,11
 Todos-Arcos
arcos primitivos
<1,2>,<1,3>,<5,6>,<5,7>,
<8,9>,<8,10>
 Todos-Caminhos
Grafo de Programa do identifier
Gerado pela View-Graph

Introdução ao Teste de Software 42


Técnica Estrutural

 Critérios Baseados em Fluxo de Dados


 Rapps e Weyuker
Grafo Def-Uso: Grafo de Programa + Definição e Uso de Variáveis

 Definição
 Atribuição de um valor a uma variável (a = 1)
 Uso
 Predicativo: a variável é utilizada em uma condição
if (a > 0)

 Computacional: a variável é utilizada em uma computação


b=a+1

Introdução ao Teste de Software 43


d = {length, valid_id, achar} up = {valid_id}
uc = {achar} 1
up = {valid_id} 2 d = {length}

3
d = {achar}

4
up = {achar} up = {achar}

5 up = {achar}

up = {achar} 6 d = {valid_id}

7
d = {achar, length}
uc = {length}

up = {valid_id, length} up = {valid_id, length}


8
d = definição
10 9
up = uso predicativo
11 uc = uso computacional
Introdução ao Teste de Software 44
Técnica Estrutural

 Critérios Baseados em Fluxo de Dados


 Rapps e Weyuker
 Todas-Definições

Requer que cada definição de variável seja exercitada


pelo menos uma vez, não importa se por um
c-uso ou por um p-uso.

Introdução ao Teste de Software 45


(1 3 4 5 7 4 8 10 11)
Rapps e Weyuker
Todas-Definições
d = {length, valid_id, achar}
uc = {achar} 1 up = {valid_id} Definição de length no nó 1
up = {valid_id} 2 d = {length}  (1,7, length)
3 × (1,(8,9), length)
d = {achar}
(1,(8,10), length)
4
up = {achar}
up = {achar}
5
up = {achar} 6 d = {valid_id}
7
d = {achar, length} up = {achar}
uc = {length}
up = {valid_id, length} 8 up = {valid_id, length}
10 9
11 d = definição
up = uso predicativo
Grafo Def-Uso do identifier
uc = uso computacional

Introdução ao Teste de Software 46


Técnica Estrutural

 Critérios Baseados em Fluxo de Dados


 Rapps e Weyuker
 Todos-Usos

Requer que todas as associações entre uma definição de


variável e seus subseqüentes usos sejam exercitadas
pelos casos de teste, por meio de pelo menos um
caminho livre de definição.

Introdução ao Teste de Software 47


(1 3 4 5 7 4 8 10 11)
Rapps e Weyuker
(1 3 4 8 10 11) Todos-Usos
d = {length, valid_id, achar}
uc = {achar} 1 up = {valid_id} Definição de length no nó 1
up = {valid_id} 2 d = {length}  (1,7, length)
3 × (1,(8,9), length)
d = {achar}
 (1,(8,10), length)
4
up = {achar}
up = {achar}
5
up = {achar} 6 d = {valid_id}
7
d = {achar, length} up = {achar}
uc = {length}
up = {valid_id, length} 8 up = {valid_id, length}
10 9
11 d = definição
up = uso predicativo
Grafo Def-Uso do identifier
uc = uso computacional

Introdução ao Teste de Software 48


Técnicas e Critérios de Teste

Todos-Caminhos

Todos-Caminhos
Todos-Potenciais-Du-Caminhos

Todos-Du-Caminhos
Todos-Du-Caminhos Todos-Potenciais-Usos/Du

Todos-Usos
Todos-Potenciais-Usos

Todos-C-Usos/ Todos-P-Usos/
Alguns-P-Usos Alguns-C-Usos Todos-Usos

Todas-Defs Todos-P-Usos Todos-C-Usos/ Todos-P-Usos/


Alguns-P-Usos Alguns-C-Usos

Todos-Arcos Todas-Defs Todos-P-Usos

Todos-Nós Todos-Arcos

Introdução ao Teste de Software Todos-Nós


Técnica Estrutural

 Ferramenta PokeTool
 Critérios Potenciais-Usos
 Critérios de Rapps e Weyuker
 Outros Critérios Estruturais
 Todos-Nós, Todos-Arcos
 Linguagem C
 Outras Características
 Importação de casos de teste
 Inserção e remoção de casos de teste dinamicamente
 Casos de teste podem ser habilitados ou desabilitados
 Geração de relatórios

Introdução ao Teste de Software 50


Técnica Estrutural

 PokeTool: Interface Gráfica

Introdução ao Teste de Software 51


Técnica Estrutural

 PokeTool: Criando uma Sessão de Teste

Introdução ao Teste de Software 52


Técnica Estrutural

 PokeTool: Grafo de Programa

Introdução ao Teste de Software 53


Técnica Estrutural

 PokeTool: Elementos Requeridos

Introdução ao Teste de Software 54


Técnica Estrutural

 Status após T0

 T0 = {(a1, Válido), (2B3, Inválido), (Z-12, Inválido), (A1b2C3d, Inválido)}

Introdução ao Teste de Software 55


Técnica Estrutural

 PokeTool: Relatórios de Teste

Introdução ao Teste de Software 56


Técnica Estrutural

 Status após T1 (a) e T2 (b)

(a) (b)
 T1 = T0 ∪ {(1#, Inválido), (%, Inválido), (c, Válido)}
 T2 = T1 ∪ {(#-%, Inválido)}

Introdução ao Teste de Software 57


Técnica 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érios da Técnica Baseada em Erros
 Semeadura de Erros
 Teste de Mutação
 Análise de Mutantes (unidade)
 Mutação de Interface (integração)

Introdução ao Teste de Software 58


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.

Introdução ao Teste de Software 59


Teste de Mutação

S(t) = P(t) ∧ P(t) ≠ Mi(t) ⇒


P não contém o erro modelado por Mi(t)

M01 M02 M... M... M... M... M...

M... M... M... M... M... M... M...

M... M... M... M... M... M...

M... M... M...


P M... M... M...
Φ(P)

M... M... M... M... M... M... M...

M... M... M... M... M... M... Mn

Introdução ao Teste de Software 60


Teste de Mutação

 Status após a execução de P e Mi

Mutantes Mortos M01 M02 M... M... M... M... M...


∃ t / P(t) ≠ Mi(t) M... M... M... M... M... M... M...

M... M... M... M... M... M...

Mutantes Vivos M... M... M...


P M... M... M...
Φ(P)
∀ t ∈ T ⇒ P(t) = Mi(t) M... M... M... M... M... M... M...

M... M... M... M... M... M... Mn

Mutantes Mutantes
Não-Equivalentes Equivalentes

Introdução ao Teste de Software 61


Teste de Mutação

M01 M02 M03 M04 M05 M06


op1

op2 M07 M08 M09 M10 M11

P op3
M12 M13 M14 M15 M16
...

opn Não-Equivalentes Equivalentes

M17 M18 M19 M20 M21 M22

Morto Vivos
Introdução ao Teste de Software 62
Análise de Mutantes

 Passos da Análise de Mutantes


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.

P1

P2
Operadores P3
P de Mutação

...
Programa
P4
em Teste Pn

Introdução ao Teste de Software


Mutantes 63
Análise de Mutantes

 Seleção dos operadores de mutação


 Abrangente
 Capaz 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

Introdução ao Teste de Software 64


Análise de Mutantes

 Exemplo de Mutantes
Mutante Gerado pelo Operador OLAN

if (valid_id * (length >= 1) && (length < 6) )


printf ("Valido\n");
else
printf ("Invalido\n");

Mutante Gerado pelo Operador ORRN

if (valid_id && (length >= 1) && (length <= 6) )


printf ("Valido\n");
else
printf ("Invalido\n");

Introdução ao Teste de Software 65


Análise de Mutantes

 Passos da Análise de Mutantes


2 - Execução do Programa
 Execução do programa com os casos de teste
3 - Execução dos Mutantes
 Execução dos mutantes com os casos de teste
 Mutante morto
 Mutante vivo

4 - Análise dos Mutantes Vivos


 Mutante equivalente
 Inclusão de novos casos de teste
DM(P,T)
Escore de mutação: ms(P,T) =
M(P) - EM(P)
Introdução ao Teste de Software 66
Análise de Mutantes

 Ferramenta Proteum
 Critério Análise de Mutantes
 Linguagem C
 Outras Características
 Importação de casos de teste
 Inserção e remoção de casos de teste dinamicamente
 Casos de teste podem ser habilitados ou desabilitados
 Seleção dos operadores a serem utilizados
 71 operadores: comandos, operadores, variáveis e
constantes
 Geração de relatórios

Introdução ao Teste de Software 67


Análise de Mutantes

 Ferramenta Proteum
 Interface gráfica
 Mais fácil
 Constante interação com o testador
 Scripts
 Possibilitam a condução de uma sessão de teste de
modo programado
 Domínio dos conceitos de mutação e dos programas
que compõem as ferramentas

Introdução ao Teste de Software 68


Análise de Mutantes

 Proteum: Interface Gráfica

Introdução ao Teste de Software 69


Análise de Mutantes

 Proteum: Criando uma Sessão de Teste

Introdução ao Teste de Software 70


Análise de Mutantes

 Proteum: Gerando Mutantes

Introdução ao Teste de Software 71


Análise de Mutantes

 Status após T0 (a) e T2 (b)

(a) (b)
 T0 = { (a1, Válido), (2B3, Inválido), (Z-12, Inválido), (A1b2C3d, Inválido)}
 T1 = T0 ∪ {(1#, Inválido), (%, Inválido), (c, Válido)}
 T2 = T1 ∪ {(#-%, Inválido)}
Introdução ao Teste de Software 72
Análise de Mutantes

 Proteum: Visualização de Mutantes

Introdução ao Teste de Software 73


Análise de Mutantes

 Status após T3 (a) e T4 (b)

(a) (b)
 T3 = T2 ∪ {(zzz, Válido), (aA, Válido), (A1234, Válido), (ZZZ, Válido),
(AAA, Válido), (aa09, Válido), ([, Inválido), ({, Inválido),
(x/, Inválido), (x:, Inválido), (x18, Válido), (x[[, Inválido), (x{{, Inválido)}
 T4 = T3 ∪ {(@, Inválido), (`, Inválido), (x@, Inválido), (x`, Inválido)}
Introdução ao Teste de Software 74
Análise de Mutantes

 Mutantes Vivos
Mutante Gerado pelo Operador VTWD

if (valid_id && (length >= 1) && (PRED(length) < 6) )


printf ("Valido\n");
else
printf ("Invalido\n");

Mutante Gerado pelo Operador ORRN

if (valid_id && (length >= 1) && (length <= 6) )


printf ("Valido\n");
else
printf ("Invalido\n");

t = {(ABCDEF, Válido)}
Saída obtida = Inválido
Introdução ao Teste de Software 75
Identifier.c (função main)
Versão Corrigida
/* 01 */ {
/* 01 */ char achar;
/* 01 */ int length, valid_id;
/* 01 */ length = 0;
/* 01 */ printf ("Digite um possível identificador\n");
/* 01 */ printf ("seguido por <ENTER>: ");
/* 01 */ achar = fgetc (stdin);
/* 01 */ valid_id = valid_s(achar);
/* 01 */ if (valid_id)
/* 02 */ length = 1;
/* 03 */ achar = fgetc (stdin);
/* 04 */ while (achar != '\n')
/* 05 */ {
/* 05 */ if (!(valid_f(achar)))
/* 06 */ valid_id = 0;
/* 07 */ length++;
/* 07 */ achar = fgetc (stdin);
/* 07 */ }
/* 08 */ if (valid_id && (length >= 1) && (length <= 6) )
/* 09 */ printf ("Valido\n");
/* 10 */ else
/* 10 */ printf ("Invalido\n");
/* 11 */ } ao Teste de Software
Introdução 76
Análise de Mutantes

 Status após T5 no programa corrigido

 T5 = T4 ∪ {(ABCDEF, Válido)}

Introdução ao Teste de Software 77


Conclusões

 A atividade de teste é fundamental no


processo de desenvolvimento de software
 Qualidade do produto
 Alto custo da atividade de teste
 Desenvolvimento e aplicação de técnicas e
critérios de teste
 Desenvolvimento e utilização de
ferramentas de teste
 Estudos teóricos e empíricos para
comparar os diversos critérios

Introdução ao Teste de Software 78


Perspectivas

 Estratégias de Teste
 Teste de Integração
 Teste Orientado a Objeto
 Teste de Especificação
 Teste de Sistemas Reativos
 Ambiente Integrado para Teste, Depuração e
Manutenção de Software
 Teste de programas orientados a aspectos
 Teste com o apoio de orientação a aspectos

Introdução ao Teste de Software 79

Você também pode gostar