Вы находитесь на странице: 1из 48

PONTIFCIA UNIVERSIDADE CATLICA DE MINAS GERAIS

Cincia da Computao

Lorena Danielle Gonalves Bento

GERAO AUTOMATIZADA DE DADOS DE TESTE E ANLISE DA


COBERTURA DE DESVIO

Belo Horizonte
2015
Lorena Danielle Gonalves Bento

GERAO AUTOMATIZADA DE DADOS DE TESTE E ANLISE DA


COBERTURA DE DESVIO

Monografia apresentada ao programa de Bacha-


relado em Cincia da Computao da Pontifcia
Universidade Catlica de Minas Gerais, como re-
quisito parcial para obteno do ttulo de Bacharel
em Cincia da Computao.

Orientador: Carlos Alberto Marques Pietrobon

Belo Horizonte
2015
Lorena Danielle Gonalves Bento

GERAO AUTOMATIZADA DE DADOS DE TESTE E ANLISE DA


COBERTURA DE DESVIO

Monografia apresentada ao programa de Bacha-


relado em Cincia da Computao da Pontifcia
Universidade Catlica de Minas Gerais, como re-
quisito parcial para obteno do ttulo de Bacharel
em Cincia da Computao.

Carlos Alberto Marques Pietrobon

Manoel Palhares Moreira

Tadeu dos Reis Faria

Belo Horizonte, 11 de Junho de 2015


RESUMO

Os softwares possuem grande impacto na sociedade atual, sendo cada vez mais presen-
tes em diversas reas e espaos. A qualidade de software uma propriedade essencial na
garantia da conformidade dos requisitos. O teste de software a prtica mais utilizada na
minimizao do nmeros de defeitos e na garantia da qualidade de software, no entanto,
uma das etapas que mais consomem tempo e recursos no processo de desenvolvimento
de software.
A atividade de teste consome cerca de 50% dos recursos totais do projeto (HAR-
ROLD, 2000) e 50% do tempo gasto no desenvolvimento do cdigo (BEIZER, 1990). A
tarefa de automatizao para gerao de dados de teste ainda difcil e complexa de ser
automatizada, sendo este um problema equivalente ao problema da parada (HOWDEN,
1975).
O presente trabalho tem por objetivo a implementao de uma ferramenta para ge-
rao automatizada de dados de testes e anlise de cobertura de desvio para softwares
desenvolvidos na linguagem Java. Para isto, foi desenvolvida uma heurstica aplicada
a ferramenta desenvolvida, DataGen, que gera dados de teste e apresenta uma anlise
detalhada da cobertura dos dados de testes gerados.
Este trabalho compara tambm os resultados obtidos frente a outras formas descritas
na literatura.

Palavras-chave: Teste de Software. Gerao de Dados de Teste. Cobertura de Desvio.


LISTA DE FIGURAS

FIGURA 1 Hierarquia de Terminologias. . . . . . . . . . . . . . . . . . . . . . . . 13


FIGURA 2 Hierarquia de Estratgias. . . . . . . . . . . . . . . . . . . . . . . . . 14
FIGURA 3 Gerao de Dados de Teste Utilizando AG. . . . . . . . . . . . . . . . 18

FIGURA 4 Atividades Realizadas. . . . . . . . . . . . . . . . . . . . . . . . . . . 19

FIGURA 5 Diagrama de Casos de Uso. . . . . . . . . . . . . . . . . . . . . . . . 21


FIGURA 6 Diagrama de Classe. . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
FIGURA 7 Grafo de Controle de Fluxo. . . . . . . . . . . . . . . . . . . . . . . . 26
FIGURA 8 Tela Inicial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
FIGURA 9 Tela Seleo de Comando. . . . . . . . . . . . . . . . . . . . . . . . . 30
FIGURA 10 Tela Caminho do Arquivo. . . . . . . . . . . . . . . . . . . . . . . . . 31
FIGURA 11 Tela Resultados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
FIGURA 12 Tela Resultados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
FIGURA 13 Tela Detalhamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

FIGURA 14 Taxa de Mutao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39


FIGURA 15 Cobertura de Desvios sem Condies Aninhadas. . . . . . . . . . . . 39
FIGURA 16 Mdia da Cobertura de Desvio. . . . . . . . . . . . . . . . . . . . . . 40
FIGURA 17 Cobertura de Desvios com Condies Aninhadas. . . . . . . . . . . . 40
FIGURA 18 Mdia da Cobertura de Desvio. . . . . . . . . . . . . . . . . . . . . . 41
LISTA DE TABELAS

TABELA 1 Analogia entre Soluo de Problemas e Evoluo Natural . . . . . . 17

TABELA 2 Tabela de Desvio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

TABELA 3 Descrio dos Algoritmos de Teste sem Condies Aninhadas . . . . 37


TABELA 4 Descrio dos Algoritmos de Teste com Condies Aninhadas . . . . 38

TABELA 5 Taxa de Mutao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

TABELA 6 Cobertura de Desvio sem Fluxos Aninhados . . . . . . . . . . . . . . 47


TABELA 7 Cobertura de Desvio com Fluxos Aninhados . . . . . . . . . . . . . . 48
LISTA DE SIGLAS

VV&T Verificao, Validao e Teste


ISTQB International Software Testing Qualifications Board
AE Algoritmo Gentico
AE Algoritmo Evolutivo
GCF Grafo de Controle de Fluxo
CE Computao Evolucionria
AM Aprendizado de Mquina
SUMRIO

1 INTRODUO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1 Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2 Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.1 Objetivos Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.2 Objetivos Especficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 REFERENCIAL TERICO . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1 Orientao a objetos e a linguagem de programao Java . . . . . . . . 11
2.1.1 Tipos primitivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Teste de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 Falha, Erro e Defeito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 Estratgia de Testes de Software . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5 Teste Estrutural ou Caixa-Branca . . . . . . . . . . . . . . . . . . . . . . . 14
2.6 Tcnicas baseadas em Estrutura ou Caixa-Branca . . . . . . . . . . . . . 15
2.6.1 Teste de Instruo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.2 Teste de Desvio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.7 Gerao de Dados de Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.8 API Java Reflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.9 Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4 DATAGEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1 Descrio da Ferramenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2 Requisitos Funcionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.3 Casos de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.4 Diagrama de Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.5 Heurstica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.6 Camada de Apresentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.7 Camada de Negcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5 Anlise da Cobertura de Desvio e Comparaes . . . . . . . . . . . . . . . 34


5.1 Abordagens Comparativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.1.1 Algoritmo Gentico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.1.2 Algoritmo de Gerao Aleatria . . . . . . . . . . . . . . . . . . . . . . . 36
5.2 Descries dos Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.3 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.3.1 Sem Desvios Aninhados . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.3.2 Com Desvios Aninhados . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

6 CONCLUSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Referncias Bibliogrficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Apndice ATaxa de Mutao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Apndice B Anlise Estatstica dos Dados Coletados . . . . . . . . . . . . . 46


9

1 INTRODUO

A Engenharia de Software surgiu da necessidade do estabelecimento de padres e


tcnicas no processo de desenvolvimento de software a fim de amenizar as causas que
levaram ao fracasso diversos projetos nos anos 70. Desde ento, foram realizados diversos
trabalhos a fim de aperfeioar o processo de desenvolvimento de software, tais como,
metodologias geis, orientao a objetos e tcnicas de validao e verificao.
Com o surgimento de fundamentos, tcnicas, padres e mtodos, houve uma evoluo
natural dos softwares que adquiriram um patamar de grande importncia social, sendo
capazes de fornecer solues e automatizar tarefas das mais diversas reas. Parte dessas
aplicaes apresentam mdulos de riscos tanto para os usurios finais quanto para a em-
presa detentora do software, sendo portanto imprescindvel o aperfeioamento de tcnicas
de validao, verificao e teste. Apesar dos notveis progressos nos processos de desen-
volvimento de software impulsionados pelos aperfeioamentos no campo da Engenharia
de Software, a produo de softwares com qualidade satisfatria dentro das estimativas e
custos estipuladas continua sendo uma rdua tarefa.
O teste, parte da Verificao, Validao e Teste, uma atividade crtica da garantia
de qualidade de software. Segundo Pressman (2006), o custo de um defeito progressivo,
ou seja, encontrar um defeito na fase inicial do processo de desenvolvimento tem custo de
1, enquanto encontrar um defeito durante as fases finais pode representar um custo 100
vezes maior. A aplicao de testes nas fases iniciais dos projetos , portanto, fundamental
na garantia da qualidade e na conteno do oramento.
Os testes de software podem ser divididos em dois grupos com caractersticas e focos
distintos, sendo eles o teste de funcional e teste estrutural, tambm denominados teste
caixa preta e teste caixa branca. Ao contrrio do teste funcional, o teste estrutural avalia
o comportamento interno do componente de software, trabalhando diretamente sobre o
cdigo fonte do componente de software para avaliar aspectos tais como: teste de condio,
teste de fluxo de dados, teste de ciclos e teste de caminhos lgicos (PRESSMAN, 2006).
Na aplicao da tcnica estrutural, a tarefa de gerao de dados de teste a mais difcil
e complexa de ser automatizada devido a fatores, tais como: complexidade do cdigo e
trechos de cdigo no executveis; sendo este um problema equivalente ao problema da
parada, no qual consiste em determinar se um programa executar indefinidamente dada
uma descrio de programa e uma entrada finita (HOWDEN, 1975).
Neste trabalho apresentada uma ferramenta de gerao e anlise de dados de tes-
tes utilizando a tcnica estrutural, para tal, foi elaborada e desenvolvida uma heurstica,
aproximao computacional que reduz a busca por solues em domnios pouco compreen-
didos. Para realizar esse estudo, foram utilizados e analisados os resultados de 16 cdigos
fontes em Java.
Este trabalho est dividido em seis captulos. O Captulo 2 apresenta o referencial
terico sobre teste. Neste captulo sero discutidos as principais tcnicas de teste de
software estrutural e sero apresentados trabalhos relacionados. O Captulo 3 discute a
metodologia utilizada para a realizao da anlise proposta no presente trabalho. O Ca-
ptulo 4 apresenta a metodologia proposta, assim como detalhes da ferramenta utilizada.
O Captulo 5 apresenta grficos comparativos, dados, anlises e os resultados obtidos. O
Captulo 6 apresenta as concluses e indicaes de trabalhos futuros.
10

