Aluno: Luiz Rubens Lencioni ([email protected]) Data: 27/05/2011
ListEx06
1- Dado o programa SOLVER3GRAU desenvolvido na Linguagem C++, faça o Grafo de Fluxo de Dados
2- Dado o Grafo de Fluxo de Dados, faça o Teste Estático para cada variável do programa 3- Assumindo que o Fluxo de Controle está correto, faça o Teste Dinâmico para valores de entrada a2, a1 e a0 representativos, utilizando o Compilador Turbo C++ ou equivalente 4- Comente os Resultados do Teste.
1- Grafo de Fluxo de Dados
Para realizar o Grafo de Fluxo de Dados utilizou-se o Grafo de Fluxo de Controle apresentado na ListEx05. A tabela abaixo representa a divisão do programa em blocos e verifica cada variável definida (d), utilizada (u) ou destruída (k) em cada bloco de comandos.
Bloco de comandos Linha(s) Variáveis definidas(d), usadas(u) ou destruídas(k)
1 2 a 32
d: a2, a1, a0, q, r, d, z1f, h, s1f, s2f, z21f, z22f d: dc, rx, s1, s2, z1, z2, z3, i, rrr, rrm
d: a2x, a1x, a0x, y1c, y2c, y3c u: a2, a1, a0, q, r, d
2 33 u: d 3 34 u: d 4 35 u: d 5 36 u: d 6 37 u: d 7 38 a 40 u: d 8 41 a 72 u: d, r, dc, rx, rrr, rrm, s1, s2, a2x, a2, i, z1, z2, z3 u: a1x, a0x, a0, a1, a2, y1c, y2c, y3c
9 73 a 78 u: h, q, r, d 10 79 a 82 u: h, s1f 11 83 a 84 u: s1f 12 85 a 86 u: q 13 87 a 91 u: g, s2f 14 92 u: g, s2f 15 93 a 114 u: z1f, z21f, z22f, s1f, s2f u: a2, a1, a0, z1, z2, z3 u: y1c, y2c, y3c
16 115
k: a2, a1, a0, q, r, d, z1f, h, q, s1f, s2f, z21f, z22f k: dc, rx, s1, s2, z1, z2, z3, i, rrr, rrm
k: a2x, a1x, a0x, y1c, y2c, y3c Tabela 1 - Divisão do Programa em Blocos de Comandos
A figura a seguir ilustra o Grafo de Fluxo de Dados, de acordo com os blocos definido pela Tabela 1:
2 – Teste estático de cada variável do programa
2.1 – Variável “d”
-7- O padrão d-u-k, aos pares, para a variável “z”, é:
~ d Correto, caso normal d u Correto, caso normal
2.2 – Variável “a2”
O padrão d-u-k, aos pares, para a variável “a2”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.3 – Variável “a1”
O padrão d-u-k, aos pares, para a variável “a1”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.4 – Variável “a0”
O padrão d-u-k, aos pares, para a variável “a0”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.5 – Variável “q”
O padrão d-u-k, aos pares, para a variável “q”, é:
~ d Correto, caso normal d u Correto, caso normal u u Correto, caso normal u k Correto, caso normal
2.6 – Variável “r”
O padrão d-u-k, aos pares, para a variável “r”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.7 – Variável “z1f”
O padrão d-u-k, aos pares, para a variável “z1f”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.8 – Variável “h”
O padrão d-u-k, aos pares, para a variável “h”, é:
~ d Correto, caso normal d u Correto, caso normal u u Correto, caso normal u k Correto, caso normal
2.9 – Variável “s1f”
O padrão d-u-k, aos pares, para a variável “s1f”, é:
~ d Correto, caso normal d u Correto, caso normal u u Correto, caso normal u k Correto, caso normal
2.10 – Variável “s2f”
O padrão d-u-k, aos pares, para a variável “s2f”, é:
~ d Correto, caso normal d u Correto, caso normal u u Correto, caso normal u k Correto, caso normal
2.11 – Variável “z21f”
O padrão d-u-k, aos pares, para a variável “z21f”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.12 – Variável “z22f”
O padrão d-u-k, aos pares, para a variável “z22f”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.13 – Variável “dc”
O padrão d-u-k, aos pares, para a variável “dc”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.14 – Variável “rx”
O padrão d-u-k, aos pares, para a variável “rx”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.15 – Variável “s1”
O padrão d-u-k, aos pares, para a variável “s1”, é:
~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.16 – Variável “s2”
O padrão d-u-k, aos pares, para a variável “s2”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.17 – Variável “z1”
O padrão d-u-k, aos pares, para a variável “z1”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.18 – Variável “z2”
O padrão d-u-k, aos pares, para a variável “z2”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.19 – Variável “z3”
O padrão d-u-k, aos pares, para a variável “z3”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.20 – Variável “i”
O padrão d-u-k, aos pares, para a variável “i”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.21 – Variável “rrr”
O padrão d-u-k, aos pares, para a variável “rrr”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.22 – Variável “rrm”
O padrão d-u-k, aos pares, para a variável “rrm”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.23 – Variável “a2x”
O padrão d-u-k, aos pares, para a variável “a2x”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.24 – Variável “a1x”
O padrão d-u-k, aos pares, para a variável “a1x”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.25 – Variável “a0x”
O padrão d-u-k, aos pares, para a variável “a0x”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.26 – Variável “y1c”
O padrão d-u-k, aos pares, para a variável “y1c”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.27 – Variável “y2c”
O padrão d-u-k, aos pares, para a variável “y2c”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
2.28 – Variável “y3c”
O padrão d-u-k, aos pares, para a variável “y3c”, é: ~ d Correto, caso normal d u Correto, caso normal u k Correto, caso normal
3 – Teste Dinâmico para valores de entrada a2, a1, a0 representativos
De acordo com [1], deve ser criado ao menos um caso de teste para cobrir cada par “define-use”, de cada variável do programa.
Primeiramente mapeou-se os caminhos possíveis dentro do programa: Caminho (Path) A 1-2-3-5-7-8-16 B 1-3-4-5-7-9-11-12-13-15-16 C 1-3-4-5-7-9-11-12-14-15-16 D 1-3-4-5-7-9-10-12-13-15-16 E 1-3-4-5-7-9-10-12-14-15-16 F 1-3-5-6-7-9-11-12-13-15-16 G 1-3-5-6-7-9-11-12-14-15-16 H 1-3-5-6-7-9-10-12-13-15-16 I 1-3-5-6-7-9-10-12-14-15-16
Desta forma criou-se um Caso de Teste para cada variável, conforme abaixo:
CT Variável Caminho para cobrir cada (d-u) a0 a1 a2
CT-1 d A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-2 d C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-3 d H 1-3-5-6-7-9-10-12-13-15-16 9.0 10.0 -7.0 CT-4 a2 A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-5 a2 C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-6 a1 A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-7 a1 C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-8 a0 A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-9 a0 C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-10 q C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-11 r A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-12 r C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-13 z1f C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-14 h H 1-3-5-6-7-9-10-12-13-15-16 9.0 10.0 -7.0 CT-15 s1f H 1-3-5-6-7-9-10-12-13-15-16 9.0 10.0 -7.0 CT-16 s1f C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-17 s2f H 1-3-5-6-7-9-10-12-13-15-16 9.0 10.0 -7.0 CT-18 s2f C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-19 z21f C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-20 z22f C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-21 dc A 1-2-3-5-7-8-16 0.0 1.0 10.0
CT-25 z1 A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-26 z1 C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-27 z2 A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-28 z2 C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-29 z3 A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-30 z3 C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-31 i A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-32 rrr A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-33 rrm A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-34 a2x A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-35 a1x A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-36 a0x A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-37 y1c A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-38 y1c C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-39 y2c A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-40 y2c C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0 CT-41 y3c A 1-2-3-5-7-8-16 0.0 1.0 10.0 CT-42 y3c C 1-3-4-5-7-9-11-12-14-15-16 0.0 0.0 9.0
4 – Comentários
Verificou-se que o teste estático e o teste dinâmico são análises complementares da Técnica de Fluxo de Dados. Devido a grande quantidade de variáveis, mesmo quando aplicada em um pequeno programa como o deste exercício, esta Técnica necessita de um grande esforço para ser aplicada manualmente. Desta forma pode-se observar que uma ferramenta automática para realizar a Técnica de Teste de Fluxo de Dados é essencial para programas maiores. O número de casos de teste poderia ter sido reduzido considerando-se que mais de uma variável pode ser testada em um mesmo caso de teste. Entretanto procurou-se seguir a seqüência para o teste dinâmico descrita em [1].
No exercício proposto não foi encontrado nenhum problema utilizando-se a Técnica de Teste de Fluxo de Dados.
Referências:
[1] COPELAND, L. “A Practitioner’s Guide to Software Test Design”. Norwood, MA, USA: Artech House Publishers, 2007
[2] DELAMARO, M. E.; MALDONADO, J. C.; JINO, M. “Introdução ao Teste de Software”. Rio de Janeiro, RJ: Editora Campus, 2007