Testes e Depurao de Software Slides preparados por

  • Slides: 19
Download presentation
Testes e Depuração de Software Slides preparados por Bruno Monteiro e Marcelo d’Amorim Execução

Testes e Depuração de Software Slides preparados por Bruno Monteiro e Marcelo d’Amorim Execução simbólica - 24/09/2009

Execução Simbólica: Objetivo � Gerar dados de testes de forma automática ◦ Explora todos

Execução Simbólica: Objetivo � Gerar dados de testes de forma automática ◦ Explora todos os possíveis caminhos (módulo limitações)

Dados concretos e simbólicos � Concreto ◦ Exemplo: “Fui à escola hoje”, 3, new

Dados concretos e simbólicos � Concreto ◦ Exemplo: “Fui à escola hoje”, 3, new Integer(3) � Simbólico ◦ Exemplo: $a + 3, $s. index. Of(‘a’) != -1 � Valor Simbólico representa um conjunto de valores concretos

Entrada e Saída (King, 1976) f(int x, int y) Execução Simbólica REQ 1(x, y)

Entrada e Saída (King, 1976) f(int x, int y) Execução Simbólica REQ 1(x, y) REQ 2(x, y) REQn(x, y)

Entrada e Saída (King, 1976) f(int x, int y) Execução Simbólica REQ 1(x, y)

Entrada e Saída (King, 1976) f(int x, int y) Execução Simbólica REQ 1(x, y) REQ 2(x, y) REQn(x, y) denota um requisito de entrada sobre x e y na forma de uma expressão simbólica REQi

Entrada e Saída f(2, 3) f(-1, -1) REQ 1(x, y) f(int x, int y)

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

Path Condition (PC) � Representa condições suficientes para execução alcançar um ponto do programa

Path Condition (PC) � Representa condições suficientes para execução alcançar um ponto do programa � Forma: � Conjunção � Faz de restrições b 1 Λ b 2 Λ. . . bn parte do estado de uma execução simbólica

Exemplo 1: Fork f(int x, int y){ if(x = y){ Fork na execução. .

Exemplo 1: Fork f(int x, int y){ if(x = y){ Fork na execução. . . PC 1: $a = $b }else{. . . } PC 2: $a != $b } f($a, $b) produz §PC 1 = ($a = $b) §PC 2 = $a != $b

Exemplo 1: Fork f(int x, int y){ Nota: Exemplo ilustrativo. if(x = y){ Fork

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

Exemplo 2: Estado simbólico f(int x, int y){ x = x + y if(x

Exemplo 2: Estado simbólico f(int x, int y){ x = x + y if(x = y){ Fork na execução. . . PC 1: $a + $b = $b }else{. . . PC 2: $a + $b != $b } }

Desafios � Suporte ◦ ◦ ◦ para Métodos Nativos Loop e recursão Indexação de

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

Referências � Referência ◦ S. Khurshid, C. Pasareanu and W. Visser. Generalized Symbolic Execution

Referências � 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.

Exemplo 3: Tipo referência f(T t){ if(t == null){ Fork na execução. . .

Exemplo 3: Tipo referência f(T t){ if(t == null){ Fork na execução. . . PC 1: $t == null }. . . PC 2: $t != null }

Lazy Initialization � Só inicializa os objetos no momento em que são usados �

Lazy Initialization � 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)

Exemplo 4: Strings foo(String s, String t){ s. equals(t) } � Operadores da linguagem

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

Strings e autômatos � Valor simbólico de uma string $a é caracterizado pelo autômato

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

Exemplo 5: Valores associados a string s em pontos do programa Σ* f(String s){

Exemplo 5: Valores associados a string s em pontos do programa Σ* f(String s){ s. start. With(“ola ”) } o Σ* l a

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

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

Exemplo 5: Valores associados a string s em pontos do programa f(String s){ s.

Exemplo 5: Valores associados a string s em pontos do programa f(String s){ s. start. With(“ola ”) if (s. ends. With(“ turma”) && s. length() > 9) { }. . . } Σ+ o l a u r m a t