1.1 Justificativa

A atividade de teste atualmente uma das atividades mais utilizadas para garantir
a qualidade durante o desenvolvimento de software. Partindo dos princpios que o teste
exaustivo impossvel de ser alcanado e que grande parte das falhas esto concentradas
em pequenos mdulos do sistema (GRAHAM, 2012), uma ferramenta de suporte para
gerao de dados e de anlise do cdigo fonte de suma importncia.

1.2 Problema

O teste uma etapa fundamental no processo de desenvolvimento de software, sendo


uma das atividades mais utilizadas na rea de Garantia da Qualidade; representa uma
das etapas de maior custo e no possui garantias de sucesso. A etapa de gerao de dados
de teste, alm de crtica, demanda tempo e esforo, contribuindo significantemente para
o consumo do oramento dos projetos. Ainda, a automatizao da gerao de dados de
teste um problema computacionalmente indecidvel.

1.3 Objetivos

1.3.1 Objetivos Gerais

O objetivo o desenvolvimento de uma heurstica para gerao de dados de teste


automatizada aplicada a uma ferramenta desenvolvidade denominada DataGen.

1.3.2 Objetivos Especficos

Gerar dados que exercitem todas os comandos dos cdigos fontes analisados;

Comparar atravs de mtricas os efeitos do uso da metodologia apresentada frente


as apresentadas em trabalhos anteriores;

Analisar a cobertura de teste a partir dos resultados gerados.


11

2 REFERENCIAL TERICO

Neste captulo sero apresentados os principais conceitos e trabalhos relacionados ao


presente trabalho. Inicialmente, sero apresentados conceitos sobre o paradigma orientado
a objetos, os tipos de dados suportados e conceitos sobre tcnicas e estratgias de testes,
alm de serem apresentadas algumas tcnicas de testes baseadas em estrutura. Sero
discutidos os principais trabalhos relacionados ao desenvolvimento desta monografia.

2.1 Orientao a objetos e a linguagem de programao Java

A orientao a objetos foi introduzida como um novo conceito de programao nos


anos 60. Este conceito representa os dados compostos por classes e por objetos no qual
possuem uma arquitetura baseada em vrias camadas (PRESSMAN, 2006).
Atualmente o paradigma da orientao a objetos o mais utilizado no mercado, su-
perando o paradigma estrutural. Esse esse fato se deve em muito a difuso da linguagem
Java. O Java uma linguagem que fornece alta escalabilidade e reusabilidade.

2.1.1 Tipos primitivos

A linguagem de programao Java fortemente tipificada, isso significa que todas as


variveis devem ser declaradas antes de serem utilizadas. Esta linguagem suporta 08 tipos
de dados primitivos, a ferramenta desenvolvida e apresentada neste trabalho suporta 05
dos 08 tipos. Os 05 tipos esto descritos a seguir:

Short: O tipo short suporta inteiros de 2 bytes (16 bits) e pode armazenar inteiros
entre -32.768 a 32.767.

Int: O tipo int o tipo de dado mais comum. Suporta inteiros de 4 bytes (32 bits)
e pode armazenar inteiros entre -2.147.483.648 e 2.147.483.647.

Long: O tipo long o tipo de dado com maior alcance entre os inteiros. Suporta
inteiros de 8 bytes (64 bits) e pode armazenar inteiros entre -9.22E+18 (exatos
-9.223.372.036.854.775.808) e 9.22E+18 (exatos 9.223.372.036.854.775.807).

Float: O tipo float o tipo mais comum de dado para nmero decimal. Su-
porta nmeros de 4 bytes (32 bits) e pode armazenar nmeros entre 1.4E-45 e
3.4028235E+38.

Double: O tipo double representa nmeros em notao de ponto flutuante normali-


zada em preciso dupla de 8 bytes em conformidade com a norma IEEE 754-1985,
podendo armazenar nmeros entre 4.94065645841246544e-324 e
1.7976931348623157e+308.
12

2.2 Teste de Software

Teste de software o processo que compreende executar ou analisar sistemas compu-


tacionais a fim de se encontrar erros (MYERS; SANDLER, 2004), sendo portanto consi-
derada uma atividade destrutiva e no construtiva. uma investigao do software
que prov informaes relacionadas a qualidade do produto sob teste (KANER, 2006).
O processo antecipado e contnuo de teste reduz os riscos da ocorrncia de defeitos e
antecipa as correes, contribuindo significantemente para a qualidade do sistema, pois,
ao submeter antecipadamente sob teste artefatos como documentaes e cdigos, o custo
de eventuais correes cerca de 10 vezes menor se comparado correes em estgios
mais avanados (MYERS; SANDLER, 2004).
O teste de software apresenta um dos grandes desafios da engenharia de software,
a entrega de produtos em um curto espao de tempo e com um oramento estipulado
compromete a qualidade de software, testes de baixa qualidade podem mascarar defeitos
e prover informaes errneas sobre a qualidade do produto. No entanto, a deteco e
execuo de todas as possveis formas de entrada tecnicamente invivel em sistemas de
mdio ou grande porte (PAN, 1999).
Sistemas de mdio e grande porte possuem alta complexidade, tornando o processo
de teste complexo e demorado, alm disso, desenvolvedores e testadores normalmente so
afetados por eventos alheios, tais como: distrao, presso e limitaes do ser humano,
dessa forma impossvel garantir a iseno de defeitos em mdulos e testes. Portanto,
para qualquer sistema computacional complexo, no possvel garantir e eliminar defeitos
por completo (PAN, 1999).
A engenharia de software, na qual o teste uma das atividades, evoluiu significamente
nos ltimos anos devido aos avanos e ao surgimento de tcnicas, critrios, mtodos,
ferramentas e metodologias sensveis ao contexto. No entanto, a atividade de teste no
acompanhou o acelerado ritmo, este fato se deve exclusivamente aos problemas advindos
da rea de teste, tais como: a impossibilidade de se garantir que um mdulo no possui
defeitos ou que o software est em conformidade com os requisitos (MYERS; SANDLER,
2004).
O teste de software uma tarefa onerosa, mas o no teste ainda mais dispensioso.
A atividade de teste quando bem executada, reduz correes e retrabalhos, diminuindo
os custos e aumentando a qualidade final do produto.

2.3 Falha, Erro e Defeito

O processo de testes de software possui terminologias nas quais a compreenso


fundamental para o entendimento dos diferentes processos de teste. Segundo o ISTQB,
a definio das terminologias: erro, defeito e falha a seguinte:

Erro (engano), ao humana que produz um resultado diferente do esperado, como


uma falha escrita em um cdigo.

Defeito (bug), o resultado de um erro no cdigo que se executado gera uma ano-
malia no funcionamento do mesmo.
13

Falha, execuo de um defeito no cdigo.

Conforme a Figura 1, possvel observar uma ordem entre as terminologias, no entanto,


nem todos os erros resultam em defeito, assim como nem todo defeito resulta em um erro.

Figura 1 Hierarquia de Terminologias

Fonte: Elaborada pela autora

2.4 Estratgia de Testes de Software

