290 likes | 464 Views
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
E N D
Testeestrutural • 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 stmt0; while (condA){ if (condB){ stmt1; stmt2; } stmt3; }stmt4 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
a t0 t4 b t1 t6 c f t2 t5 d t3 e Cobertura de Grafos stmt0 condA condB stmt4 stmt1; stmt2; stmt3 9
a t0 t4 b t1 t6 c f t2 t5 d t3 e Cobertura de Grafos • Exemplo de teste • t0, t6 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
a t0 t4 b t1 t6 c f t2 t5 d t3 e 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 15
Caminhos inalcançáveis Há caminhos inalcançáveis no programa: não há execução que o visite. 16
Caminhos inalcançáveis a < 0 if (a < 0) { a = 0; } if (a > 10) { a = 10; } skip(); 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 b c d e T 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 a b c d e T 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 1 28
Resumo • Várias formas de se medir cobertura de código • Ciclos • Caminhos inalcançáveis 29