37
Teste Estrutural

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

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

• 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

• 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

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

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

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

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); } }