Teste Estrutural Teste estrutural Teste baseado na estrutura
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) stmt 0; while (cond. A){ if (cond. B){ stmt 1; stmt 2; } stmt 3; } stmt 4 4
CFG stmt 0; while (cond. A){ if (cond. B){ stmt 1; stmt 2; } stmt 3; } stmt 4 stmt 0 cond. A cond. B stmt 4 stmt 1; stmt 2; stmt 3 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 Path. Finder (Java), Verisoft (C), Spin (Promela). 8
Cobertura de Grafos a stmt 0 t 4 b cond. A t 1 cond. B c stmt 4 t 2 stmt 1; stmt 2; t 6 f t 5 d stmt 3 e 9
Cobertura de Grafos • Exemplo de teste a – t 0, t 6 t 0 t 4 b t 1 t 6 c t 2 f t 5 d t 3 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? t 0 t 4 t 1 t 2 b c t 6 f t 5 d t 3 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-178 B, EUROCAE ED-12 b 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 c 1 1 1 1 0 1 0 0 0 0 d 0 0 0 0 1 1 1 e 1 1 1 1 0 1 T 0 1 0 1 0 1 28
Resumo • Várias formas de se medir cobertura de código • Ciclos • Caminhos inalcançáveis 29
- Slides: 29