Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.