Testes e Depuração de Software

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

description

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 os possíveis caminhos (módulo limitações). Dados concretos e simbólicos. Concreto - PowerPoint PPT Presentation

Transcript of Testes e Depuração de Software

Page 1: Testes e Depuração de Software

Testes e Depuração de Software

Slides preparados por Bruno Monteiro e Marcelo d’Amorim

Execução simbólica - 24/09/2009

Page 2: Testes e Depuração de Software

Gerar dados de testes de forma automática◦ Explora todos os possíveis caminhos (módulo

limitações)

Execução Simbólica: Objetivo

Page 3: Testes e Depuração de Software

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

Dados concretos e simbólicos

Page 4: Testes e Depuração de Software

Entrada e Saída (King, 1976)

Execução Simbólica

f(int x, int y)REQ1(x,y)REQ2(x,y)

REQn(x,y)

Page 5: Testes e Depuração de Software

Entrada e Saída (King, 1976)

Execução Simbólica

f(int x, int y)REQ1(x,y)REQ2(x,y)

REQn(x,y)

REQi denota um requisito de entrada sobre x e y na forma de uma expressão simbólica

Page 6: Testes e Depuração de Software

Entrada e Saída

Exec. Simb.

f(int x, int y)

REQ1(x,y)

REQ2(x,y)

REQn(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

Page 7: Testes e Depuração de Software

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

Path Condition (PC)

Page 8: Testes e Depuração de Software

f(int x, int y){if(x = y){

... }else{

... }}

Exemplo 1: Fork

Fork na execução PC1: $a = $b PC2: $a != $b

f($a,$b) produzPC1 = ($a = $b) PC2 = $a != $b

Page 9: Testes e Depuração de Software

f(int x, int y){if(x = y){

... }else{

... }}

Exemplo 1: Fork

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.

Page 10: Testes e Depuração de Software

f(int x, int y){x = x + yif(x = y){ ... }else{ ... }

}

Exemplo 2: Estado simbólico

Fork na execução PC1: $a + $b = $b PC2: $a + $b != $b

Page 11: Testes e Depuração de Software

Suporte para◦ Métodos Nativos◦ Loop e recursão◦ Indexação de Arrays ◦ Strings◦ Referências

Desafios

fuzzing

Interpretação especial de operadores

Page 12: Testes e Depuração de Software

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.

Referências

Page 13: Testes e Depuração de Software

f(T t){if(t == null){

... }

... }

Exemplo 3: Tipo referência

Fork na execução PC1: $t == null PC2: $t != null

Page 14: Testes e Depuração de Software

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)

Lazy Initialization

Page 15: Testes e Depuração de Software

foo(String s, String t){ s.equals(t)

}

Exemplo 4: Strings

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 s1, ..., sn, t1, ..., tn) Não assumir tamanho das entradas

Page 16: Testes e Depuração de Software

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

Strings e autômatos

Page 17: Testes e Depuração de Software

f(String s){

s.startWith(“ola ”)

}

Exemplo 5: Valores associados a string s em pontos do programa

l a

Σ*

Σ*

o

Page 18: Testes e Depuração de Software

Soluções para strings podem ser obtidas com uma

visita no autômato

Page 19: Testes e Depuração de Software

f(String s){s.startWith(“ola ”)

if (s.endsWith(“ turma”) && s.length() > 9) {

} ...}

Exemplo 5: Valores associados a string s em pontos do programa

o l a

u r m

Σ+

t

a