Teste Estrutural
Teste estrutural
• Teste baseado na estrutura do código
• Mais precisamente,
– Critério de adequação baseia-se no código!
2
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
3
Control-Flow Graph (CFG)
stmt0;
while (condA){
if (condB){
stmt1; stmt2;
}
stmt3;
}
stmt4
4
CFG
stmt0;
while (condA){
if (condB){
stmt1; stmt2;
}
stmt3;
}
stmt4
stmt0
condA
condB
stmt4
stmt1;
stmt2;
stmt3
5
Simplificação didática
• Testar a estrutura de um programa
equivale a testar um grafo
• O que é um teste? (Para um grafo)
6
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
7
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).
8
Cobertura de Grafos
a
stmt0
t0
t4
b
condA
t1
condB
c
stmt4
t2
stmt1;
stmt2;
t6
f
t5
d
stmt3
t3
e
9
Cobertura de Grafos
• Exemplo de teste
a
– t0, t6
t0
t4
b
t1
t6
c
t2
f
t5
d
t3
e
10
10
Critérios de adequação de grafo
• Nó
• Transição
• Caminho
11
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
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
Grafo com ciclo possui número
infinito de caminhos
13
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
14
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
a
até N transições?
t0
t4
t1
t2
b
c
t6
f
t5
d
t3
e
15
15
Caminhos inalcançáveis
Há caminhos inalcançáveis no programa:
não há execução que o visite.
16
Caminhos inalcançáveis
if (a < 0) {
a = 0;
}
if (a > 10) {
a = 10;
}
skip();
a < 0
a = 0
a > 10
a = 10
skip
17
Caminhos inalcançáveis
• Enumere os caminhos do grafo
a < 0
a = 0
a > 10
a = 10
skip
18
Caminhos inalcançáveis
• Enumere os caminhos do grafo
a < 0
a = 0
a > 10
a = 10
skip
19
Caminhos inalcançáveis
• Todos estes caminhos são
alcancáveis?
if (a < 0) {
a = 0;
}
if (a > 10) {
a = 10;
}
skip();
20
Caminhos inalcançáveis
• Estes caminhos são alcancáveis?
if (a < 0) {
a = 0;
}
if (a > 10) {
a = 10;
}
skip();
a < 0 => NOT(a > 10)
21
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
…
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
…
Basic-block subsumes Statement
Branch subsumes Basic-block
23
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
24
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
25
MC/DC
• Objetivo é isolar efeito de cada condição
básica no resultado de toda expressão
26
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 {…}
}
27
Solução
• ((((a || b) && c) || d) && e)
a
0
1
0
0
1
1
0
0
0
0
b
0
0
0
1
0
0
0
0
0
0
c
1
1
1
1
0
1
0
0
0
0
d
0
0
0
0
0
0
0
1
1
1
e
1
1
1
1
1
1
1
1
0
1
T
0
1
0
1
0
1
0
1
0
1
a
0
1
0
0
1
1
0
0
0
0
b
0
0
0
1
0
0
0
0
0
0
c
1
1
1
1
0
1
0
0
0
0
d
0
0
0
0
0
0
0
1
1
1
e
1
1
1
1
1
1
1
1
0
1
T
0
1
0
1
0
1
0
1
0
1
28
Resumo
• Várias formas de se medir cobertura de
código
• Ciclos
• Caminhos inalcançáveis
29
Download

0 a = 0 a