A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Teste Simbólico Marcelo d’Amorim

Apresentações semelhantes


Apresentação em tema: "Teste Simbólico Marcelo d’Amorim"— Transcrição da apresentação:

1 Teste Simbólico Marcelo d’Amorim damorim@cin.ufpe.br

2 Objetivo Explorar espaço de estados de forma mais sistemática – Usa constraint solvers (CS) para isto

3 Execução Simbólica Executa programa com valores simbólicos – Explora vários caminhos quando uma decisão não pode ser feita de forma determinística – Constrói para cada caminho uma condição de caminho (PC) – CS soluciona PC para gerar um teste com valores concretos

4 Exemplo void foo (int x, float y, Tree z) { … if (x > y) { … } else { … if (z == null) { … } else { … } … }

5 Exemplo: Valor simbólico void foo (int x, float y, Tree z) { … if (x > y) { … } else { … if (z == null) { … } else { … } … } Domínio de int, float e Tree é simbólico! – E.g., x=$a onde $a pode assumir qualquer valor inteiro

6 Exemplo: Caminhos e expressões void foo (int x, float y, Tree z) { … if (x > y) { … } else { … if (z == null) { … } else { … } … } Fluxo de controle define caminho de execução – E.g., !($a > $b) & $c=null define um caminho em foo($a,$b,$c)

7 Árvore de decisão Uma escolha precisa ser feita quando não é possível decidir o resultado de uma expressão $a > $b $c == null

8 Árvore de decisão Uma escolha precisa ser feita quando não é possível decidir o resultado de uma expressão $a > $b $c == null Condição de caminho (PC)

9 Path Condition (PC) Execução simbólica retorna um conjunto de PCs como resultado CSs gera dados concretos. Exemplo: !($a > $b) & $c=null define um caminho em foo($a,$b,$c) O vetor [$a = 8, $b=9.0, $c=new Tree()] satisfaz a restrição !($a > $b) & $c=null e pode ser usado como entrada de foo

10 Tipos ponteiro Em Java, expressões relacionais de ponteiro: E1 op E2, op em {==,!=} void foo (int x, float y, Tree z) { … if (x > y) { … } else { … if (z == null) { … } else { … } … } Neste caminho, variável z armazena valor concreto do tipo árvore com valores simbólicos em seus campos. (similar a lazy evaluation)

11 Principal limitação em Execução Simbólica Restrições podem usar lógica indecidível ao constraint solver – Por exemplo, aritmética não linear ($a^2 > $b)

12 Execução Concreta + Simbólica (Godefroid et al., 2005) 1.Sorteia um vetor de entrada 2.Executa o programa com valores concretos – visita apenas um caminho. Porém, acumula PCs pendentes naquela visita 3.Descobre solução (vetor de entrada) para um dos PCs pendentes (random. ou com CS) 4.Volta ao passo 2

13 Leitura relacinada James King. Symbolic Execution and Program Testing. CACM, 1976. Godefroid et al., DART: Directed Automated Random Testing, PLDI, 2005


Carregar ppt "Teste Simbólico Marcelo d’Amorim"

Apresentações semelhantes


Anúncios Google