Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um...
Transcript of Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um...
![Page 1: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/1.jpg)
Teste Estrutural
![Page 2: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/2.jpg)
2
Teste estrutural
• Teste baseado na estrutura do código
• Mais precisamente,
– Critério de adequação baseia-se no código!
![Page 3: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/3.jpg)
3
Teste estrutural
• Estrutura de um programa é um grafo
• Exemplos:
– Organização em árvore de pacotes e classes
– Parser gera uma AST
– Fluxo de controle de um método define CFG
– Fluxo de chamada de métodos define CG
![Page 4: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/4.jpg)
4
Control-Flow Graph (CFG)
stmt0;
while (condA){
if (condB){
stmt1; stmt2;
}
stmt3;
}
stmt4
![Page 5: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/5.jpg)
5
CFG
stmt0;
while (condA){
if (condB){
stmt1; stmt2;
}
stmt3;
}
stmt4
stmt0
condA
stmt1;
stmt2;
stmt3
condB
stmt4
![Page 6: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/6.jpg)
6
Simplificação didática
• Testar a estrutura de um programa
equivale a testar um grafo
• O que é um teste? (Para um grafo)
![Page 7: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/7.jpg)
7
Simplificação didática
• Testar a estrutura de um programa
equivale a testar um grafo
• O que é um teste para um grafo?
– Sequência de transiçoes a partir do nó inicial
que termina em uma folha
![Page 8: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/8.jpg)
8
Simplificação didática
• Testar a estrutura de um programa
equivale a testar um grafo
Model checkers de programas (ferramentas que geram sistematicamente testes) usam o mesmo princípio. Exemplos: Java PathFinder (Java), Verisoft (C), Spin (Promela).
![Page 9: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/9.jpg)
Cobertura de Grafos
9
b
c
a
f
d
e
t0
t1 t6
t2
t3
t4
t5
stmt0
condA
stmt1;
stmt2;
stmt3
condB
stmt4
![Page 10: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/10.jpg)
10
Cobertura de Grafos
• Exemplo de teste
– t0, t6
10
b
c
a
f
d
e
t0
t1 t6
t2
t3
t4
t5
![Page 11: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/11.jpg)
11
Critérios de adequação de grafo
• Nó
• Transição
• Caminho
![Page 12: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/12.jpg)
12
Critérios de adequação de grafo
• Nó
– Teste suíte TS é adequada a nó se para cada nó
n no grafo G existe ao menos um teste t em TS
que cobre n
• Transição
• Caminho
![Page 13: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/13.jpg)
13
Critérios de adequação de grafo
• Nó
– Teste suíte TS é adequada a nó se para cada nó
n no grafo G existe ao menos um teste t em TS
que cobre n
• Transição
• Caminho
Grafo com ciclo possui número infinito de caminhos
![Page 14: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/14.jpg)
14
Ciclos
• Problema:
– Como medir cobertura de caminho?
• Grafo com ciclos contém infinidade de caminhos
• Solução comum:
– Limitar o número de iterações!
• Transforma um grafo em uma árvore
![Page 15: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/15.jpg)
15
Exercício
• Reporte suíte de teste adequada a nó
• Reporte suíte de teste adequada a transição
• Existe suíte de teste adequada a caminho?
• Existe suíte de teste adequada a caminho de
até N transições?
15
b
c
a
f
d
e
t0
t1 t6
t2
t3
t4
t5
![Page 16: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/16.jpg)
Caminhos inalcançáveis
16
Há caminhos inalcançáveis no programa:
não há execução que o visite.
![Page 17: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/17.jpg)
Caminhos inalcançáveis
17
if (a < 0) {
a = 0;
}
if (a > 10) {
a = 10;
}
skip();
a < 0
a = 0
a > 10
a = 10
skip
![Page 18: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/18.jpg)
18
Caminhos inalcançáveis
• Enumere os caminhos do grafo
a < 0
a = 0
a > 10
a = 10
skip
![Page 19: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/19.jpg)
19
Caminhos inalcançáveis
• Enumere os caminhos do grafo
a < 0
a = 0
a > 10
a = 10
skip
![Page 20: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/20.jpg)
20
Caminhos inalcançáveis
• Todos estes caminhos são
alcancáveis?
if (a < 0) {
a = 0;
}
if (a > 10) {
a = 10;
}
skip();
![Page 21: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/21.jpg)
21
Caminhos inalcançáveis
if (a < 0) {
a = 0;
}
if (a > 10) {
a = 10;
}
skip();
a < 0 => NOT(a > 10)
• Estes caminhos são alcancáveis?
![Page 22: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/22.jpg)
22
Lista incompleta de critérios de
adequação estruturais para programa • Statement
• Basic-Block
• Branch
• Basic condition
• Compound condition
• MC/DC
• Path
• Boundary-Interior
• Loop boundary
• Call
• …
![Page 23: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/23.jpg)
23
Lista incompleta de critérios de
adequação estruturais para programa • Statement
• Basic-Block
• Branch
• Basic condition
• Compound condition
• MC/DC
• Path
• Boundary-Interior
• Loop boundary
• Call
• …
Basic-block subsumes Statement
Branch subsumes Basic-block
![Page 24: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/24.jpg)
24
Cobertura baseada em Condições
Lógicas
• Terminologia
– Condições básicas e compostas
• Exemplo: (((a || b) && c) || d) && e
– a, b, c, d, e são condições básicas
– (a || b) é uma condição composta
![Page 25: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/25.jpg)
25
Cobertura baseada em Condições
Lógicas
• Basic condition
– Requer que toda condição básica seja satisfeita pela execução de algum teste
• Compound Condition
– Requer que toda condição composta seja satisfeita pela execuçao de algum teste
• MC/DC
– Requer que para cada condição básica C tenham-se 2 casos de teste que fixem o valor de todas as outras condições básicas. Os testes devem variar o resultado de C e o resultado de toda expressão.
RTCA/DO-178B, EUROCAE ED-12b
![Page 26: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/26.jpg)
MC/DC
• Objetivo é isolar efeito de cada condição
básica no resultado de toda expressão
26
![Page 27: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/27.jpg)
27
Exercício
• Gerar suíte de teste adequada a (i) basic
condition, (ii) compound condition, e (iii)
MC/DC para o bloco abaixo
{
if((((a||b)&&c)||d)&&e){…}else{…}
}
![Page 28: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/28.jpg)
Solução
• ((((a || b) && c) || d) && e)
28
a b c d e T
0 0 1 0 1 0
1 0 1 0 1 1
0 0 1 0 1 0
0 1 1 0 1 1
1 0 0 0 1 0
1 0 1 0 1 1
0 0 0 0 1 0
0 0 0 1 1 1
0 0 0 1 0 0
0 0 0 1 1 1
a b c d e T
0 0 1 0 1 0
1 0 1 0 1 1
0 0 1 0 1 0
0 1 1 0 1 1
1 0 0 0 1 0
1 0 1 0 1 1
0 0 0 0 1 0
0 0 0 1 1 1
0 0 0 1 0 0
0 0 0 1 1 1
![Page 29: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/29.jpg)
Resumo
• Várias formas de se medir cobertura de
código
• Ciclos
• Caminhos inalcançáveis
29
![Page 30: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/30.jpg)
EXERCÍCIO – MONTAR A SUITE DE TESTE PARA CALCULO DV CPF
![Page 31: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/31.jpg)
Fatorial public int fatorial(int valor){
int fat=1; if (valor<0){ System.out.println("Valor Negativo!!! Não é válido!!!"); fat=-1; } else { if (valor==0 || valor==1) return fat; else while (valor>0){ fat+=(fat*valor); valor--; } return fat;
}
![Page 32: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/32.jpg)
• Caminhos Básicos
1. 1, 2, 9
2. 1, 3, 5, 9
3. 1, 3, 4, 5, 9
4. 1, 3, 4, 6, 9
5. 1, 3, 4, 6, 7, 8, ..., 6, 9
public int fatorial(int valor){ int fat=1; if (valor<0){ System.out.println("Valor Negativo!!! Não é válido!!!"); fat=-1; } else { if (valor==0 || valor==1) return fat; else while (valor>0){ fat+=(fat*valor); valor--; } return fat;
}
![Page 33: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/33.jpg)
• Entradas
1. valor = -2 -> -1 "Valor Negativo!!! Não é válido!!!"
2. valor = 0 -> 1
3. valor = 1 -> 1
4. Inválido. Deveria entrar no “while”
5. valor = 5 -> 120
public int fatorial(int valor){ int fat=1; if (valor<0){ System.out.println("Valor Negativo!!! Não é válido!!!"); fat=-1; } else { if (valor==0 || valor==1) return fat; else while (valor>0){ fat+=(fat*valor); valor--; } return fat;
}
• Caminhos Básicos
1. 1, 2, 9
2. 1, 3, 5, 9
3. 1, 3, 4, 5, 9
4. 1, 3, 4, 6, 9
5. 1, 3, 4, 6, 7, 8, ..., 6, 9
![Page 34: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/34.jpg)
Exercício: Calculo DV CPF public class ValidaCPF { public static boolean isCPFValido(String CPF) { // considera-se erro CPF's formados por uma sequencia de numeros iguais if (CPF.equals("00000000000") || CPF.equals("11111111111") || CPF.equals("22222222222") || CPF.equals("33333333333") || CPF.equals("44444444444") || CPF.equals("55555555555") || CPF.equals("66666666666") || CPF.equals("77777777777") || CPF.equals("88888888888") || CPF.equals("99999999999") || (CPF.length() != 11)) return(false); char dig10, dig11; int sm, i, r, num, peso; // "try" - protege o codigo para eventuais erros de conversao de tipo (int) try {
![Page 35: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/35.jpg)
Calculo DV CPF try { // Calculo do 1o. Digito Verificador sm = 0; peso = 10; for (i=0; i<9; i++) { // converte o i-esimo caractere do CPF em um numero: // por exemplo, transforma o caractere '0' no inteiro 0 // (48 eh a posicao de '0' na tabela ASCII) num = (int)(CPF.charAt(i) - 48); sm = sm + (num * peso); peso = peso - 1; } r = 11 - (sm % 11); if ((r == 10) || (r == 11)) dig10 = '0'; else dig10 = (char)(r + 48); // converte no respectivo caractere numerico
![Page 36: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/36.jpg)
Calculo DV CPF // Calculo do 2o. Digito Verificador sm = 0; peso = 11; for(i=0; i<10; i++) { num = (int)(CPF.charAt(i) - 48); sm = sm + (num * peso); peso = peso - 1; } r = 11 - (sm % 11); if ((r == 10) || (r == 11)) dig11 = '0'; else dig11 = (char)(r + 48); // Verifica se os digitos calculados conferem com os digitos informados. if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10))) return(true); else return(false); } catch (InputMismatchException erro) { return(false); } }
![Page 37: Teste de Software - FACOMbacala/ES/20-TesteEstrutural.pdf · 3 Teste estrutural •Estrutura de um programa é um grafo •Exemplos: –Organização em árvore de pacotes e classes](https://reader034.fdocuments.net/reader034/viewer/2022042913/5f4b9306d7709e41a42b52ab/html5/thumbnails/37.jpg)
Calculo DV CPF // Verifica se os digitos calculados conferem com os digitos informados. if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10))) return(true); else return(false); } catch (InputMismatchException erro) { return(false); } }