Teste de Software
Estratégias de Teste Estrutural de
Software
Prof. Lesandro Ponciano
Departamento de Engenharia de Software
e Sistemas de Informação (DES)
Objetivos da Aula
Contextualizar a técnica de Teste Estrutural de
software
Introduzir o conceito de “grafo de fluxo de controle”
de um programa
Introduzir a análise de critério de adequação e de
cobertura
Prof. Lesandro Ponciano - PUC Minas 2
A Técnica de Teste Estrutural
Método para projeto de casos de teste utilizando a
estrutura de controle do módulo
Casos de teste são gerados a partir da implementação
Objetivos
Garantir que todos os caminhos independentes dentro de um
módulo sejam executados ao menos uma vez
Executar todas as decisões lógicas do programa, tanto a parte
verdadeira quanto a falsa
Executar todas as estruturas de repetição nos seus limites
definidos ou operacionais
Garantir a validade das estruturas de dados internas
Prof. Lesandro Ponciano - PUC Minas 3
Grafo de Fluxo de Controle (GFC)
Um programa P é representado como um grafo
direcionado G=(N, E, s), onde
N é o conjunto de vértices
E é o conjunto de arestas
s é o vértice de entrada
No Grafo G
Um vértice indica um bloco indivisível de comandos
Uma aresta indica um possível desvio de um bloco para outro
Prof. Lesandro Ponciano - PUC Minas 4
Grafo de Fluxo de Controle (GFC)
Cada bloco de comandos tem as seguintes
características
Não existe desvio de execução dentro do bloco
Uma vez que o primeiro comando do bloco é executado, todos os
comandos são
No grafo G
há um único vértice de entrada, s ∈ N
há um único vértice de saída, o ∈ N
um "caminho” é uma sequência finita de vértices (n1, n2,…,nk), k≥2,
tal que existe um vértice de n1 para ni+1, para i=1,2,…,k-1
Prof. Lesandro Ponciano - PUC Minas 5
Fluxo de Controle
Prof. Lesandro Ponciano - PUC Minas 6
Prof. Lesandro Ponciano - PUC Minas 7
Prof. Lesandro Ponciano - PUC Minas 8
Fluxo de Controle
Prof. Lesandro Ponciano - PUC Minas 9
Casos de Teste para Cobertura
Conjunto de casos de teste é dito adequado de acordo
com um critério, se
Exercita todos os elementos definidos no critério
Ou seja, causa todos os elementos definidos no critério
Conjunto de testes deve:
maximizar a cobertura
minimizar o tempo
Grau de cobertura pode ser menor do que 100%
devido a elementos inatingíveis
Prof. Lesandro Ponciano - PUC Minas 10
Cobertura
Prof. Lesandro Ponciano - PUC Minas 11
Aplicação da Cobertura
Tipos de Cobertura
Cobertura de código: Cobrir possíveis maneiras em que o código é
executado
Cobertura de dados: Cobrir as possíveis combinações de dados
Critérios de cobertura
Cobertura de comandos (statements)
Cobertura de decisões (branches)
Cobertura de condições
Cobertura de caminhos
Prof. Lesandro Ponciano - PUC Minas 12
Cobertura de Comandos
Cada comando deve ser executado pelo menos uma vez
No grafo, garantir que cada vértice será exercitado
pelo menos uma vez pelo conjunto de testes
1. int foo(int a, int b){
1,2
2. int c=0;
3. while(a<0){
4. if (b<0){
5. b=b+2; 3
6. }
4
7. a=a+1;
8. } a=-1 5
9. c=a+b; b=-1
10. return c; 7
c=1
11. } 9,10
Prof. Lesandro Ponciano - PUC Minas 13
Limitações
Não é capaz de detectar diversos tipos de
defeito. Ex.:
if (a > 0) onde deveria ser if (a >= 0)
Executar um comando de repetição uma única vez
“ifs” sem “elses” são particularmente vulneráveis
Prof. Lesandro Ponciano - PUC Minas 14
Cobertura de Decisões/Desvios
Cada ramo deve ser percorrido pelo menos uma vez
No grafo, garantir que todas as arestas serão
executadas pelo menos uma vez pelo conjunto de
testes
Note que, um caso de teste pode ser suficiente para
cobrir todos os comandos, mas não todos os caminhos
de diferente decisão
Prof. Lesandro Ponciano - PUC Minas 15
1. int foo(int a, int b){ 1,2
2. int c=0;
3. while(a<0){
4. if (b<0){
5. b=b+2; 3
6. }
4
7. a=a+1;
8. } 5
9. c=a+b;
10. return c; 7
11. } 9,10
Prof. Lesandro Ponciano - PUC Minas 16
Cobertura de Condições
Todas as decisões devem ser avaliadas para
valores verdadeiros e falsos em cada decisão
Não requer testar todas as possibilidades
Desvios podem não estar totalmente cobertos
Pode-se combiná-la com a cobertura de desvios
Prof. Lesandro Ponciano - PUC Minas 17
Cobertura de Caminhos
Deve-se seguir todos os caminhos
pelo menos uma vez incluindo repetições
Deve-se cobrir todos os caminhos possíveis, incluindo
repetições, da entrada até a saída
Caminhos:
Podem chegar a 2n para n condições
Comandos de repetição: o número de caminhos é muito grande e
pode ser infinito
O custo pode ser proibitivo
Prof. Lesandro Ponciano - PUC Minas 18
Atividade de Fixação
O que é o Teste Estrutural de software?
O que é um grafo de fluxo de controle de um
programa? Como esse grafo é construído?
Explique cada um dos critério de cobertura
Cobertura de comandos (statements)
Cobertura de decisões (branches)
Cobertura de condições
Cobertura de caminhos
Prof. Lesandro Ponciano - PUC Minas 19
Referências
Delamaro, M. E., Maldonado, J. C., & Jino, M. (2016).
Introdução ao teste de software. Rio de Janeiro: Elsevier.
(Capítulo 4)
Myers, Glenford J. et al (2004) "The Art of Software
Testing." 2ed. New York, NY, USA: John Wiley & Sons.
Prof. Lesandro Ponciano - PUC Minas 20