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

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

Teste de Software 15: Geração randômica de teste Marcelo d’Amorim

Apresentações semelhantes


Apresentação em tema: "Teste de Software 15: Geração randômica de teste Marcelo d’Amorim"— Transcrição da apresentação:

1 Teste de Software 15: Geração randômica de teste Marcelo d’Amorim damorim@cin.ufpe.br

2 Problema Espaço de estados da aplicação é enorme –Muitas operações –Muitos dados Que sequência de operações escolher? Que dado construir?

3 Teste Randômico Constrói sequência e dados tomando decisões randômicas

4 Teste Randômico Mostrou sucesso em vários casos –Ideal: explorar espaço de estados de forma uniforme (dependendo do gerador aleatório) Caminhos de um programa

5 Exemplo: ling. funcional Como gerar dados para a função ML split? local fun split_iter (x::xs, left, right) = split_iter(xs, right, x::left) | split_iter ([ ], left, right) = (left, right) in fun split(x) = split_iter(x,[ ],[ ]) end;

6 Exemplo: ling. funcional Como gerar dados para a função ML split? local fun split_iter (x::xs, left, right) = split_iter(xs, right, x::left) | split_iter ([ ], left, right) = (left, right) in fun split(x) = split_iter(x,[ ],[ ]) end; Assumindo tipo de split: int list => (int list, int list) –primeiro gera-se inteiros e lista vazia, depois listas mais complexas

7 Generalização Gera-se dados recursivamente, baseado na definição de tipo –Passo 1: Gerar átomos –Passo 2: Gerar objetos estruturados

8 Outro exemplo: Tipos estruturados datatype inttree = empty | node of int * inttree * inttree;

9 Passo 1: Gerar átomos intinttree -5, -2, 0, 2, 5e Usa-se construtores elementares: datatype inttree = empty | node of int * inttree * inttree; e = empty

10 Passo 1: Gerar objetos estruturados intinttree -5, -2, 0, 2, 5e, (-2,e,e), (5,e,e) Usa-se construtores elementares: datatype inttree = empty | node of int * inttree * inttree; Iteração 1

11 Passo 1: Gerar objetos estruturados intinttree -5, -2, 0, 2, 5e, (-2,e,e), (5,e,e), (0, (-2,e,e),e), (0,e, (5,e,e)), (0, (-2,e,e), (5,e,e)) Usa-se construtores elementares: datatype inttree = empty | node of int * inttree * inttree; Iteração 2 cópias!

12 Limitação Não considera invariantes do programa –Exemplos Programa com comportamento especial para listas ordenadas de tamanho N Programa que aceita apenas árvores com o tamanho da sub-árvore esquera 2x o da direita

13 Falta de invariantes na geração Duas soluções: –Usar código para construir dados Código precisa construir valores relevantes –E.g. como testar caso lista ordenada em um algoritmo de ordenação –Execução simbólica Sucesso depende de limitações de um SAT solver

14 Teste randômico de programas OO

15 Randoop Contratos (Oracles) default –Mas o usuário pode definir os seus É necessário definir região para geração! –Teste de unidade Aplica redução de suíte –Baseada em equals, null, e exceções –Usuário pode definir seus critérios de filtro Não explora particularidade de oo –E.g., polimorfismo

16 Terminologia Randoop gera sequências como estas Cada sequência gera mais de um valor –s1.1 (b1), s2.1 (b2), s3.1 e s3.2 (a1 e b3)

17 Feedback-directed random test generation. Carlos Pacheco et al., ICSE 2007

18 randomSeqsAndVals:

19 Feedback-directed random test generation. Carlos Pacheco et al., ICSE 2007 extend:


Carregar ppt "Teste de Software 15: Geração randômica de teste Marcelo d’Amorim"

Apresentações semelhantes


Anúncios Google