Uma estratgia de testes de software um roteiro bem definido que integra tcnicas de
projeto de casos de teste e descreve os estgios a serem abordados (unidade, integrao,
sistema e aceitao) e seus respectivos objetivos e atividades. Um template de software
definido serve como um guia nas execues de testes (PRESSMAN, 2006). Este roteiro
serve como uma ferramenta de ganho de resultado durante o processo de desenvolvimento
de software.
As estratgias de testes possuem as seguintes classificaes: teste de unidade, teste de
integrao e teste de sistema. Neste presente trabalho a estratgia analisada a de teste
de unidade. Para maior compreenso, as estratgias esto descritas conforme segue:

Teste de Unidade: a estratgia na qual a menor parte do sistema testada in-


dividualmente, ou seja, os mdulos que compem o sistema so testados a fim de
garantir que esto funcionando conforme o especificado. Esta estratgia de teste
tem como base o teste caixa branca. O objetivo central isolar partes do sistema e
garantir o perfeito funcionamento de cada uma delas, no entanto, esta estratgia no
garante que a integrao dessas partes ir funcionar corretamente. Os mdulos so
testados por tcnicas que exercitam caminhos condicionais para garantir completa
cobertura e mxima deteco de erros.

Teste de Integrao: a estratgia que visa provocar falhas relativas s interfaces


entre os mdulos quando esses so integrados para construir a estrutura do soft-
ware, sendo portanto uma tcnica sistemtica. O propsito do teste de integrao
a verificao de requisitos funcionais e no funcionais, tais como: desempenho e
confiabilidade.

Teste de Sistema: avalia o software em busca de falhas por meio da utilizao do


mesmo, como se fosse um usurio final. Dessa maneira, os testes so executados nos
mesmos ambientes, com as mesmas condies e com os mesmos dados de entrada que
um usurio utilizaria no seu dia-a-dia de manipulao do software. So realizados
geralmente por um restrito grupo de usurios finais do sistema. Esses simulam
operaes de rotina do sistema de modo a verificar se seu comportamento est de
acordo com o solicitado.
14

Teste de aceitao: fase no qual o teste conduzido pelo cliente, geralmente os testes
so realizados por um grupo de usurios finais do sistema que simulam operaes
de rotina. O principal objetivo verificar se os critrios de validao previamente
estabelecidos esto corretos. Existem duas estratgias comuns para implementar
um teste de aceitao conforme descritas abaixo:

Teste alfa: realizado no ambiente da organizao em que o produto foi de-


senvolvido. O objetivo deste teste relatar erros e problemas de uso atravs
da utilizao de um grupo restrito de usurios ou por uma equipe de teste
independente.
Teste beta: realizado em uma ou mais instalaes do cliente. O objetivo
deste teste obter um feedback do clientes ou dos usurios antes do sistema
entrar em produo.

Figura 2 Hierarquia de Estratgias

Fonte: Elaborada pela autora

A estratgia de teste de unidade, base para as demais estratgias, o foco da gerao


automatizada de dados de testes na utilizao da ferramenta DataGen.

2.5 Teste Estrutural ou Caixa-Branca

Teste estrutural, tambm conhecido como teste caixa-branca ou white-box testing,


um mtodo de teste de software que avalia o comportamento interno de uma aplica-
o, baseando-se exclusivamente no cdigo fonte. O objetivo do teste estrutural testar
detalhes procedimentais (MYERS, 1979), sendo portanto exercido por um testador de
software. Este tipo de teste complementa os demais tipos de teste, pois verifica diferentes
classes de defeitos.
15

Inicialmente as tcnicas estruturais eram propostas apenas para teste de unidade de


algoritmos procedimentais, limitando-se ao escopo da unidade. Paralelamente ao cresci-
mento do uso do paradigma Orientado a Objetos, o uso de tcnicas estruturais passaram
a serem aplicadas aos testes de integrao e a algoritmos com Orientao a Objetos, sendo
adaptados em diversos contextos (BARBOSA, 2007).
O teste estrutural desenvolvido analisando-se e elaborando-se casos de teste que
cubram todas as possibilidades de cada componente do software, podendo ser aplicado
em diversos nveis de testes, tais como: teste de unidade, de integrao e de sistema. So
utilizados dentro do teste estrutural vrios tipos de teste na implementao do programa
como: teste de instruo, teste de deciso, teste de condio, teste de caminho, teste de
chamada de procedimento, teste de fluxo de dados e testes baseados na complexidade do
programa (PEZZ, 2008).
O uso do teste estrutural recomendado principalmente nas fases de teste de unidade
e teste de integrao, cuja responsabilidade principal fica a cargo dos desenvolvedores do
software, que por usa vez possuem domnio do cdigo fonte produzido.

2.6 Tcnicas baseadas em Estrutura ou Caixa-Branca

Ao analisar a estrutura interna de um software possvel derivar casos de testes que


visam garantir que todos as decises de um mdulo sejam exercitados pelo menos uma
vez ou que todas decises sejam testadas para TRUE e FALSE.

2.6.1 Teste de Instruo

Cobertura de instruo o mais simples dentre os testes de cobertura. Sendo definido


como a porcentagem de sentenas ou comando executveis que foram exercitadas por um
conjunto de caso de testes e pode ser aplicado diretamente sobre o cdigo fonte.

2.6.2 Teste de Desvio

Cobertura de desvio definida como a porcentagem dos resultados de deciso que


foram exercitados por um conjunto de caso de testes, testando as condies tanto para
TRUE quanto para FALSE. Este teste mais eficiente que o anterior, uma vez que 100%
da cobertura de desvio garante 100% da cobertura de instruo, mas o contrrio no
ocorre. Este critrio engloba o Teste de Instruo.
16

Algorithm 1: Diviso
1: a = 5;
2: b = 0;
3: c = 0;
Algoritmo 1 4: if condio then
5: b = 1;
6: end if
7: c = a/b;

Fonte: Elaborada pela autora

No Algoritmo 1, se a condio for TRUE, o exemplo atingir 100% de cobertura de


comandos, mas ainda assim, apresenta um erro (diviso por zero). A cobertura de desvio
checa a condio tanto para TRUE quanto para FALSE, levando a apresentao da falha.

2.7 Gerao de Dados de Teste

A gerao de dados de teste o esforo em se estabelecer dados de entrada que sero


executados no software. Um dos principais objetivos dentro da atividade de software a
automatizao desta tarefa, contudo, existem fatores que dificultam a mesma, tais como:

Correo coincidente: ocorre quando aps um sistema que apresenta e exerce um


defeito, um resultado correto coincidentemente obtido;

Caminhos no executveis: ocorre quando existe algum trecho de cdigo que no


pode ser executado independentemente dos valores atribudos variveis.

A obteno de um conjunto de dados de propsito geral no computvel, as particu-


laridades de mdulos, dentre os fatores listados acima, tornam esta alternativa invivel.
A enumerao exaustiva das entradas de um software tambm impossvel (MCMINN,
2004). Dessa forma, os estudos de gerao de dados de teste devem-se basear exclusiva-
mente em critrios especficos previamente estabelecidos. Os testes estruturais normal-
mente cobrem entre de 55% a 60% os caminhos lgicos de um software (GLASS, 1992).

2.8 API Java Reflection

A Sun (ORACLE, 2010) define a API Reflection como a capacidade de um programa


examinar ou modificar o comportamento de outro programa dependendo da necessidade
e/ou valores encontrados.
A API Java Reflection, que constituda dos pacotes java.lang.reflect e java.lang.class,
suporta a introspeco de cdigos e permite a criao de chamadas em tempo de execuo.
O ncleo da API Java Reflection detm uma API com suporte introspeco sobre
classes e objetos na Mquina Virtual Java (GRAND; KNUDSEN, 1997).
A API Java Reflection pode ser usada para:

obter os identificadores de mtodos, variveis e construtores;


17

invocar mtodos de classe;


acessar e modificar atributos de objetos;
construir instncias.

A API Java Reflection possui baixo acoplamento independentemente do tipo de objeto,


dessa forma possvel trabalhar com os diversos tipos de dados em quaisquer situaes.

2.9 Trabalhos Relacionados

Nesta seo sero apresentados os principais trabalhos relacionados ao desenvolvimento


desta monografia.
O teste uma atividade que at pouco tempo no tinha grande destaque, no entanto,
estudos antigos focados na gerao automatizada de dados de testes so encontrados na
literatura. Em 1983, (BIRD; MUNOZ, 1983) apresentaram uma das primeiras abordagens
para gerao de dados de teste, nesta abordagem os de casos de testes so produzidos de
forma aleatria, ou seja, a gerao realizada sem nenhuma referncia ao cdigo. Esta
abordagem ainda utilizada em larga escala na indstria e apresenta vantagens, tais
como: baixo custo e rpida disponibilizao de teste, em contrapartida, esta abordagem
possui em geral baixa cobertura de desvios.
Os algoritmos genticos (AG), uma classe particular de algoritmos evolutivos (AE),
so recorrentes em diversos trabalhos na literatura. Esta abordagem tem por objetivo a
evoluo de uma populao de indivduos candidatos a soluo atravs de combinaes
e mutaes genticas, de forma que a aptido mdia da populao seja incrementada
de forma sistemtica (ABREU, 2006). Nesta abordagem, frequentemente so utilizadas
analogias, a Tabela 1 apresenta os principais termos a fim de melhorar o entendimento da
abordagem.

