correção do exercício teste caixa-brancainf1628/docs/2019_1/aula_24.pdf · exercício 1a • a)...
TRANSCRIPT
![Page 1: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/1.jpg)
Correção do ExercícioTeste Caixa-Branca
Alessandro Garcia
LES/DI/PUC-Rio
![Page 2: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/2.jpg)
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.
![Page 3: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/3.jpg)
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
![Page 4: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/4.jpg)
Exercício 1a
• a) Fluxograma
Julho 2009 4 / 32Alessandro Garcia © LES/DI/PUC-Rio
Quem pode fazer o fluxograma no quadro?
![Page 5: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/5.jpg)
Fluxograma
Julho 2009 5 / 32Alessandro Garcia © LES/DI/PUC-Rio
![Page 6: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/6.jpg)
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
![Page 7: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/7.jpg)
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
![Page 8: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/8.jpg)
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
![Page 9: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/9.jpg)
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?
![Page 10: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/10.jpg)
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
![Page 11: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/11.jpg)
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
![Page 12: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/12.jpg)
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
![Page 13: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/13.jpg)
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
![Page 14: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/14.jpg)
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
![Page 15: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/15.jpg)
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
![Page 16: Correção do Exercício Teste Caixa-Brancainf1628/docs/2019_1/aula_24.pdf · Exercício 1a • a) As entradas dos cinco casos de teste abaixo representam um conjunto suficiente e](https://reader035.vdocuments.site/reader035/viewer/2022071217/60491f0311dd506efc403cad/html5/thumbnails/16.jpg)
• 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