Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouIgor Ponte Alterado mais de 9 anos atrás
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:
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.