teste estrutural. 2 teste estrutural teste baseado na estrutura do código mais precisamente,...

29
Teste Estrutural

Upload: eugenio-salgado-tome

Post on 07-Apr-2016

237 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

Teste Estrutural

Page 2: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

3

Teste estrutural

• Estrutura de um programa é um grafo• Exemplos:

– Parser gera uma AST– Fluxo de controle de um método define CFG– Fluxo de chamada de métodos define CG

Page 4: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

4

Control-Flow Graph (CFG)

stmt0;while (condA){ if (condB){ stmt1; stmt2; } stmt3;}stmt4

Page 5: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

5

CFG

stmt0;while (condA){ if (condB){ stmt1; stmt2; } stmt3;}stmt4

stmt0

condA

stmt1;

stmt2;

stmt3

condB

stmt4

Page 6: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

9

Cobertura de Grafos

stmt0

condA

stmt1;

stmt2;

stmt3

condB

stmt4

b

c

a

f

d

e

t0

t1 t6

t2

t3

t4

t5

Page 10: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

10

Cobertura de Grafos

• Exemplo de teste– t0, t6

b

c

a

f

d

e

t0

t1 t6

t2

t3

t4

t5

Page 11: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

11

Critérios de adequação de grafo

• Nó• Transição• Caminho

Page 12: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

12

Critérios de adequação de grafo

• Nó– Teste suíte TS é adequado a nó se para cada nó

n no grafo G existe t em TS que cobre n• Transição• Caminho

Page 13: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

13

Critérios de adequação de grafo

• Nó– Teste suíte TS é adequado a nó se para cada nó

n no grafo G existe t em TS que cobre n• Transição• Caminho

Grafos com ciclos possuem números infinito de caminhos

Page 14: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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?b

c

a

f

d

e

t0t1 t6

t2

t3

t4

t5

Page 16: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

Caminhos inalcançáveis

16

É possível existir caminhos inalcançáveis no programa. Isto é, não há execução que o visite.

Page 17: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

Caminhos inalcançáveis

17

if (a < 0) { a = 0;}if (a > 10) { a = 10;}skip();

condA

condB

stmt1

stmt2

stmt3

Page 18: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

18

Caminhos inalcançáveis

condA

condB

stmt1

stmt2

stmt3

• Enumere os caminhos do grafo

Page 19: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

19

Caminhos inalcançáveis

condA

condB

stmt1

stmt2

stmt3

• Enumere os caminhos do grafo

Page 20: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

20

Caminhos inalcançáveis

• Estes caminhos são alcancáveis?

if (a < 0) { a = 0;}if (a > 10) { a = 10;}skip();

Page 21: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 StatementBranch subsumes Basic-block

Page 24: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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, mas varie C e o resultado de toda expressão. RTCA/DO-178B, EUROCAE ED-12b

Page 26: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

MC/DC

• Objetivo é isolar efeito de cada condição básica no resultado de toda expressão

26

Page 27: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

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 Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

Solução

• ((((a || b) && c) || d) && e)

28

a b c d e T0 0 1 0 1 0 1 0 1 0 1 10 0 1 0 1 00 1 1 0 1 11 0 0 0 1 01 0 1 0 1 10 0 0 0 1 0 0 0 0 1 1 10 0 0 1 0 00 0 0 1 1 1

Page 29: Teste Estrutural. 2 Teste estrutural Teste baseado na estrutura do código Mais precisamente, –Critério de adequação baseia-se no código!

Resumo

• Várias formas de se medir cobertura de código

• Ciclos• Caminhos inalcançáveis

29