Tabela 1 Analogia entre Soluo de Problemas e Evoluo Natural


Termo Analogia
Candidato a Soluo Cromossomo / Indivduo
Componentes de soluo genes
Possveis valores para cada componente alelos
Posio na sequncia lcus
Estrutura da soluo codificada gentipo
Estrutura decodificada da soluo fentipo
Fonte: (ABREU, 2006)

Seguindo as analogias, os candidatos a solues do problema so chamados de in-


divduos e o conjunto inicial de solues denominado populao. Cada indivduo
normalmente caracterizado por um vetor binrio que representa os valores reais.
A cada iterao, so aplicados mtodos de seleo, combinao e mutao na populao
inicial a fim de originar uma nova gerao a cada fim de uma iterao, dessa forma, as
populaes geradas se aproximam da soluo. (ABREU, 2006)
Ali (ALI et al., 2010) apresentou um diagrama que sintetiza a gerao de dados de
testes por AG.
18

Figura 3 Gerao de Dados de Teste Utilizando AG

Fonte: Adaptado de (ALI et al., 2010)

A Figura 3 representa o diagrama da gerao de dados de testes por AG indepen-


demente da tcnica de teste empregada. Aps o estabelecimento dos dados de teste, da
funo objetivo, medida da proximidade da soluo em relao a um conjunto de par-
metros, e das caractersticas do AG, ocorrem iteraes at que a soluo seja encontrada.
Dado a natureza do problema, o uso de heursticas uma alternativa ao uso da AG
a ser explorada. Tse (TSE et al., 1994) apresentou um trabalho utilizando a linguagem
PROLOG para representar diagramas de fluxo de dados, estruturados e dicionrios de
dados. As especificaes expressas codificadas so transformadas em diagramas, o prximo
passo a avaliao dos diagramas seguindo um conjunto de critrios. O sistema utiliza
uma anlise sinttica recursiva com retrocesso (backtracking), a cada iterao produzido
um novo diagrama estruturado que submetido a uma nova avaliao. As heursticas
utilizadas por Tse (TSE et al., 1994) foram definidas por especialistas e engenheiros de
software.
Cross (CROSS, 1991) apresentou um trabalho analisando a cobertura de desvios uti-
lizando dados de teste de execues anteriores. Cross utilizou um sistema especialista em
gerao de dados de teste para coberturas adicionais. A cada iterao, os dados utilizados
e gerados na execuo anterior so aplicados em heursticas at que a cobertura desejada
sejam atingidas. As heursticas se baseam exclusivamente em dois pontos: o domnio das
variveis de entrada e o clculo percentual da diferena entre o caso de teste e o limite
da condio. A desvantagem do uso dessas heursticas a no deteco de caminhos no
executveis.
19

3 METODOLOGIA

A natureza deste trabalho de desenvolvimento de tecnologia e experimental. Alm


da implementao da ferramenta, foram realizadas anlises relativas aos dados gerados.
As seguintes atividades presentes na Figura 4 foram desenvolvidas neste trabalho.

Figura 4 Atividades Realizadas

Fonte: Elaborada pela autora

A definio de requisitos, primeira atividade desenvolvida, consistiu no estudo e nas


anlises das funcionalidades do sistema proposto e desenvolvido neste trabalho.
A segunda atividade realizada consistiu na modelagem do projeto da ferramenta Da-
taGen.
A terceira atividade desenvolvida foi a implementao da ferramenta DataGen e a
implementao de 16 cdigos fontes na linguagem Java para a realizao dos testes.
A quarta atividade executada no desenvolvimento do trabalho foi a execuo dos
testes, os dados obtidos aps a execuo foram coletados para anlises posteriores. Os
cdigos implementados para testes atenderam aos seguintes critrios:

Mnimo de um mtodo em cada arquivo de entrada;

Todos os mtodos so independentes;

Mnimo de um desvio em cada mtodo.

Os testes implementados foram ento submetidos ferramenta DataGen. A partir dos


dados obtidos das execues foram realizadas anlises sobre a cobertura de comandos.
20

4 DATAGEN

Este captulo apresenta a ferramenta DataGen. A Seo 4.1 contm a descrio da


ferramenta e expe os objetivos e detalhes de sua arquitetura e funcionamento. A Seo
4.2 contm a descrio dos requisitos e casos de uso relacionados ferramenta. A Seo
4.3 apresenta o caso de uso e a 4.4 o diagrama de classes. Por ltimo, a Seo 4.5 apresenta
e descreve as principais etapas e funcionalidades da heurstica aplicada.

4.1 Descrio da Ferramenta

A ferramenta DataGen tem por objetivo a gerao automatizada de dados de entrada,


assim como a anlise dos dados obtidos. Dado um cdigo de entrada, a ferramenta
apresenta valores de entradas para cada mtodo a fim de se obter uma srie de dados
que alcancem uma alta cobertura de desvios. A linguagem utilizada na implementao
da ferramenta foi a Java. DataGen possui 2782 linhas de cdigo e composto por oito
classes divididas entre as camadas de apresentao e negcio.

4.2 Requisitos Funcionais

Esta seo apresenta os requisitos levantados para o desenvolvimento da ferramenta e


os casos de uso relacionados aos mesmos.

Requisitos Funcionais

RF01 - A ferramenta deve permitir a insero de arquivo de cdigo fonte im-


plementado na linguagem Java.

RF02 - A ferramenta deve permitir a excluso do arquivo inserido.

RF03 - A ferramenta deve permitir processar o arquivo selecionado.

RF04 - A ferramenta deve gerar arquivos fontes derivados do arquivo fonte


inserido anteriormente.

RF05 - A ferramenta deve gerar para cada arquivo derivado uma srie de valores
de entrada.

RF06 - A ferramenta deve calcular a partir dos dados gerados a cobertura de


desvio.

RF07 - A ferramenta deve permitir a consulta dos dados estatsticos extrados


de cada arquivo.

RF08 - A ferramenta deve permitir a visualizao dos dados de teste gerados


e a porcentagem da cobertura.
21

4.3 Casos de Uso

A Figura 5 apresenta os casos de uso identificados a partir dos requisitos funcionais


especificados anteriormente.

Figura 5 Diagrama de Casos de Uso

Fonte: Elaborada pela autora


22

4.4 Diagrama de Classes

O relacionamento entre as classes do sistema e o agrupamento das mesmas em camadas


esto representados no diagrama da Figura 6.

Figura 6 Diagrama de Classe

Fonte: Elaborada pela autora


23

4.5 Heurstica

Nesta seo, encontram-se descritas, brevemente, as principais etapas e funcionalidades


que constituem a heurstica utilizada na implementao da ferramenta DataGen. So elas:
1. Processamento do algoritmo: A primeira etapa consiste na anlise da classe de
entrada. Uma estrutura armazena dados relativos aos mtodos presentes na classe,
tais como: identificador, tipo de retorno, tipo de argumentos e os identificadores
dos argumentos.

2. Criao das classes Java: Para cada mtodo identificado no passo anterior, uma
classe java no diretrio classeGeradas criada. Cada classe gerada contm alm
de um dos mtodos do arquivo de entrada, os imports das bibliotecas, as variveis
globais, um vetor boleano identificado como flag entre outras modificaes e um
mtodo que retorna o nmero de desvios do mtodo identificado com o mesmo
nome da classe.
Durante a criao das classes, cinco modificaes relevantes so realizadas no
arquivo resultante. As modificaes esto listadas abaixo:

A primeira modificao instanciao das variveis globalmente. Todas as


variveis passam a possuir escopo global, este passo importante para que no
haja erros de compilao, acesso ao contedo aos valores e ao uso das variveis.
A segunda modificao a incluso de um mtodo identificado como getConta-
dorDecisoes que retorna o nmero de desvios contidos no mtodo identificado,
a contagem do nmero de desvios realizado durante a criao da classe.
A terceira modificao a alterao do tipo de retorno do mtodo identificado,
o retorno alterado para um objeto da classe Container, esta classe armazena
e manipula dados relativos os dados gerados durante a execuo.
A quarta modificao a insero da varivel denominada por flags, utilizada
na anlise da cobertura de desvios, antes de cada fechamento de bloco de
desvio.
A quinta e ltima modificao a incluso da varivel cont, esta varivel possui
escopo global e representa o ndice das chaves das estruturas de desvios.

Os algoritmos abaixo exemplificam as modificaes que so realizadas nesta


etapa.
24

