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

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

Slides preparados por Bruno Monteiro e Marcelo dAmorim Execução simbólica - 24/09/2009.

Apresentações semelhantes


Apresentação em tema: "Slides preparados por Bruno Monteiro e Marcelo dAmorim Execução simbólica - 24/09/2009."— Transcrição da apresentação:

1 Slides preparados por Bruno Monteiro e Marcelo dAmorim Execução simbólica - 24/09/2009

2 Gerar dados de testes de forma automática Explora todos os possíveis caminhos (módulo limitações)

3 Concreto Exemplo: Fui à escola hoje, 3, new Integer(3) Simbólico Exemplo: $a + 3, $s.indexOf(a) != -1 Valor Simbólico representa um conjunto de valores concretos

4 Execução Simbólica f(int x, int y) REQ 1 (x,y) REQ 2 (x,y) REQ n (x,y)

5 Execução Simbólica f(int x, int y) REQ 1 (x,y) REQ 2 (x,y) REQ n (x,y) REQ i denota um requisito de entrada sobre x e y na forma de uma expressão simbólica

6 Exec. Simb. f(int x, int y) REQ 1 (x,y) REQ 2 (x,y) REQ n (x,y) Constraint Solver f(2,3) f(-1,-1) f(0,0) Gera restrições simbólicas Resolve restrições. Isto é, instancia variáveis simbólicas

7 Representa condições suficientes para execução alcançar um ponto do programa Forma: Conjunção de restrições b1 Λ b2 Λ... bn Faz parte do estado de uma execução simbólica

8 f(int x, int y){ if(x = y){... }else{... } } Fork na execução PC1: $a = $b PC2: $a != $b f($a,$b) produz PC1 = ($a = $b) PC2 = $a != $b

9 f(int x, int y){ if(x = y){... }else{... } } Fork na execução PC1: $a = $b PC2: $a != $b Nota: Exemplo ilustrativo. Considere chamada de funções, loops, encadeamento de condicionais, e outros operadores relacionais e booleanos.

10 f(int x, int y){ x = x + y if(x = y){... }else{... } Fork na execução PC1: $a + $b = $b PC2: $a + $b != $b

11 Suporte para Métodos Nativos Loop e recursão Indexação de Arrays Strings Referências fuzzing Interpretação especial de operadores

12 Referência S. Khurshid, C. Pasareanu and W. Visser. Generalized Symbolic Execution for Model Checking and Testing. TACAS 2003 Strings D. Shannon, S. Hajra, A. Lee, D. Zhan, and S. Khurshid. Abstracting Symbolic Execution with String Analysis. TAIC-PART 2007.

13 f(T t){ if(t == null){... }... } Fork na execução PC1: $t == null PC2: $t != null

14 Só inicializa os objetos no momento em que são usados Derreferência (ou seja, r.) requer lazy initialization Três possibilidade para o valor de uma referência: null, objeto novo, objeto existente (alias)

15 foo(String s, String t){ s.equals(t) } Operadores da linguagem geram restrições. Por exemplo, equals, indexOf, substring, etc. Duas opções de tratamento: s e t têm tamanho fixo n. Equivalente a: foo(int s 1,..., s n, t 1,..., t n ) Não assumir tamanho das entradas

16 Valor simbólico de uma string $a é caracterizado pelo autômato que reconhece a linguagem com todas possíveis strings concretas associadas a $a

17 f(String s){ s.startWith(ola ) } la Σ*Σ* Σ*Σ* o

18 Soluções para strings podem ser obtidas com uma visita no autômato

19 f(String s){ s.startWith(ola ) if (s.endsWith( turma) && s.length() > 9) { }... } o la urm Σ+Σ+ t a


Carregar ppt "Slides preparados por Bruno Monteiro e Marcelo dAmorim Execução simbólica - 24/09/2009."

Apresentações semelhantes


Anúncios Google