Geração Aleatória de Dados Para Programas Orientados a Objetos.

18
Fernando H. Ferreira 1 , Márcio E. Delamaro 2 , Marcos L. Chaim 1 , Fátima L. S. Nunes 1 e Auri M. Vincenzi 3 1 Escola de Artes, Ciências e Humanidade (EACH) Universidade de São Paulo – São Paulo, SP – Brasil 2 Instituto de Ciências Matemáticas e de Computação (ICMS) Universidade de São Paulo – São Carlos, SP – Brasil 3 Instituto de Informática (INF) Universidade Federal de Goiás – Goiânia, GO – Brasil

description

A geração aleatória de indivíduos de teste é muito utilizada por técnicas de geração de dados de teste como Têmpera Simulada, Subida de Encosta e Algoritmos Evolucionários. Este artigo descreve uma nova técnica de geração aleatória de indivíduos de teste para programas escritos em linguagens orientadas a objetos. Diferentemente das anteriores, a técnica proposta permite a geração aleatória de valores para tipos primitivos e objetos, geração de valores para vetores e uso de geração aleatória dirigida de valores. Validações iniciais mostram que os custos para gerar dados de teste são limitados. A técnica descrita é parte de um arcabouço para geração de dados de teste.

Transcript of Geração Aleatória de Dados Para Programas Orientados a Objetos.

Page 1: Geração Aleatória de Dados Para Programas Orientados a Objetos.

Fernando H. Ferreira1, Márcio E. Delamaro2, Marcos L. Chaim1, Fátima L. S. Nunes1 e Auri M. Vincenzi3

1 Escola de Artes, Ciências e Humanidade (EACH) Universidade de São Paulo – São Paulo, SP – Brasil 2 Instituto de Ciências Matemáticas e de Computação (ICMS) Universidade de São Paulo – São Carlos, SP – Brasil 3 Instituto de Informática (INF) Universidade Federal de Goiás – Goiânia, GO – Brasil

Page 2: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Testes manuais são custosos e consomem muito tempo.

• Técnicas de geração automática de dados de teste permitem a redução do custo de desenvolvimento e aumento da qualidade do software.

• Muitas destas técnicas de geração de dados de teste utilizam a geração aleatória de dados como um passo essencial.

INTRODUÇÃO

Page 3: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Normalmente a geração aleatória é feita para parâmetros primitivos.

• Mas nem todos os parâmetros são tipos primitivos…

• A geração aleatória deve ser adaptada a orientação a objetos (OO).

INTRODUÇÃO

Page 4: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Ao contrário do software procedimental, o software OO nem sempre se comporta da mesma maneira ao executarmos o mesmo método com os mesmos valores de entrada.

• O estado de um objeto, em um dado momento, pode modificar o comportamento de seus métodos.

GERAÇÃO DE DADOS PARA SOFTWARE O.O.

Page 5: Geração Aleatória de Dados Para Programas Orientados a Objetos.

GERAÇÃO DE DADOS PARA SOFTWARE O.O.

Page 6: Geração Aleatória de Dados Para Programas Orientados a Objetos.

GERAÇÃO DE DADOS PARA SOFTWARE O.O.

Page 7: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Técnica de geração aleatória de dados de teste:

– Vetores;

– Instâncias de objetos;

– Tipos primitivos;

– Uso de valores aleatórios dirigidos.

• Esta técnica faz parte de um framework gerador de dados de teste e funciona de modo complementar a outras técnicas de geração de dados de teste.

GERAÇÃO DE DADOS PARA SOFTWARE O.O.

Page 8: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Leitura do bytecode

– Pré-processamento necessário para identificação de todas as dependências da classe sob teste.

– Sempre que a dependência a um objeto é identificada é preciso identificar suas respectivas dependências.

– Este processo evita a releitura do bytecode durante a geração aleatória de objetos.

GERAÇÃO DE DADOS PARA SOFTWARE O.O.

Page 9: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Geração de indivíduos