Algorithm 2: Classe01
1: import java.util.ArrayList;
2:
3: public class Classe01{
4:
5: int var_global = 0;
6:
7: public static void metodo01(int a, int b){
8: int result = 0;
9: if (a + b > 10) then
10: result = a + b + var_global;
11: end if
12: if (a > b) then
13: result = a;
14: else if (a == 11) then
Classe 1 15: result = a;
16: end if
17: }
18:
19:
20: public static void metodo02(int c){
21: int result = 0;
22: if (c > 1) then
23: result = c + 15;
24: end if
25: if (result > 20) then
26: result = c;
27: end if
28: }
29: }
Fonte: Elaborada pela autora

O Algoritmo 2 contm dois mtodos identificados como: metodo01 e metodo02.


Aps a execuo da segunda etapa, o resultado ser a criao de duas classes iden-
tificadas como: Metodo01 e Metodo02. A classe Metodo01 exemplificada abaixo:
25

Algorithm 3: Metodo01
1: import java.util.ArrayList;
2:
3: class Metodo01{
4:
5: int result = 0;
6: int a = 0;
7: int b = 0;
8: int cont = 0;
9: Container container = new Container();
10:
11: public Container metodo01(int a, int b, String[][] matriz){
12: boolean[] flag = new boolean[getContadorDecisoes()];
13: result = 0;
14: container.setVariaveis(matriz, cont, a, b, c);
15: if (a + b > 10) then
16: result = a + b + var_global;
17: f lag[0] = true
18: cont++;
19: container.setVariaveis(matriz, cont, a, b, c);
20: end if
21: cont++;
22: container.setVariaveis(matriz, cont, a, b, c);
23: if (a > b) then
24: result = a;
25: f lag[1] = true
26: cont++;
27: container.setVariaveis(matriz, cont, a, b, c);
28: else if (a == 11) then
29: result = a;
30: f lag[2] = true
31: cont++;
32: container.setVariaveis(matriz, result+, a+, b+);
33: end if
34: return container.setFlag(flag);
35: return container;
36: }
37:
38: public int getContadorDecisoes(){ return 3; }
39:
40: }
Fonte: Elaborada pela autora

A classe identificada como Metodo01 criada no diretrio classesGeradas, as modifi-


caes mencionadas anteriormentes so visveis no arquivo resultante. Similarmente
a nova classe Metodo01, uma nova classe denominada Metodo02 criada no mesmo
diretrio, nesta classe est contido o segundo mtodo da classe de origem com as
cinco modificaes.

3. rvore Binria de Desvio: O fluxo de dados da classe analisada armazenado em


uma estrutura de rvore binria. A estrutura representa e atua como um (Grafo
de Controle de Fluxo), os nodos da rvore so objetos que armazenam informaes
sobre os blocos do cdigo. Cada nodo representa um desvio.
A Figura 7 ilustra um exemplo de um grafo de controle. Esta estrutura utilizada
para auxiliar a gerao de dados de estruturas de condies aninhadas e no controle
dos valores das variveis.
26

Figura 7 Grafo de Controle de Fluxo

Fonte: Elaborada pela autora

4. Tabela de Desvios: A cada iterao do algoritmo a estrutura que representa uma


tabela de desvio atualizada. O smbolo - representa que o desvio no foi alcanado
e portanto no executado, os smbolo "V"e "F"representam que o desvio foi execu-
tado, neste momento a ferramenta armazena dados de testes que exercita ao menos
um desvio condicional no cdigo. A estrutura de dados possui tamanho fixo de trs
colunas e N linhas, sendo N o nmero de desvios. A Tabela 2 uma representao
desta estrutura.

Tabela 2 Tabela de Desvio


Desvio T F
desvio 01 F V
desvio 02 - -
desvio ... F V
desvio N F V
Fonte: Elaborada pela autora
27

5. Engine: Aps a criao das classes modificadas, instanciao e inicializao de es-


truturas de dados e de variveis, as classes geradas so ento processadas. As etapas
deste processamento esto listadas abaixo:

Gerao de valores aleatrios para as cinco primeiras iteraes;


Execuo do mtodo central da classe gerada;
Clculo das diferenas entre valor de entrada e valor atualizado em cada nodo
da rvore;
Atualizao da tabela de desvios: cada atualizao resulta em uma descoberta
de valores de teste que so armazenados em uma estrutura de dados;
Clculo da cobertura de desvio.

A heurstica apresentada possui as duas condies de parada iniciais listadas a seguir:

A cobertura de desvio atinge 100%;


Esgotam-se as possibilidades de gerao de dados de teste e a cobertura no
atinge 100%.

A primeira condio de parada checada a cada iterao e pode ser alterada


durante as iteraes da heurstica. A segunda condio de parada ocorre ao fim da
ltima iterao de busca por valores que resultem em verdadeiro e falso em cada
desvio.
28

Heurstica
Algorithm 4: Heurstica
1: Processa o arquivo de entrada
2: Gera classes modificadas no diretrio
3: Preenche o vetor de classes.size classes com o caminho no diretrio das classes
4: vertices_possiveis = arvoreBinaria.quantidadeV ertices();
5: for i = 1 to classes.size do
6: Instancia rvoreBinria
7: Instancia TabelaDesvios
8: Instancia TabelaDados
9: for j = 1 to 5 do
10: Gera valores aleatrios para cada argumento
11: Invoca o mtodo da classe corrente com os valores gerados por parmetro
12: Atualiza rvoreBinria
13: Atualiza TabelaDesvios
14: Atualiza TabelaDados
15: Calcula Cobertura de Desvio
16: end for
17: if !condiesParada then
18: for j = 1 to vertices_possiveis do
19: if existePossibilidadeGerao() then
20: Gera valores aleatrios para cada argumento
21: Invoca o mtodo da classe corrente com os valores gerados por
parmetro
22: end if
23: Atualiza rvoreBinria
24: Atualiza TabelaDesvios
25: Atualiza TabelaDados
26: Calcula a diferena entre os valores gerados e os retornados
27: dif erenca = TabelaDados.diferenca(aleatorios, TabelaDados.valores);
28: tipo_operador = tipoOperador(desvio);
29: while existePossibilidadeGerao() and !condiesParada() do
30: f lag_desvio = tipoCondio();
31: if f lag_desvio then
32: if tipo_operador.operadorRelacional() then
33: if tipoOperao(tipo_operador, <, <=) then
34: TabelaDados.ladoDireitoSoma(diferenca);
35: TabelaDados.ladoEsquerdoSubstrai(diferenca);
36: else if tipoOperao(tipo_operador, >, >=) then
37: TabelaDados.ladoEsquerdoSoma(diferenca);
38: TabelaDados.ladoDireitoSubstrai(diferenca);
39: end if
40: else if tipo_operador.operadorIgualdade() then
41: if tipoOperao(tipo_operador, ==) then
42: TabelaDados.iguala(ladoEsquerdo, ladoDireto);
43: else if tipoOperao(tipo_operador, !=) then
44: TabelaDados.difere(ladoEsquerdo, ladoDireto);
45: end if
46: end if
47: end if
48: Invoca o mtodo da classe corrente com os valores da tabela por
parmetro
49: Atualiza TabelaDados
50: Calcula Cobertura de Desvio
51: end while
52: end for
53: end if
54: end for
Fonte: Elaborado pela autora
29

O Algoritmo 4 apresenta o funcionamento da Heurstica na busca por valores em


que o resultado seja verdadeiro. A heurstica utiliza da diferena entre os valores
gerados aleatoriamente e das variaes destes valores aps a execuo do mtodo. O
arquivo fonte de entrada processado e ento so gerados N novas classes contendo
cada um mtodo da classe de origem, dado que N o nmero de mtodos na classe
de origem.
Para cada classe gerada so instanciadas e inicializadas estruturas de dados que
manipulam e armazenam dados extrados da classe corrente, tais como: quantidade
de argumentos, tipos dos argumentos e o GCF. Este ltimo auxilia no controle e na
execuo dos desvios condicionais internos.
Inicialmente so gerados valores aleatrios que so ento atribudos aos argu-
mentos do mtodo da classe a ser analisada, a cada gerao e execuo do mtodo,
as estruturas de dados que armazenam dados relativos a gerao de dados so atuali-
zadas, como a TabelaDesvios que armazena quais foram os resultados das execues
para cada desvio. O clculo da cobertura de desvio realizado a cada iterao.
Se a cobertura de desvio for inferior a 100%, os desvios so armazenados em
uma lista de execuo, para cada desvio so gerados novos valores aleatrios que
so atribudos aos argumentos do mtodo.
A diferena entre os valores gerados e a variao destes valores aps a execuo do
mtodo ento utilizada. Aps a identificao do operador do desvio, relacional ou
de igualdade, os valores so incrementados ou decrementados para que a funo seja
atendida ou at que no existam mais possibilidades de incrementar ou decrementar
os valores dos argumentos do mtodo. Isto ocorre para todos os desvios externos.
Os desvios aninhados, que so alcanveis atravs dos mais externos, so ento
listados em uma lista de execuo. Se houver desvios no alcanveis, a primeira
condio de parada atualizada e o valor da cobertura de desvios reduz para a
porcentagem de desvios alcanveis. Um desvio alcanvel se o desvio externo a
este possui valores em que o resultado seja verdadeiro.
Para cada desvio aninhado listado os passos anteriores se repetem com a gerao
de valores aleatrios que so atribudos aos argumentos do mtodo, com o clculo
da diferena da variao e o incremento ou decremento dos valores dos argumentos
do mtodo.
A cada iterao o clculo da cobertura de desvio atualizado e os valores em
que o resultado de um desvio seja verdadeiro so ento armazenados.
A frmula da cobertura de desvios utilizada est descrita na Frmula 4.1:

