Post on 05-Jan-2016
description
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:– 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
4
Control-Flow Graph (CFG)
stmt0;while (condA){ if (condB){ stmt1; stmt2; } stmt3;}stmt4
5
CFG
stmt0;while (condA){ if (condB){ stmt1; stmt2; } stmt3;}stmt4
stmt0
condA
stmt1;
stmt2;
stmt3
condBstmt4
6
Simplificação didática
• Testar a estrutura de um programa equivale a testar um grafo
• O que é um teste? (Para um grafo)
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
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).
Cobertura de Grafos
9
b
c
a
f
d
e
t0
t1 t6
t2
t3
t4
t5
stmt0
condA
stmt1;
stmt2;
stmt3
condBstmt4
10
Cobertura de Grafos
• Exemplo de teste– t0, t6
10
b
c
a
f
d
e
t0
t1 t6
t2
t3
t4
t5
11
Critérios de adequação de grafo
• Nó
• Transição
• Caminho
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
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
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
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
Caminhos inalcançáveis
16
Há caminhos inalcançáveis no programa: não há execução que o visite.
Caminhos inalcançáveis
17
if (a < 0) { a = 0;}if (a > 10) { a = 10;}skip();
a < 0
a = 0a > 10
a = 10skip
18
Caminhos inalcançáveis
• Enumere os caminhos do grafo
a < 0
a = 0a > 10
a = 10skip
19
Caminhos inalcançáveis
• Enumere os caminhos do grafo
a < 0
a = 0a > 10
a = 10skip
20
Caminhos inalcançáveis
• Todos estes caminhos são alcancáveis?
if (a < 0) { a = 0;}if (a > 10) { a = 10;}skip();
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?
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• …
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
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
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
MC/DC
• Objetivo é isolar efeito de cada condição básica no resultado de toda expressão
26
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 {…}}
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
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
Resumo
• Várias formas de se medir cobertura de código
• Ciclos
• Caminhos inalcançáveis
29