Professional Documents
Culture Documents
Teste funcional
Teste estrutural
Teste estrutural
Grafo de programa:
Grafo dirigido onde os nodos representam comandos e os arcos
representam o fluxo de execuo
Existe um arco de um nodo i para um nodo j se e somente se j pode
ser executado imediatamente aps i
Quais comandos representar?
Dependente do paradigma e da linguagem
Normalmente no se representam as declaraes de variveis porque no
correspondem a comandos executveis.
Teste estrutural
1.
2.
3.
4.
5.
6.
7.
8.
a = Convert.ToInt32(args[0]);
b = Convert.ToInt32 (args[1]);
while (this.F1(a)){
if (this.F2(b)){
a = b + 1;
}else b = a + 1;
}
c = a + b;
4
5
6
7
Teste estrutural
Anlise dinmica
Execuo monitorada do programa
Pode exigir instrumentao de cdigo
Abordagens:
Anlise de cobertura
Teste de fluxo de controle
Teste de fluxo de dados
Anlise de mutantes
Teste estrutural
Anlise dinmica:
Anlise de cobertura
Dado um conjunto de execues do programa, quanto do cdigo fonte foi
exercitado (coberto)?
Grafo de programa:
Define uma relao entre o caso de teste e a parte do programa
exercitada por ele.
Um caso de teste:
Corresponde a um caminho no grafo.
Corresponde a uma execuo completa: do nodo inicial at o final.
Fluxo de controle
Cada caso de teste corresponde a um caminho
no grafo.
Etapas:
Construir o grafo de programa.
Determinar os caminhos factveis.
Selecionar um conjunto de caminhos factveis
para teste.
Gerar as entradas e os resultados esperados para
os casos de teste correspondentes.
Fluxo de controle
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Caminhos possveis:
4-5-6-7-9-11-13
4-5-6-7-8-9-11-13
4-5-6-7-9-10-11-13
4-5-6-7-8-9-10-11-13
4-5-6-7-9-11-12-13
4-5-6-7-8-9-11-12-13
4-5-6-7-9-10-11-12-13
4-5-6-7-8-9-10-11-12-13
4
5
6
7
8
9
10
11
11
13
Fluxo de controle
Existem caminhos factveis.
Ex: caminhos 1,2,3 e 5.
Fluxo de controle
Objetivos do teste de fluxo de controle:
Exercitar um mnimo aceitvel de caminhos factveis.
O que determina o que um mnimo aceitvel so
as mtricas de cobertura:
Cobertura de comando
Cobertura de deciso
Cobertura de condio
Cobertura de condio/deciso
Cobertura de condio mltipla (variante: MC/DC)
Cobertura de repetio
Cobertura de comando
Definir casos de teste que executem todos os
comandos pelo menos uma vez (passa por todos
os nodos do grafo).
Mtrica: percentual de nodos cobertos.
Fcil de satisfazer:
Para o problema do tringulo bastam 3 casos de teste
(caminhos 2,3 e 5)
Cobertura de comando
1. a = Convert.ToInt32 (args[0]);
2. b = Convert.ToInt32t(args[1]);
3. while(a < 0){
4.
if (b < 0){
5.
b = b + 2;
}
7.
a = a + 1;
8. }
9. c = a + b;
-1
-1
3
4
Cobertura de deciso
Os testes devem cobrir cada sada possvel de
um nodo que tenha uma condio.
Mtrica: percentual de arcos cobertos.
Cobertura de deciso implica em cobertura de
comando, mas o inverso nem sempre
verdade.
Cobertura de deciso
1. a = Convert.ToInt32 (args[0]);
2. b = Convert.ToInt32t(args[1]);
3. while(a < 0){
4.
if (b < 0){
5.
b = b + 2;
}
7.
a = a + 1;
8. }
a
b
9. c = a + b;
-1
-1
-2
-1
3
4
Cobertura de condio
Para cada condio deve-se cobrir os dois
resultados possveis.
Ex: if ((A>0) or (B<10)) ...
Exemplos de casos de teste:
A = 3 e B = 20 (A verdade e B Falso)
A = 0 e B = 5 (A falso e B verdade)
Cobertura de condio/deciso:
Combinao de CC e CD
Teste de Software Prof. Bernardo
Copstein PUCRS, FACIN
1 (F)
0 (F)
1 (F)
-1 (V)
-3 (V)
0 (F)
-3 (V)
3
4
Cobertura de repetio
Gerar casos de teste de maneira que cada
repetio seja exercitada pelo menos k vezes.
Deve ser usada em combinao com a
cobertura de condio.
Pode-se aplicar tcnicas de valor limite nos
laos.
definio
Uso
items
6,7
Cobertura all-uses:
Varivel
caminho
3-4-5-6
3-4-5-6-7
3-4-5-6-8
3-4-5-6-7-11
4-5
Cobertura all-defs:
4-5-6
Varivel
caminho
4-5-6-7
4-5-6-8
3-4-5-6
i
4-5-6-7-11
4-5
i
8-5
8-5
8-5-6
8-5-6-7
8-5-6-8
8-5-6-7-11
4, 8
5,6,7,8
Anlise de mutantes
Avalia a capacidade de relevar defeitos de um
conjunto de casos de teste (no gera casos de
teste).
Consiste em produzir cpias do cdigo a ser
testado, injetando pequenas falhas nas cpias
(chamadas mutantes).
Uma suite de teste elimina (kill) um mutante
se consegue distinguir o comportamento do
mutante do comportamento do cdigo
original
Anlise de mutantes
1. a = Convert.ToInt32 (args[0]);
1. a = Convert.ToInt32 (args[0]);
2. b = Convert.ToInt32t(args[1]);
3. while(a < 0){
4. if (b < 0){
b = b + 2;
}
5.
a = a + 1;
8. }
9. c = a + b;
2. b = Convert.ToInt32t(args[1]);
3. while(a < 0){
4. if (b < 0){
b = b - 2;
}
5.
a = a + 1;
8. }
9. c = a + b;
C
(resultado)
-1
-1
-1
Anlise de mutantes
Operadores de mutao: