Fundamentos de Engenharia de SW
TÉCNICAS DE TESTE DE SOFTWARE
1
TESTE DE SOFTWARE
• GARANTIA DE QUALIDADE
– VERIFICAÇÃO E VALIDAÇÃO
• TESTE (última atividade de V & V do
desenvolvimento)
2
CICLO DE VIDA
Análise
Projeto
Codificação
Teste
Operação
3
Custo do Erro
Custo Relativo da Correção de Erros
10000
1000
100
10
1
Requisitos
Análise e Projeto
Código
Teste
Produção
4
UMA ESTRATÉGIA DE TESTE
•
•
•
•
Teste de unidade
Teste de integração
Teste de validação
Teste de sistema
5
TESTE DE SOFTWARE
• Questões psicológicas
– Definições
• ... demonstrar ausência de erros
• ... mostrar que o programa cumpre suas funções
corretamente.
• ... o programa faz o que ele é suposto fazer
6
TESTE DE SOFTWARE
• Questões psicológicas
– Definições
• ... demonstrar ausência de erros
• ... mostrar que o programa cumpre suas funções
corretamente.
• ... o programa faz o que ele é suposto fazer
• PROCESSO DE EXECUTAR UM PROGRAMA
COM A INTENÇÃO DE ACHAR ERROS
(conotação destrutiva)
7
TESTE DE SOFTWARE
• Questões psicológicas
– Teste bem (e mal) sucedido)
– Impossibilidade (prática) de detetar todos os erros
– Problematização da definição: ... faz o que é suposto
fazer.
8
TESTE DE SOFTWARE
• Questões econômicas
– A impossibilidade de se encontrar todos os erros.
• Nos testes caixa preta
• Nos testes caixa branca
– Dada a impossibilidade, quantos erros se deve
descobrir? Quanto se deve investir no teste?
– Maximizar o número de erros encontrados por um
número “finito” de casos de teste
9
TOTAL DE CAMINHOS
A
20 vezes
B
10
TOTAL DE CAMINHOS
A
B
520 + 519 + ... + 5 ~ 1014
11
TESTE DE SOFTWARE
• Testes de software (Myers):
– processo de executar um programa com o objetivo de encontrar
erros.
– bom caso de teste é aquele que tem uma alta probabilidade de
revelar um erro ainda não descoberto.
– teste bem sucedido é aquele que revela um erro ainda não
descoberto.
• Sucesso na atividade de teste:
– descobrir erros no software
• Teste de software:
– não mostra a ausência de bugs - somente sua presença.
12
TIPOS DE TESTE
• Caixa Preta
– baseado na especificação
– o testador não conhece o módulo “por dentro”, mas apenas sua
interface (o módulo é opaco)
– data driven
• Caixa Branca
– baseado na lógica interna
– o testador conhece o módulo “por dentro” (o módulo é
transparente)
– logic driven
13
TESTE DE CAIXA BRANCA
• Teste do caminho básico.
• Teste dos fluxos de dados.
• Teste dos laços.
14
TESTE DO CAMINHO BÁSICO
• O teste do caminho básico
– deriva uma medida da complexidade lógica do procedimento
– use essa medida para definir um conjunto básico de caminhos de
execução.
• Estes casos de teste
– Garantem a execução de cada instrução do programa (cada aresta
do grafo de fluxo) pelo menos uma vez
• Como obter uma medida da complexidade lógica do procedimento?
– A partir do grafo do fluxo (representação do fluxo de controle).
15
GRAFO DE FLUXO
If
Case
Sequence
While
Until
16
GRAFO DE FLUXO
1
2
3
6
4
7
8
5
9
10
11
17
GRAFO DE FLUXO
1
1
2,
3
2
4,
5
6
3
7
6
8
4
9
7
8
5
1
0
9
10
11
1
1
18
CAMINHO INDEPENDENTE
• Um caminho independente é um caminho no grafo de fluxo que
inclui pelo menos uma aresta nova (que não tenha sido ainda
atravessada)
• Conjunto básico é o conjunto formado pelos caminhos independentes
que cubram todas as arestas do grafo de fluxo
• A complexidade ciclomática é uma métrica de software que
proporciona uma medida da complexidade lógica de um programa.
• O valor da complexidade ciclomática estabelece um limite superior
para o número de caminhos independentes
19
COMPLEXIDADE CICLOMÁTICA
• A complexidade ciclomática
– Baseado na teoria dos grafos
– Dado um grafo G, V(G) =
• número de regiões do grafo de fluxo
• E – N + 2, onde E corresponde ao número de arestas e N o
número de nós do grafo de fluxo.
• P + 1, onde P é o número de nós predicativos (desviantes)
contidos no grafo.
20
COMPLEXIDADE CICLOMÁTICA
1
2,
3
4,
5
6
7
8
9
1
0
1
1
21
COMPLEXIDADE CICLOMÁTICA
1
2,
3
4,
5
6
7
R3
R1
8
R2
9
R4
1
1
1
0
O grafo de fluxo tem 4 regiões.
V(G) = 11 arestas – 9 nós + 2 = 4
V(G) = 3 nós predicativos + 1 = 4
Portanto a complexidade ciclomática é 4
22
Caminhos Independentes
1
2,
3
4,
5
6
7
R3
R1
8
R2
9
R4
1
0
1
1
23
Caminhos Independentes
1
2,
3
4,
5
6
7
R3
R1
8
R2
1: 1-11
9
R4
1
1
1
0
2: 1-2-3-4-5-10-1-11
3: 1-2-3-6-8-9-10-1-11
4: 1-2-3-6-7-9-10-1-11
24
DERIVANDO CASOS DE TESTE
• Usando o projeto ou o código como base, trace um grafo
de fluxo.
• Determine a complexidade ciclomática do grafo de fluxo
resultante.
• Determine um conjunto básico de caminhos independentes
• Prepare os casos de teste que forcem a execução de cada
caminho no conjunto básico.
25
EXEMPLO
• PROCEDURE AVERAGE;
•
•
INTERFACE RETURNS average, total.input, total.valid;
INTERFACE ACCEPTS value, minimum, maximum;
•
•
•
•
TYPE value [1:100] IS SCALAR ARRAY;
TYPE average, total.input, total.valid,
minimum, maximum, soma IS SCALAR;
TYPE i IS INTEGER;
26
EXEMPLO
•
i = 1;
2
•1
total.input = total.valid = 0;
3
6
•
sum = 0;
•
DO WHILE value[i] <> -999 AND total.input <100
• 4 increment total.input by 1;
•
IF value[i] >= minimum AND value[i] <= maximum
• 5
THEN increment total.valid by 1;
•
sum = sum + value[i]
• 7
ELSE skip
•
ENDIF
•8
increment i by 1;
• 9 ENDDO
•
IF total.valid > 0 10
• 11 THEN average = sum / total.valid;
•
ELSE average = -999; 12
• 13 ENDIF
• END
27
EXEMPLO
•
i = 1;
2
•1
total.input = total.valid = 0;
3
6
•
sum = 0;
•
DO WHILE value[i] <> -999 AND total.input <100
• 4 increment total.input by 1;
•
IF value[i] >= minimum AND value[i] <= maximum
• 5
THEN increment total.valid by 1;
1
•
sum = sum + value[i]
0
7
•
ELSE skip
1
1
2
1
•
ENDIF
1
•8
increment i by 1;
3
• 9 ENDDO
•
IF total.valid > 0 10
• 11 THEN average = sum / total.valid;
8
•
ELSE average = -999; 12
• 13 ENDIF
• END
1
2
3
4
5
6
7
9
28
EXEMPLO
1
Complexidade Ciclomática:
2
6 = 17 – 13 + 2 = 5 + 1
3
Caminhos:
4
1: 1-2-10-11-13
5
2: 1-2-10-12-13
6
3: 1-2-3-10-11-13
1
0
1
2
1
1
1
3
7
8
4: 1-2-3-4-5-8-9-2-...
5: 1-2-3-4-5-6-8-9-2-...
9
6: 1-2-3-4-5-6-7-8-9-2-...
29
EXEMPLO
CASOS DE TESTE
Caminho
Min Max Value
Average t.input t.valid
1: 1-2-10-11-13
10
50
-
2: 1-2-10-12-13
10
50
-999
3: 1-2-3-10-11-13
10
50
12, 30, ...
4: 1-2-3-4-5-8-9-2-...
10
50
5, -999
0
1
0
5: 1-2-3-4-5-6-8-9-2-...
10
50
60, -999
0
1
0
6: 1-2-3-4-5-6-7-8-9-2-...
10
50
30, -999
30
1
1
-999
0
0
100
30
EXEMPLO
CASOS DE TESTE
Caminho
Min Max Value
Average t.input t.valid
1: 1-2-10-11-13
10
50
-
2: 1-2-10-12-13
10
50
-999
3: 1-2-3-10-11-13
10
50
12, 30, ...
4: 1-2-3-4-5-8-9-2-...
10
50
5, -999
0
1
0
5: 1-2-3-4-5-6-8-9-2-...
10
50
60, -999
0
1
0
6: 1-2-3-4-5-6-7-8-9-2-...
10
50
30, -999
30
1
1
-999
0
0
100
31
TESTE DO FLUXO DE DADOS
• O método de teste de fluxo de dados
– seleciona caminhos de teste de um programa de acordo com as
localizações das definições e usos de variáveis no programa.
• Def(S) = {X | S contem uma definição de X};
• Use(S) = {X | S contem um uso de X};
• uma definição de X em S está viva em S1 se existe um
caminho de S a S1que não contenha outra definição de X
• Cadeia DU = [X,S,S1] onde X  Def(S) e X  Use(S1) e a
definição de X em S está viva em S1.
• Testar todas DUs.
32
TESTE DOS LAÇOS (LOOPS)
• focaliza a validade das construções de laços.
• Quatro tipos: simples, aninhados, concatenados, nãoestruturados.
• Casos de teste para laços simples (n: maximo de iterações):
– pular o laço
– executar 1 passada
– executar m passadas ( m<n)
– executar n-1, n, n+1 passadas
33
TESTE DE CAIXA PRETA
• Concentra-se nos requisitos funcionais do software.
• Procura descobrir os seguintes tipos de erro:
– Funções incorretas ou ausentes;
– Erros de interface;
– Erros na estrutura de dados ou no acesso a banco de
dados externos;
– Erros de desempenho e
– Erros de inicialização e término.
34
PARTICIONAMENTO POR EQUIVALÊNCIA
• propõe dividir o domínio de entrada em classes (partições) cujos dados
produzam o “mesmo comportamento” na execução do teste, ou seja,
os dados de uma classe ou devem todos não dar erro, ou todos o
mesmo tipo de erro.
• diretrizes para definição de classes. Se a condição de entrada
– especifica um intervalo então uma classe válida e duas inválidas.
– requer um valor então uma classe válida e duas inválidas.
– especifica a pertinência a um conjunto então uma válida e uma
inválida
– é booleana então uma classe válida e uma inválida
35
ANÁLISE DOS VALORES LIMITE
• Um maior número de erros tende a ocorrer nas fronteiras do domínio
de entrada do que no centro.
• Complementa o particionamento por equivalência
• Diretrizes:
– se a condição de entrada especificar um intervalo (a .. b) inclua
casos com valores a e b, e logo acima e logo abaixo de a e b.
– se uma condição de entrada especifica um conjunto de valores,
inclua casos com os valores máximo e mínimo, e também com
valores logo acima e logo abaixo de a e b.
– idem ao caso acima para intervalos de saídas.
– testar valores limites das estruturas de dados.
36
BIBLIOGRAFIA
• Capítulo 14, Pressman, R., Engenharia de Software, 6a
edição, McGraw Hill, 2006.
• Capítulos 1 e 2, Myers, G., The Art os Software Testing,
Wilwy, 1979.
37
Download

TÉCNICAS DE TESTE DE SOFTWARE