P
posies da tabela de desvio atualizadas
cobertura de desvio = P (4.1)
posies da tabela de desvio
30

4.6 Camada de Apresentao

A camada de apresentao conta com as seguintes interfaces:

Tela Inicial: a tela principal do sistema, representada na Figura 8. Ela contm


um boto Arquivo no topo esquerdo.

Figura 8 Tela Inicial

Fonte: Elaborada pela autora

A Figura 9 representa o clique do boto Arquivo. Ela contm trs comandos:

Abrir Arquivo: responsvel por exibir a Tela Caminho do Arquivo, apresentada


na Figura 10.
Limpar: responsvel por limpar os dados selecionados previamente.
Sair: responsvel por fechar a aplicao.

Figura 9 Tela Seleo de Comando

Fonte: Elaborada pela autora


31

Ao clicar no boto Abrir Arquivo, a janela representada pela Figura 10 se abre.

Figura 10 Tela Caminho do Arquivo

Fonte: Elaborada pela autora

Tela Resultados: responsvel pela apresentao, em formato de tabelas, dos dados


gerados e pelas respectivas coberturas alcanadas em porcentagem. Como apresen-
tado na Figuras 11 e 12, a interface possui o comando de Detalhamentos.

Figura 11 Tela Resultados

Fonte: Elaborada pela autora

Cada linha da Figura 11 representa dados de teste que se executados resultaro em


uma porcentagem de cobertura alcanado. A ltima coluna da tabela na figura representa
a cobertura alcanada, a porcentagem alcanada calculada com base nos resultados
alcanados por testes anteriores. Portanto, a ltima coluna da segunda linha calculada
com base nas execues da primeira e segunda linha.
32

Figura 12 Tela Resultados

Fonte: Elaborada pela autora

Tela Detalhamentos: responsvel pela apresentao, em formato de tabela, dos


desvios das condies e da anlise de cobertura correspondente. A tela est repre-
sentada na Figura 13.

Figura 13 Tela Detalhamento

Fonte: Elaborada pela autora

4.7 Camada de Negcios

A camada de negcios do sistema composta pelas seguintes classes:

rvoreBinria: armazena os dados referentes criao e operao de uma rvore


binria, contm a estrutura de execuo da classe analisada.
33

CoberturaDesvios: responsvel pela criao, escrita dos arquivos .java e pelo cl-
culo da cobertura de desvios.

Container: contm estruturas de dados que armazenam dados extrados da execuo


de cada iterao.

TabelaDados: contm estruturas de dados que armazenam e manipulam os valores


extrados que exercitam desvios no cdigo; contm funes que calculam e retornam
valores que atendam os operadores relacionais e de igualdade;

Engine: responsvel pelas chamadas das demais classes e por efetuar as principais
operaes do problema proposto, tais como: processamento de arquivo, extrao
de dados da classe, inicializao de dados, operaes aritmticas e relacionais e
chamada do mtodo com variaes dos dados.

Variveis: armazena os dados referentes s variveis de uma classe de um software:


identificador, tipo, valor e flag de inicializao.

Utils: armazena mtodos responsveis por clculos matemticos e o parser de fun-


o.
34

5 ANLISE DA COBERTURA DE DESVIO E COMPARAES

Esta seo apresenta os dados coletados e resultados obtidos no presente trabalho.


Na seo 5.1, so apresentadas e descritas duas abordagens de gerao de dados de testes
descritas na literatura. A Seo 5.2 apresenta a descrio dos testes. A Seo 5.3 apresenta
os resultados.

5.1 Abordagens Comparativas

Esta seo apresenta detalhes da implementao e do funcionamento de duas abor-


dagens de gerao automatizada de dados de testes descritas na literatura e que so
utilizadas neste trabalho.

5.1.1 Algoritmo Gentico

Os algoritmos genticos so amplamente encontrados na literatura para a gerao de


dados de teste que sastifaam diferentes critrios, estes algoritmos utilizam tcnicas de
(CE) Computao Evolucionria e de (AM) Aprendizado de Mquina.
Os algoritmos genticos se diferem dos demais algoritmos em alguns aspectos que os
tornam bons candidatos na automatizao da gerao de dados de teste, tais como:

Baseiam-se em uma codificao do conjunto das solues possveis;

No necessitam de conhecimento acerca do problema;

Usam transies probabilsticas e no regras determinsticas.

A implementao do algoritmo gentico utilizado neste trabalhou utilizou dos seguintes


critrios estabelecidos:

Tamanho da populao definido em 100;

Nmero mximo de geraes definido em 10000;

Taxa de mutao definido em 0.3.

A taxa de mutao foi definida aps sucessivos testes, os resultados dos testes para
encontrar a taxa de mutao encontram-se descritos no Apndice A.
As seguintes condies de parada foram definidas:

A cobertura de desvio atinge 100%;

Nmero mximo de geraes alcanado.


35

Algoritmo Gentico
Algorithm 5: Algoritmo Gentico
1: Seja S(t) a populao de cromossomos na gerao t
2: t0
3: inicializar S(t)
4: avaliar S(t)
5: enquanto os critrios de parada no forem satisfeitos faa
6: t t+ 1
7: selecionar S(t) a partir de S(t - 1)
8: aplicar mutao sobre S(t)
9: avaliar S(t)
10: fim enquanto
Fonte: (LACERDA E. G. M; CARVALHO, 1999)

O Algoritmo 5 apresenta o funcionamento do algoritmo gentico. Incialmente


define-se uma populao de indivduos gerada aleatoriamente, cada indivduo representa
uma possvel soluo para o problema. A populao ento avaliada seguindo os critrios
definidos no problema. Em seguida, os indivduos so "evoluidos" at o nmero determi-
nado de geraes. Os indviduos so avaliados a cada iterao e sofrem "mutaes" at
que os critrios sejam atendidos.
36

5.1.2 Algoritmo de Gerao Aleatria

A abordagem de gerao de dados pseudoaleatria tem grande valor prtico por gerar
dados prximos aos utilizados operacionalmente, sendo uma tcnica relativamente menos
custosa que as demais abordagens.
O seguinte critrio foi definido na implementao desta abordagem:

Os dados gerados em iteraes anteriores no influenciam a gerao de dados em


iteraes subsequentes.

Da mesma forma que a abordagem utilizando AG, necessrio a definio de condies


de parada especficas para a abordagem de gerao aleatria. Os dados de testes so
gerados sem nenhuma referncia ao cdigo e conforme o critrio aplicado, os dados so
independentes de iteraes anteriores. As seguintes condies de parada foram definidas:

A cobertura de desvio atinge 100%;


Mximo de 1000 iteraes.

A condio de parada acima garante que a execuo se encerre quando a cobertura de


desvios alcance a cobertura mxima e que a execuo seja encerrada. A segunda condio
ainda uma alternativa para evitar que o programa execute indefinitivamente por existir
caminhos no executveis.

Algoritmo de Gerao Aleatria


Algorithm 6: Algoritmo de Gerao Aleatria
1: identificar argumentos
2: gerar valores aleatrios para os argumentos
3: invocar o mtodo passando os valores gerados
4: analisar a cobertura de desvio alcanada
5: enquanto os critrios de parada no forem satisfeitos faa
6: gerar valores aleatrios
7: invocar o mtodo passando os valores gerados
8: analisar a cobertura de desvio alcanada
9: fim enquanto
Fonte: Elaborada pela autora

O Algoritmo 6 acima apresenta o funcionamento do algoritmo aleatrio. Os valores dos


argumentos identificados do mtodo analisado so gerados aleatoriamente a cada iterao
at que os critrios de parada sejam alcanados. A cada iterao a cobertura de desvio
calculada.

5.2 Descries dos Testes

Para a anlise e comparao das abordagens descritas foram implementados um total


de 16 algoritmos para os testes. Cada teste um arquivo de cdigo fonte em Java e
contm uma classe, cada classe possui de 01 a 03 mtodos. Cada um dos mtodos contm
ao menos 01 desvio condicional.
37

