SlideShare a Scribd company logo
1 of 18
Download to read offline
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
INTRODUÇÃO

 • 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).
GERAÇÃO DE DADOS PARA SOFTWARE O.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.
VALIDAÇÃO DA TÉCNICA
                                Ambiente utilizado:
                                - Microsoft Windows 7/64 bits
                                - Processador Intel 17 2.50GHz
                                - 4Gb RAM
                                - Java 1.6




                       Indivíduos        Tempo (segundos)
                          100                   0,109
                         1.000                  0,235
                        10.000                  0,766
                        100.000                 5,86
VALIDAÇÃO DA TÉCNICA
                     Formato JUnit




             Representação de Tonella (2004)
VALIDAÇÃO DA TÉCNICA
                     Formato JUnit




             Representação de Tonella (2004)
CONCLUSÃO

 • 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.
TRABALHOS FUTUROS

  • 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
REFERÊNCIAS

  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.

More Related Content

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

V SEGINFO: “Utilizando padrões abertos para Coleta de informações e Assessmen...
V SEGINFO: “Utilizando padrões abertos para Coleta de informações e Assessmen...V SEGINFO: “Utilizando padrões abertos para Coleta de informações e Assessmen...
V SEGINFO: “Utilizando padrões abertos para Coleta de informações e Assessmen...Clavis Segurança da Informação
 
Métricas Em Fabricas De Software
Métricas Em Fabricas De SoftwareMétricas Em Fabricas De Software
Métricas Em Fabricas De SoftwareLuiz Borba
 
Utilizando padroes abertos para coleta de informacoes e assessment em ativos ...
Utilizando padroes abertos para coleta de informacoes e assessment em ativos ...Utilizando padroes abertos para coleta de informacoes e assessment em ativos ...
Utilizando padroes abertos para coleta de informacoes e assessment em ativos ...SegInfo
 
Estimativa de Esforço
Estimativa de EsforçoEstimativa de Esforço
Estimativa de Esforçoelliando dias
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
Minicurso: O que o twitter está pensando? Extraindo informações do twitter ut...
Minicurso: O que o twitter está pensando? Extraindo informações do twitter ut...Minicurso: O que o twitter está pensando? Extraindo informações do twitter ut...
Minicurso: O que o twitter está pensando? Extraindo informações do twitter ut...Adolfo Guimaraes
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitRobinson Castilho
 
Testes de Unidade para C++
Testes de Unidade para C++Testes de Unidade para C++
Testes de Unidade para C++Ramiro Luz
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de softwareRondinelli Mesquita
 
Introdução a Testes de Software
Introdução a Testes de SoftwareIntrodução a Testes de Software
Introdução a Testes de SoftwareIgor Takenami
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoMarcius Brandão
 
Importância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do SoftwareImportância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do SoftwareEdison Moreira
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
Gerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aGerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aLeonardo Molinari
 

Similar to Geração Aleatória de Dados Para Programas Orientados a Objetos. (20)

V SEGINFO: “Utilizando padrões abertos para Coleta de informações e Assessmen...
V SEGINFO: “Utilizando padrões abertos para Coleta de informações e Assessmen...V SEGINFO: “Utilizando padrões abertos para Coleta de informações e Assessmen...
V SEGINFO: “Utilizando padrões abertos para Coleta de informações e Assessmen...
 
Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
 
Defesa Mestrado
Defesa MestradoDefesa Mestrado
Defesa Mestrado
 
Métricas Em Fabricas De Software
Métricas Em Fabricas De SoftwareMétricas Em Fabricas De Software
Métricas Em Fabricas De Software
 
1° Madrugada de Testes
1° Madrugada de Testes1° Madrugada de Testes
1° Madrugada de Testes
 
Utilizando padroes abertos para coleta de informacoes e assessment em ativos ...
Utilizando padroes abertos para coleta de informacoes e assessment em ativos ...Utilizando padroes abertos para coleta de informacoes e assessment em ativos ...
Utilizando padroes abertos para coleta de informacoes e assessment em ativos ...
 
Estimativa de Esforço
Estimativa de EsforçoEstimativa de Esforço
Estimativa de Esforço
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Minicurso: O que o twitter está pensando? Extraindo informações do twitter ut...
Minicurso: O que o twitter está pensando? Extraindo informações do twitter ut...Minicurso: O que o twitter está pensando? Extraindo informações do twitter ut...
Minicurso: O que o twitter está pensando? Extraindo informações do twitter ut...
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Testes de Unidade para C++
Testes de Unidade para C++Testes de Unidade para C++
Testes de Unidade para C++
 
Introdução ao Entity Framework 4
Introdução ao Entity Framework 4Introdução ao Entity Framework 4
Introdução ao Entity Framework 4
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de software
 
Introdução a Testes de Software
Introdução a Testes de SoftwareIntrodução a Testes de Software
Introdução a Testes de Software
 
POO - Aula 1 introducao
POO - Aula 1   introducaoPOO - Aula 1   introducao
POO - Aula 1 introducao
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
 
Importância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do SoftwareImportância do Teste Unitário na Qualidade do Software
Importância do Teste Unitário na Qualidade do Software
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Gerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aGerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2a
 
Processo e Processo de Software
Processo e Processo de SoftwareProcesso e Processo de Software
Processo e Processo de Software
 

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

  • 1. 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
  • 2. INTRODUÇÃO • 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.
  • 3. 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).
  • 4. GERAÇÃO DE DADOS PARA SOFTWARE O.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.
  • 5. GERAÇÃO DE DADOS PARA SOFTWARE O.O.
  • 6. GERAÇÃO DE DADOS PARA SOFTWARE O.O.
  • 7. 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.
  • 8. 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.
  • 9. 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;
  • 10. 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.
  • 11. 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.
  • 12. 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.
  • 13. VALIDAÇÃO DA TÉCNICA Ambiente utilizado: - Microsoft Windows 7/64 bits - Processador Intel 17 2.50GHz - 4Gb RAM - Java 1.6 Indivíduos Tempo (segundos) 100 0,109 1.000 0,235 10.000 0,766 100.000 5,86
  • 14. VALIDAÇÃO DA TÉCNICA Formato JUnit Representação de Tonella (2004)
  • 15. VALIDAÇÃO DA TÉCNICA Formato JUnit Representação de Tonella (2004)
  • 16. CONCLUSÃO • 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.
  • 17. TRABALHOS FUTUROS • 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
  • 18. REFERÊNCIAS 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.