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
18
Embed
Geração Aleatória de Dados Para Programas Orientados a Objetos.
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.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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
• 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
• 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
• 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.
GERAÇÃO DE DADOS PARA SOFTWARE O.O.
GERAÇÃO DE DADOS PARA SOFTWARE O.O.
• 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.
• 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.
• 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.
• 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.
• 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.
• 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.
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
VALIDAÇÃO DA TÉCNICA
Formato JUnit
Representação de Tonella (2004)
VALIDAÇÃO DA TÉCNICA
Formato JUnit
Representação de Tonella (2004)
• 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
• 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
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.