Os algoritmos foram dividos em dois grandes grupos, no primeiro grupo esto presentes
os algoritmos que no contm condies aninhadas e no segundo grupo esto contidos os
algoritmos que possuem ao menos uma condio de desvio aninhada.
Desvio condicional aninhado um desvio que est contido dentro de outro desvio, isto
significa que quando uma desvio executado, ainda possvel estabelecer novas condies.
Este tipo de estrutura pode ter diversos nveis, sendo chamados de condies aninhadas.
Algorithm 7: Desvios aninhados
1: a = 5;
2: if condio01 then
3: a = 1;
4: if condio02 then
5: a = 2;
6: end if
7: end if
Fonte: Elaborada pela autora

O Algoritmo 7 acima exemplifica o uso de uma condio aninhada. A linha 05


apenas ser exercitada se a condio mais externa, linha 02, e a condio aninhada interna,
linha 04, forem verdadeiras.
Os 16 algoritmos para os testes e anlises posteriores esto especificados nas tabelas 3
e 4. A Tabela 3 apresenta detalhes dos testes do primeiro grupo, sem condies aninhadas.

Tabela 3 Descrio dos Algoritmos de Teste sem Condies Aninhadas


# # Parmetros # Desvios Descrio
1 1 2 Par/mpar: Verifica se um nmero par ou mpar
2 1 10 Min: Verifica se um nmero o menor em uma lista
3 2 6 Algoritmo01
4 2 6 Algoritmo02
5 3 8 Algoritmo03
6 3 8 Algoritmo04
7 4 10 Algoritmo05 com caminhos no executveis
8 4 10 Algoritmo06 com caminhos no executveis
Fonte: Elaborada pela autora

A segunda, terceira e quarta coluna da Tabela 3 apresentam respectivamente o nmero


de mtodos, o nmero de parmetros e o nmero de desvios totais de cada algoritmo. A
quinta coluna exibe uma descrio dos algoritmos. Dos 8 algoritmos implementados e
descritos na tabela acima, apenas os dois primeiros so problemas reais, os demais so
algoritmos para fim exclusivo de teste e de anlises comparativas. Ainda foram inclusos
caminhos no executveis nos dois ltimos algoritmos.
A Tabela 4 apresenta detalhes dos testes do segundo grupo e que contm condies
aninhadas.
38

Tabela 4 Descrio dos Algoritmos de Teste com Condies Aninhadas


# # Parmetros # Desvios # Aninhados Descrio
1 3 10 5 IMC: Calcula a massa corporal
2 3 18 7 Tringulo: Verifica se uma sequncia
de nmeros pode ser um tringulo
3 4 10 3 Algoritmo07
4 7 10 3 Algoritmo08
5 5 14 6 Algoritmo09
6 6 14 6 Algoritmo10
7 10 20 10 Algoritmo11 com caminhos
no executveis
8 12 20 10 Algoritmo12 com caminhos
no executveis
Fonte: Elaborada pela autora

A terceira coluna da Tabela 4 exibe a quantidade total de desvios presentes nos algo-
ritmos e a quarta tabela exibe a quantidade de desvios aninhados dentre a quantidade de
desvios totais. Os dois ltimos algoritmos possuem caminhos no executveis.

5.3 Resultados

Nesta seo os resultados obtidos para este trabalho so expostos e comentados. Todos
os resultados apresentados so valores mdios de cinco execues dos algoritmos apresen-
tados nas tabelas 3 e 4. Na seo 5.1 esto os resultados referentes a cobertura de desvio
alcanada utilizando os algoritmos sem desvios aninhados descritos nas tabela 3. A seo
5.2 contm os resultados obtidos utilizando algoritmos com desvios aninhados descitos na
Tabela 4. Os resultados de cada execuo das abordagens encontram-se no Apndice B.
Os primeiros testes foram realizados com o objetivo de determinar qual a melhor taxa
de mutao a ser utilizada. Para isso, foram realizados testes variando-se a taxa entre 0.1
e 1, com intervalo de 0.1, e medindo-se a cobertura de desvio encontrada. Os dados das
execues encontram-se no Apndice A.
39

Figura 14 Taxa de Mutao

Fonte: Dados da Pesquisa

A Figura 14 mostra a variao da taxa de mutao em relao a porcentagem de


cobertura de desvio, o melhor valor da taxa de mutao a ser utilizada foi 0.3.

5.3.1 Sem Desvios Aninhados

A Figura 15 mostra a porcentagem da cobertura de desvio alcanada pelas trs dife-


rentes abordagens aplicadas nos algoritmos descritos na Tabela 3.

Figura 15 Cobertura de Desvios sem Condies Aninhadas

Fonte: Dados da Pesquisa

Como possvel ver no grfico da Figura 15, o algoritmo gentico apresentou resultados
superiores aos das demais abordagens. Com exceo do primeiro teste descrito na Tabela
3, a gerao de dados de teste com algoritmo aleatrio resultou na menor cobertura de
desvios em todos os casos. Nos demais algoritmos de testes, a maior porcentagem de
cobertura de dados de teste variou entre a abordagem que utiliza AG e a heurstica.
40

O grfico da Figura 16 mostra a mdia geral da cobertura de desvio obtidos pela


utilizao das trs abordagens.
Figura 16 Mdia da Cobertura de Desvio

Fonte: Dados da Pesquisa

A gerao aleatria de dados de teste resultou numa cobertura de desvio mdia de


56%, valor inferior s mdias utilizando AG e a heurstica que resultaram numa cobertura
mdia de 82% e 84%, respectivamente.

5.3.2 Com Desvios Aninhados

O grfico da Figura 17 apresenta a mdia geral da cobertura de desvios, em porcenta-


gem, dos resultados das execues das trs abordagens dos algoritmos descritos na Tabela
3.
Figura 17 Cobertura de Desvios com Condies Aninhadas

Fonte: Dados da Pesquisa

O grfico da Figura 17 mostra a porcentagem da cobertura de desvio alcanada pelas


abordagens em cada um dos algoritmos. Como possvel perceber, a heurstica apresenta
cobertura superior ao algoritmo aleatrio na grande parte das vezes.
O grfico da Figura 18 apresenta a mdia geral da cobertura de desvios, em porcenta-
gem, dos resultados das execues das trs abordagens dos algoritmos descritos na Tabela
4.
41

Figura 18 Mdia da Cobertura de Desvio

Fonte: Dados da Pesquisa

A gerao de dados de teste com a heurstica apresentada aplicada a algoritmos que


contm desvios aninhados superior as demais apresentando mdia de 6%, 21% superior
a gerao aleatria de dados e 11% superior a gerao de dados utilizando AG, que
apresentaram mdia de 55% e 65% respectivamente.
42

6 CONCLUSO

O objetivo principal deste trabalho foi propor uma heurstica para a gerao automa-
tizada de dados de teste e anlise de cobertura. Para tal, foi desenvolvida uma heurstica
implementada em uma ferramenta denominada DataGen na linguagem de programao
Java. A anlise da cobertura de desvio foi comparada com duas das abordagens mais
presentes na literatura.
Atravs dos resultados obtidos, foi possvel perceber que a cobertura de desvios da
heurstica superior a cobertura de desvios das demais abordagens. No h grande
diferena entre a heurstica e a abordagem gentica na gerao de dados de testes em
algoritmos sem desvios condicionais. No entanto, entre os testes com desvios aninhados,
a heurstica apresentada resultou em uma cobertura 11% superior a abordagem gentica
e 27% a abordagem aleatria. Em todos os casos, os testes com a abordagem de gerao
aleatria apresentou resultados inferiores.
Analisando os algoritmos, esta diferena entre a porcentagem da cobertura de desvios
justificada em razo da no referncia direta ao cdigo das abordagens gentica e ale-
atria. Ainda, existem outras duas caractersticas intrnsecas abordagem gentica que
influenciam a cobertura de desvios, so elas: alto nmero de possibilidades de configura-
o; alto nmero de avaliaes da funo de aptido e a dificuldade em se determinar o
timo.
Como sugestes para trabalhos futuros:

A gerao de testes unitrios utilizando os dados resultantes da heurstica e o fra-


mework JUnit;

A extenso da ferramenta com suporte aos demais tipos primitivos e estruturas de


dados da linguagem Java.
Referncias Bibliogrficas

ABREU, B. T. Uma abordagem evolutiva para a gerao automtica de dados de teste.


In: . [S.l.: s.n.], 2006. p. 131.

ALI, Shaukat et al. A systematic review of the application and empirical investigation
of search-based test case generation. IEEE Trans. Software Eng., v. 36, n. 6, p.
742762, 2010. Disponvel em: <http://dblp.uni-trier.de/db/journals/tse/tse36.html#
AliBHP10>.

BEIZER, Boris. Software Testing Techniques (2Nd Ed.). New York, NY, USA: Van
Nostrand Reinhold Co., 1990. ISBN 0-442-20672-0.