– Criação do indivíduo • Criação de uma instância da classe sob teste;

• Composto por: um construtor, métodos intermediários e o método sob teste;

• Esta criação de indivíduos também é executada para parâmetros que são objetos.

– Atribuição de valores aleatórios

• Leitura da estrutura do objeto criado;

• Geração de valores aleatórios para tipos primitivos;

GERAÇÃO DE DADOS PARA SOFTWARE O.O.

Page 10: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Geração dirigida de valores aleatórios

– Passagem de valores que direcionem a geração aleatória de valores dos tipos primitivos.

– Direcionam o domínio de entrada a um intervalo específico de valores.

– A geração aleatória dirigida é ideal em cenários nos quais temos conhecimento dos possíveis domínios de entrada esperados pelos métodos sob teste.

– Este recurso é útil, pois torna a geração aleatória de valores menos abrangente e mais precisa.

GERAÇÃO DE DADOS PARA SOFTWARE O.O.

Page 11: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Geração de valores para vetores

– Reutiliza as lógicas para geração de valores aleatórios para objetos e tipos primitivos.

– Identificação do tipo de dados base do vetor.

– Geração de um tamanho aleatório para o vetor.

– Geração de valores para cada indivíduo do vetor.

GERAÇÃO DE DADOS PARA SOFTWARE O.O.

Page 12: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Formatos para exportação dos dados gerados

– Representação de indivíduos proposta por Tonella (2004).

– Classes de teste no formato Junit.

GERAÇÃO DE DADOS PARA SOFTWARE O.O.

Page 13: Geração Aleatória de Dados Para Programas Orientados a Objetos.

VALIDAÇÃO DA TÉCNICA

Indivíduos Tempo (segundos)

100 0,109

1.000 0,235

10.000 0,766

100.000 5,86

Ambiente utilizado: - Microsoft Windows 7/64 bits - Processador Intel 17 2.50GHz - 4Gb RAM - Java 1.6

Page 14: Geração Aleatória de Dados Para Programas Orientados a Objetos.

VALIDAÇÃO DA TÉCNICA

Formato JUnit

Representação de Tonella (2004)

Page 15: Geração Aleatória de Dados Para Programas Orientados a Objetos.

VALIDAÇÃO DA TÉCNICA

Formato JUnit

Representação de Tonella (2004)

Page 16: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Vantagens da técnica:

– Geração aleatória de indívíduos para programas escritos em linguagens orientadas a objetos.

– Geração de valores para tipos primitivos, objetos e vetores.

– Geração aleatória dirigida de valores.

– Exportação dos resultados em dois formatos.

– Custo reduzido para geração de indivíduos de teste.

CONCLUSÃO

Page 17: Geração Aleatória de Dados Para Programas Orientados a Objetos.

• Construção de um framework gerador de dados de teste que inclua diversas técnicas de geração de dados.

• Uso de benchmarks mais expressivos

TRABALHOS FUTUROS

Page 18: Geração Aleatória de Dados Para Programas Orientados a Objetos.

Miraz, M., Lanzi, P. L., e Baresi, L. (2009). Testful: Using a hybrid evolutionary algorithm for testing stateful systems. Genetic and Evolutionary Computation Conference, pages 1947–1948.

Pacheco, C. e Ernst, M. (2007). Randoop: feedback-directed random testing for Java. Object-Oriented Programming, Systems, Languages & Applications, Montreal, Canada.

Pacheco, C., Lahiri, S., e Ball, T. (2008). Finding Errors in .Net with Feedback-Directed Random Testing. International Symposium on Software Testing and Analysis, Seattle, WA, USA.

Silva, L. S. e van Someren, M. (2010). Evolutionary testing of object-oriented software. Association for Computing Machinery - Symposium on Applied Computing, pages 1126–1130.

Tonella, P. (2004). Evolutionary Testing of Classes. ITC-irst Centro per la Ricerca Scientifica e Tecnologica, Italia.

REFERÊNCIAS