Respostas
Exercício: Cobertura Teste Caixa Branca
Alessandro Garcia
LES/DI/PUC-Rio
Junho 2016
Exercício 1
•
a) Fluxograma
1. #include <stdio.h> 2.
3. int comparar() {
4. int num1, num2, num3, maior = 0; 5. printf ("Entre 3 numeros positivos");
6. scanf ("%d %d %d", &num1, &num2, &num3); 7. if ((num1 > num2) && (num1 > num3)) {
8. maior = num1; 9. return maior; 10. } else {
11. if (num2 == num3) {
12. printf ("Nao existe maior ");
13. if (num3 == num1) { printf ("... e todos sao iguais!"); } 15. return maior;
16. }
17. if ((num2 > num3) && (num2 != num 1)) { 18. maior = num2;
19. return maior; 20. }
21. if ((num3 > num2) && (num3 != num1)) { 22. maior = num3;
23. return maior; 24. }
25. printf ("Nao existe maior "); 26. return maior; 25. } 26. }
A
B
C
D
E
F
G
I
J
K
L
M
N
H
Note que existem dois
comandos (13 e 14), com
Critérios de cobertura: instruções
•
Cobertura de
instruções
(vértices)
–
Cada
instrução é executada
pelo menos
uma vez no
conjunto de todos os casos de
teste
–
rotulam-se as instruções e
criam-se os casos de teste
•
cada caso percorre pelo
menos uma instrução ainda
não percorrida
•
até que todas as instruções
tenham sido percorridas
–
i = 4 ; j = 8
A B C D
–
i = 4 ; j = 6
A B C E
i = ( i + j ) / 2 ; j = 10 ; i = 10 ; if ( ( i < 10 ) && ( j < 10 )) if ( i > 5 ) S N S ND
E
A
B
C
Exercício 1a
•
a) Fluxograma
Exercício 1a
•
a) As entradas dos cinco casos de teste abaixo representam
um conjunto suficiente e mínimo para satisfazer o critério de
cobertura de instruções? Justifique.
num1 = 3, num2 = 2, num3 = 2
num1 = 3, num2 = 4, num3 = 3
num1 = 3, num2 = 4, num3 = 5
num1 = 4, num2 = 5, num3 = 5
num1 = 5, num2 = 5, num3 = 5
Exercício 1a
•
a) As entradas dos cinco casos de teste abaixo representam
um conjunto suficiente e mínimo para satisfazer o critério de
cobertura de instruções? Justifique.
num1 = 3, num2 = 2, num3 = 2 -> A B C
num1 = 3, num2 = 4, num3 = 3 -> A B D E J K
num1 = 3, num2 = 4, num3 = 5 -> A B D E J L M
num1 = 4, num2 = 5, num3 = 5 -> A B D E F G I
num1 = 5, num2 = 5, num3 = 5 -> A B D E F G H I
Não, pois nenhum dos casos de teste resulta
na execução de N.
Exercício 1a
A B C
A B D E J K
A B D E J L M
A B D E F G I
A B D E F G H I
x
x
x
x
falta: A B D E J L N
exemplo:
num1 = 5, num2 = 5
, num3 = 4
caso onde não
existe maior
Exercício 1a
A B C
A B D E J K
A B D E J L M
A B D E F G I
A B D E F G H I
x
x
x
x
precisa dos dois?
Exercício 1a
A B C
A B D E J K
A B D E J L M
A B D E F G I
A B D E F G H I
x
x
x
x
bastaria o segundo
(em cobertura de instruções)
ou seja, o conjunto suficiente e mínimo
seria:
num1 = 3, num2 = 2, num3 = 2 -> A B C
num1 = 3, num2 = 4, num3 = 3 -> A B D E J K
num1 = 3, num2 = 4, num3 = 5 -> A B D E J L M
num1 = 4, num2 = 5, num3 = 5 -> A B D E F G I
num1 = 5, num2 = 5, num3 = 5 -> A B D E F G H I
Exercício 1b
•
b) Os três caminhos (arcos de execução) abaixo descrevem
casos de teste abstratos para a função comparar(). Note
que os rótulos (letras) estão associados com instruções e/ou
blocos de código da função. Complete o conjunto de
caminhos abaixo de forma a obter um conjunto mínimo de
casos de teste para satisfazer o padrão de cobertura de
arestas. Qual o número mínimo de casos de teste que foi
necessário para satisfazer tal padrão?
Inicial: ABC, ABDEFGI, ABDEJK
Exercício 1b
x
x
arestas já
exercitadas
A B C
A B D E F G I
A B D E J K
Note que faltam
pelo menos 3
caminhos para
exercitar as arestas
faltantes
Exercício 1b
A B C
A B D E F G I
A B D E J K
Note que faltam
pelo menos 3
caminhos para
exercitar as arestas
faltantes
x
x
arestas já
exercitadas
Exercício 1b
•
b) Os três caminhos (arcos de execução) abaixo descrevem
casos de teste abstratos para a função comparar(). Note
que os rótulos (letras) estão associados com instruções e/ou
blocos de código da função. Complete o conjunto de
caminhos abaixo de forma a obter um conjunto mínimo de
casos de teste para satisfazer o padrão de cobertura de
arestas. Qual o número mínimo de casos de teste que foi
necessário para satisfazer tal padrão?
Inicial: ABC, ABDEFGI, ABDEJK
ABDEFGHI, ABDEJLM, ABDEJLN, totalizando 6 casos
de teste
Exercício 1
•
c) Apresente a expressão regular geradora de caminhos que
permita identificar os casos de teste necessários para
satisfação do critério de cobertura de caminhos. Use os
rótulos (letras) associados acima ao código da função
comparar().
AB ( C| (DE ( (FG(HI|I))) | (J(K|(L(M|N) ))))))
•
Qual seria o caminho mais longo e o mais curto que
poderiam ser gerados a partir desta expressão?
•
D)
Exercício 1
1. #include <stdio.h> 2.3. int comparar() {
4. int num1, num2, num3, maior = 0; 5. printf ("Entre 3 numeros positivos");
6. scanf ("%d %d %d", &num1, &num2, &num3); 7. if ((num1 > num2) && (num1 > num3)) {
8. maior = num1; 9. return maior; 10. } else {
11. if (num2 == num3) {
12. printf ("Nao existe maior ");
13. if (num3 == num1) { printf ("... e todos sao iguais!"); } 15. return maior;
16. }
17. if ((num2 > num3) && (num2 != num 1)) { 18. maior = num2;
19. return maior; 20. }
21. if ((num3 > num2) && (num3 != num1)) { 22. maior = num3;
23. return maior; 24. }
25. printf ("Nao existe maior "); 26. return maior; 25. } 26. }