BIRD, D. L.; MUNOZ, C. U. Automatic generation of random self-checking test cases.


IBM Syst. J., IBM Corp., Riverton, NJ, USA, v. 22, n. 3, p. 229245, set. 1983. ISSN
0018-8670. Disponvel em: <http://dx.doi.org/10.1147/sj.223.0229>.

CROSS, S. Expert system assisted test data generation for software branch coverage.
Data & Knowledge Engineering, n. 6, Jun 1991.

GLASS, R. L. Software Quality Building. [S.l.]: Prentice Hall (October 11, 1991),
1992. 412 p.

GRAND, Mark; KNUDSEN, Jonathan B. Java Fundamental Classes Reference. 1st.


ed. Sebastopol, CA, USA: OReilly & Associates, Inc., 1997. ISBN 1565922417.

HARROLD, Mary Jean. Testing: A roadmap. In: Proceedings of the Conference


on The Future of Software Engineering. New York, NY, USA: ACM, 2000. (ICSE
00), p. 6172. ISBN 1-58113-253-0. Disponvel em: <http://doi.acm.org/10.1145/336512.
336532>.

HOWDEN, W.E. Methodology for the generation of program test data. Computers,
IEEE Transactions on, C-24, n. 5, p. 554560, May 1975. ISSN 0018-9340.

KANER, C. Exploratory testing. In: QUALITY ASSURANCE INSTITUTE (QAI)


WORLDWIDE ANNUAL SOFTWARE TESTING CONFERENCE, 2006, Orlando.
[S.l.], 2006. p. 47.

LACERDA E. G. M; CARVALHO, A. C. P. L. F. Introduo aos algoritmos genticos. In:


. [S.l.]: Sistemas inteligentes: aplicaes a recursos hdricos e cincias ambientais., 1999.
p. 99150.

MCMINN, Phil. Search-based software test data generation: A survey. Software Tes-
ting, Verification and Reliability, v. 14, n. 2, p. 105156, June 2004. Disponvel em:
<http://philmcminn.staff.shef.ac.uk/publications/pdfs/2004-stvr.pdf>.

MYERS, Glenford J.; SANDLER, Corey. The Art of Software Testing. [S.l.]: John
Wiley & Sons, 2004. ISBN 0471469122.

ORACLE. THE JAVA TUTORIALS, The Reflection API. 2010. Disponvel em:
<http://docs.oracle.com/javase/tutorial/reflect/index.html>.

PAN, Jiantao. Software Testing. 1999. Http://www.ece.cmu.edu.


44

PRESSMAN, Roger S. Engenharia de Software. 6th. ed. McGraw-Hill Higher Edu-


cation, 2006. ISBN 9788586804571. Disponvel em: <http://books.google.com.br/books?
id=MNM6AgAACAAJ>.

TSE, T. H. et al. The application of prolog to structured design. Softw. Pract. Exper.,
John Wiley & Sons, Inc., New York, NY, USA, v. 24, n. 7, p. 659676, jul. 1994. ISSN
0038-0644. Disponvel em: <http://dx.doi.org/10.1002/spe.4380240705>.
45

A TAXA DE MUTAO

Neste apndice encontram-se as anlises estatsticas dos dados coletados para a


definio da taxa de mutao do algoritmo gentico descrito na seo Anlise da Cobertura
de Desvio e Comparaes deste trabalho.

Tabela 5 Taxa de Mutao


0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
Par-mpar 1 1 1 1 1 1 1 1 1 1
Min 0.9 0.8 0.9 0.9 0.7 0.7 0.8 0.6 0.3 0.3
Algoritmo01 1 1 1 1 0.83 0.83 0.66 0.83 0.83 0.66
Algoritmo02 1 1 0.83 0.83 0.83 0.83 0.66 0.66 0.66 0.66
Algoritmo03 0.875 0.875 1 0.875 0.875 0.875 0.875 0.875 0.875 0.875
Algoritmo04 0.875 0.875 1 1 0.875 0.75 0.75 0.75 0.75 0.75
Algoritmo05 0.625 0.75 0.625 0.75 0.625 0.75 0.625 0.625 0.5 0.5
Algoritmo06 0.75 0.75 0.75 0.75 0.75 0.625 0.5 0.5 0.625 0.625
IMC 0.7 0.6 0.8 0.7 0.7 0.7 0.7 0.5 0.6 0.5
Tringulo 0.6 0.6 0.7 0.7 0.6 0.6 0.5 0.5 0.4 0.7
Algoritmo07 0.6 0.6 0.7 0.7 0.7 0.7 0.6 0.6 0.5 0.5
Algoritmo08 0.7 0.6 0.7 0.7 0.8 0.6 0.6 0.8 0.7 0.7
Algoritmo09 0.785 0.785 0.785 0.785 0.785 0.642 0.714 0.714 0.642 0.714
Algoritmo10 0.785 0.785 0.785 0.642 0.714 0.642 0.785 0.714 0.642 0.642
Algoritmo11 0.75 0.75 0.7 0.5 0.7 0.6 0.75 0.75 0.5 0.5
Algoritmo12 0.7 0.6 0.8 0.8 0.8 0.5 0.6 0.7 0.7 0.6
Fonte: Dados da pesquisa
46

B ANLISE ESTATSTICA DOS DADOS COLETADOS

Neste apndice encontram-se as anlises estatsticas dos dados coletados para a de-
finio da taxa de mutao do algoritmo gentico descrito na seo Anlise da Cobertura
de Desvio e Comparaes deste trabalho.
47

Tabela 6 Cobertura de Desvio sem Fluxos Aninhados


# Aleatrio Algoritmo Gentico Heurstica
1 1 1 1
2 1 1 1
Par-mpar 3 1 1 1
4 1 1 1
5 1 1 1
1 0.8 0.9 0.7
2 0.6 0.8 0.8
Min 3 0.6 0.9 0.6
4 0.9 1 0.8
5 0.5 0.8 0.9
1 0.666666667 1 0.666666667
2 0.833333333 0.833333333 0.833333333
Algoritmo01 3 0.5 0.666666667 1
4 0.333333333 0.666666667 0.833333333
5 0.333333333 0.833333333 1
1 1 0.833333333 1
2 0.166666667 0.833333333 0.666666667
Algoritmo02 3 1 1 0.666666667
4 0.833333333 0.666666667 0.833333333
5 0.666666667 0.833333333 0.666666667
1 0.375 0.875 1
2 0.25 0.75 1
Algoritmo03 3 0.375 0.75 0.75
4 0.375 1 0.75
5 0.5 0.875 0.75
1 0.5 0.75 0.875
2 0.875 0.875 0.875
Algoritmo04 3 0.75 0.875 1
4 0.25 1 0.75
5 0.375 0.875 0.875
1 0.3 0.75 0.75
2 0.4 0.625 0.625
Algoritmo05 3 0.2 0.5 1
4 0.3 0.625 0.75
5 0.4 0.5 0.625
1 0.4 0.75 0.75
2 0.6 0.75 0.625
Algoritmo06 3 0.1 0.5 0.75
4 0.2 1 0.625
5 0.3 0.625 0.625
48

Tabela 7 Cobertura de Desvio com Fluxos Aninhados


# Aleatrio Algoritmo Gentico Heurstica
1 0.7 0.6 0.8
2 0.6 0.8 0.9
IMC 3 0.6 0.6 0.9
4 0.8 0.7 0.8
5 0.7 0.5 0.8
1 0.4 0.4 0.7
2 0.5 0.5 0.8
Tringulo 3 0.5 0.7 0.8
4 0.4 0.6 0.8
5 0.6 0.6 0.9
1 0.4 0.5 0.9
2 0.6 0.6 0.6
Algoritmo07 3 0.3 0.7 0.8
4 0.3 0.6 0.8
5 0.6 0.6 0.7
1 0.4 0.8 0.8
2 0.3 0.6 0.7
Algoritmo08 3 0.4 0.6 0.9
4 0.5 0.7 0.7
5 0.5 0.7 0.8
1 0.642857143 0.714285714 0.571428571
2 0.571428571 0.785714286 0.857142857
Algoritmo09 3 0.428571429 0.571428571 0.857142857
4 0.642857143 0.642857143 0.714285714
5 0.5 0.714285714 0.785714286
1 0.571428571 0.714285714 0.714285714
2 0.642857143 0.642857143 0.714285714
Algoritmo10 3 0.5 0.785714286 0.642857143
4 0.5 0.714285714 0.857142857
5 0.571428571 0.642857143 0.714285714
1 0.6 0.75 0.7
2 0.7 0.6 0.75
Algoritmo11 3 0.55 0.7 0.6
4 0.6 0.5 0.8
5 0.8 0.75 0.7
1 0.65 0.8 0.8
2 0.65 0.6 0.65
Algoritmo12 3 0.7 0.7 0.75
4 0.6 0.5 0.6
5 0.55 0.8 0.8