Upload
eugenio-salgado-tome
View
239
Download
2
Embed Size (px)
Citation preview
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
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
condB
stmt4
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).
9
Cobertura de Grafos
stmt0
condA
stmt1;
stmt2;
stmt3
condB
stmt4
b
c
a
f
d
e
t0
t1 t6
t2
t3
t4
t5
10
Cobertura de Grafos
• Exemplo de teste– t0, t6
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 é adequado a nó se para cada nó
n no grafo G existe t em TS que cobre n• Transição• Caminho
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
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?b
c
a
f
d
e
t0t1 t6
t2
t3
t4
t5
Caminhos inalcançáveis
16
É possível existir caminhos inalcançáveis no programa. Isto é, não há execução que o visite.
Caminhos inalcançáveis
17
if (a < 0) { a = 0;}if (a > 10) { a = 10;}skip();
condA
condB
stmt1
stmt2
stmt3
18
Caminhos inalcançáveis
condA
condB
stmt1
stmt2
stmt3
• Enumere os caminhos do grafo
19
Caminhos inalcançáveis
condA
condB
stmt1
stmt2
stmt3
• Enumere os caminhos do grafo
20
Caminhos inalcançáveis
• 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, mas varie 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
Resumo
• Várias formas de se medir cobertura de código
• Ciclos• Caminhos inalcançáveis
29