correção do exercício teste caixa-brancainf1628/docs/2019_1/aula_24.pdf · exercício 1a • a)...
TRANSCRIPT
Correção do ExercícioTeste Caixa-Branca
Alessandro Garcia
LES/DI/PUC-Rio
Exercício 1
• a) Fluxograma
Julho 2009 2 / 32Alessandro Garcia © LES/DI/PUC-Rio
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
DEF
G
I
J
K
L
M
N
H
Note que existem dois
comandos (13 e 14), com
rótulos G e H, na mesma linha.
Jun 2009 3 / 32LES/DI/PUC-Rio
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 N
D E
A
B
C
Exercício 1a
• a) Fluxograma
Julho 2009 4 / 32Alessandro Garcia © LES/DI/PUC-Rio
Quem pode fazer o fluxograma no quadro?
Fluxograma
Julho 2009 5 / 32Alessandro Garcia © LES/DI/PUC-Rio
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
Julho 2009 6 / 32Alessandro Garcia © LES/DI/PUC-Rio
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.
Faltou caso onde (num1 = num2) > num3
Julho 2009 7 / 32Alessandro Garcia © LES/DI/PUC-Rio
Exercício 1a
Julho 2009 8 / 32Alessandro Garcia © LES/DI/PUC-Rio
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
xx
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
Julho 2009 9 / 32Alessandro Garcia © LES/DI/PUC-Rio
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
xx
x
precisa dos dois?
É o conjunto mínimo?
Exercício 1a
Julho 2009 10 / 32Alessandro Garcia © LES/DI/PUC-Rio
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
xx
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
num1 = 5, num2 = 5, num3 = 4 -> A B D E J L N
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
Julho 2009 11 / 32Alessandro Garcia © LES/DI/PUC-Rio
Exercício 1b
Julho 2009 12 / 32Alessandro Garcia © LES/DI/PUC-Rio
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
Julho 2009 13 / 32Alessandro Garcia © LES/DI/PUC-Rio
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
Julho 2009 14 / 32Alessandro Garcia © LES/DI/PUC-Rio
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?
mais curto: ABC
mais longo: ABDEFGHI
Julho 2009 15 / 32Alessandro Garcia © LES/DI/PUC-Rio
• D)
Julho 2009 16 / 32Alessandro Garcia © LES/DI/PUC-Rio
Exercício 1
16 / 32
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
DEF
G
I
J
K
L
M
N
Hlocais onde
poderiam ser
inseridos os
contadores
(de arestas)
antes do
return
no bloco
if