VALIDAÇÃO DE UMA TÉCNICA PARA GERAÇÃO AUTOMÁTICA DE TESTES COM OBJETOS MOCK



Documentos relacionados
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE - UFCG CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA - CEEI DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO - DSC

Manual SAGe Versão 1.2 (a partir da versão )

GARANTIA DA QUALIDADE DE SOFTWARE

Processos de Desenvolvimento de Software

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

ISO/IEC 12207: Gerência de Configuração

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

Projeto Você pede, eu registro.

18º Congresso de Iniciação Científica IMPLEMENTAÇÃO DE UM MODELO DE TESTE DE APLICAÇÕES WEB

Extração de Requisitos

Pós-Graduação em Gerenciamento de Projetos práticas do PMI

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

REFORÇO DE PROGRAMAÇÃO ESTRUTURADA EM LINGUAGEM C PARA GRADUAÇÃO EM ENGENHARIA ELÉTRICA

FACULDADE DE ENGENHARIA DE COMPUTAÇÃO. PROJETO FINAL I e II PLANO DE TRABALHO <NOME DO TRABALHO> <Nome do Aluno> <Nome do Orientador>

3 Qualidade de Software

FACULDADE DE TECNOLOGIA RUBENS LARA Análise e Desenvolvimento de Sistemas

Feature-Driven Development

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Requisitos de Software. Teresa Maciel DEINFO/UFRPE

MBA MARKETING DE SERVIÇOS. Turma 19. Curso em Ambiente Virtual

1.1. Organização de um Sistema Computacional

ARCO - Associação Recreativa dos Correios. Sistema para Gerenciamento de Associações Recreativas Plano de Desenvolvimento de Software Versão <1.

Implantação de ERP com sucesso

MÓDULO 9 METODOLOGIAS DE DESENVOLVIMENTO DE SISTEMAS

Mídias sociais como apoio aos negócios B2C

Regulamento Complementar do Trabalho de Conclusão de Curso do Curso de Engenharia de Computação UTFPR, campus Pato Branco

Introdução ao Aplicativo de Programação LEGO MINDSTORMS Education EV3

Projeto de Sistemas I

PRIMAVERA RISK ANALYSIS

Planejando o aplicativo

Sistema de Controle de Solicitação de Desenvolvimento

Após a confirmação de pagamento de sua inscrição para o congresso, você estará apto a entrar no sistema de submissão de trabalho.

Gerenciamento de Incidentes

1

Fábrica de Software 29/04/2015

Sistema Gerenciador de Conteúdo OpenCms: um caso de sucesso no CEFET-MG

Glossário Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart.

Engenharia de Software

FATEC Cruzeiro José da Silva. Ferramenta CRM como estratégia de negócios

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

SISTEMAS DISTRIBUÍDOS

Sistemas Distribuídos

Aula 2 Revisão 1. Ciclo de Vida. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite (81 )

Como melhorar a Qualidade de Software através s de testes e nua. Cláudio Antônio de Araújo 22/11/2008

DIRETRIZES DE ORIENTAÇÃO DAS ATIVIDADES DO TRABALHO DE CURSO

Porque estudar Gestão de Projetos?

)HUUDPHQWDV &RPSXWDFLRQDLV SDUD 6LPXODomR

APOO Análise e Projeto Orientado a Objetos. Requisitos

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Sistemas de Informação I

V Semana de Ciência e Tecnologia IFMG - campus Bambuí V Jornada Científica 19 a 24 de novembro de 2012

1. Introdução. Avaliação de Usabilidade Página 1

ATIVIDADES PRÁTICAS SUPERVISIONADAS

CENTRO DE ENSINO SUPERIOR FABRA GUIA DE APRESENTAÇÃO DA MATÉRIA ESTÁGIO SUPERVISIONADO DO CURSO SISTEMAS DE INFORMAÇÃO

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

ROTEIRO PARA ELABORAÇÃO DE PROJETOS

MRP II. Planejamento e Controle da Produção 3 professor Muris Lage Junior

Processos Técnicos - Aulas 4 e 5

Nome: Login: CA: Cidade: UF CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA

PEN - Processo de Entendimento das Necessidades de Negócio Versão 1.4.0

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

ENGENHARIA DE SOFTWARE I

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

Podemos encontrar uma figura interessante no PMBOK (Capítulo 7) sobre a necessidade de organizarmos o fluxo de caixa em um projeto.

Modelo Cascata ou Clássico

MODELO CMM MATURIDADE DE SOFTWARE

6 Construção de Cenários

ITIL v3 - Operação de Serviço - Parte 1

Prof. Marcelo Machado Cunha

Dadas a base e a altura de um triangulo, determinar sua área.

CONCURSO PÚBLICO ANALISTA DE SISTEMA ÊNFASE GOVERNANÇA DE TI ANALISTA DE GESTÃO RESPOSTAS ESPERADAS PRELIMINARES

APLICACAÇÃO DE METRICAS E INDICADORES NO MODELO DE REFERENCIA CMMI-Dev NIVEL 2

Universidade de Brasília Faculdade de Ciência da Informação Curso de Arquivologia Profa. Lillian Alvares

SIMULADO: Simulado 3 - ITIL Foundation v3-40 Perguntas em Português

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

3 SCS: Sistema de Componentes de Software

Sacix Linux Casa Brasil/Região Norte

Produto de Gerenciamento: Business Case

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

5 Considerações finais 5.1. Reflexões sobre os resultados

Lógica de Programação

Engenharia de Software III

10 DICAS DE TECNOLOGIA PARA AUMENTAR SUA PRODUTIVIDADE NO TRABALHO

CHECK - LIST - ISO 9001:2000

Avanços na transparência

Orientação a Objetos

DESENVOLVIMENTO DE UM SOFTWARE NA LINGUAGEM R PARA CÁLCULO DE TAMANHOS DE AMOSTRAS NA ÁREA DE SAÚDE

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

Transcrição:

UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA UNIDADE ACADÊMICA DE SISTEMAS E COMPUTAÇÃO RELATÓRIO DE ESTÁGIO VALIDAÇÃO DE UMA TÉCNICA PARA GERAÇÃO AUTOMÁTICA DE TESTES COM OBJETOS MOCK RENATO MICELI COSTA RIBEIRO Estagiário DALTON DARIO SEREY GUERRERO Orientador Acadêmico SABRINA DE FIGUEIRÊDO SOUTO Supervisora Técnica Campina Grande PB Dezembro de 2009

VALIDAÇÃO DE UMA TÉCNICA PARA GERAÇÃO AUTOMÁTICA DE TESTES COM OBJETOS MOCK APROVADO EM BANCA EXAMINADORA Dalton Dario Serey Guerrero, Prof. DSc. ORIENTADOR ACADÊMICO Joseana Macêdo Fechine, Prof. DSc. MEMBRO DA BANCA Sabrina de Figueirêdo Souto, BSc. MEMBRO DA BANCA

AGRADECIMENTOS Agradeço inicialmente a Sabrina Souto, por ter me convidado a auxiliá-la em seu mestrado, me oferecendo a oportunidade de participar desse estágio; agradeço a Dalton Serey, pelas discussões frutíferas, mesmo em face das dificuldades em encontrá-lo; agradeço também a Alexandro Soares, a Pryscilla Dóra e a Cícero Alan Cruz, pelas boas sugestões quanto a conduzir este trabalho; e, finalmente, agradeço a Joseana Fechine, pelos votos de sucesso ao acreditar no êxito deste trabalho.

APRESENTAÇÃO Como parte das exigências do curso de Ciência da Computação, da Universidade Federal de Campina Grande, para cumprimento da disciplina de Estágio Integrado, apresenta-se o relatório de estágio, que expõe as atividades desenvolvidas por Renato Miceli Costa Ribeiro, ao curso do período 2009.2, sob a orientação acadêmica de Dalton Dario Serey Guerrero e supervisão técnica de Sabrina de Figueirêdo Souto. Esse estágio integrado objetivou validar a técnica Automock de geração automática de testes com Objetos Mock. O estágio foi realizado no Laboratório de Sistemas Distribuídos (LSD), localizado na Universidade Federal de Campina Grande (UFCG), bloco CO. Esse ambiente foi bastante propício para a realização do estágio, visto que dispunha de todo o aparato necessário para o desenvolvimento das atividades. O conteúdo do relatório está distribuído conforme a seguinte descrição. Seção 1 Introdução. Seção 2 Ambiente de Estágio. Seção 3 Fundamentação Teórica e Tecnologias Utilizadas. Seção 4 Atividades do Estágio. Seção 5 Considerações Finais. Referências Bibliográficas. Apêndices. Anexos. 4

5

RESUMO Testar softwares é uma atividade muito importante. É através dela que os testadores descobrem faltas no software, que poderiam causar falhas de execução. Uma boa prática de testes sobre sistemas orientados a objeto consiste em isolar as várias unidades de código do restante do sistema de modo a diminuir a influência entre elas durante a execução dos testes. Para isso, uma solução bastante empregada são os Objetos Mock; entretanto, desenvolver testes com Objetos Mock é uma tarefa tediosa e complexa, além de requerer que os testadores possuam profundo conhecimento do sistema e de suas interações. Em seu mestrado, Sabrina Souto propôs uma técnica chamada Automock, para geração automática de código Mock a partir de testes pré-existentes. Este relatório apresenta as atividades desenvolvidas por Renato Miceli ao longo de seu estágio, que objetivaram avaliar a técnica Automock. Para isso, foram utilizados experimentos e questionários, além de análises quantitativas. Este é um trabalho em andamento e deverá ser concluído por Sabrina Souto ao final de seu mestrado. 6

ABSTRACT Testing softwares is an important task. It is by means of it that testers find out faults on softwares, which could lead to execution failures. A recommended testing practice over object-oriented systems consists in isolating the many units of code from the rest of the system, so to decrease the influence between them during the tests' execution. A commonly employed solution for that are the Mock Objects; developing tests with Mock Objects, however, is a tedious and complex task, besides requiring testers to posess deep knowledge about the system and its interactions. On her Masters Course, Sabrina Souto proposed a technique called Automock, for the automatic generation of Mock code out of previously existing tests. This report presents the activities developed by Renato Miceli during his internship, which aimed help evaluating the technique Automock. In order to do that, there have been used experiments and surveys, as well as quantitative analysis. This is an on-going work and should be finished by Sabrina Souto by the end of her Masters Course. 7

8

SUMÁRIO Lista de Siglas e Abreviaturas... 11 Lista de Quadros... 12 Lista de Tabelas... 13 1. Introdução... 14 2. Ambiente de Estágio... 17 2.1. Orientador Acadêmico... 19 2.2. Supervisora Técnica... 19 3. Fundamentação Teórica... 21 3.1. Linguagem de Programação Java... 22 3.2. Ambiente de Desenvolvimento Eclipse... 22 3.3. Testes de Software Automatizados... 23 3.4. Arcabouço JUnit... 23 3.5. Classes Stub... 24 3.6. Objetos Mock... 24 3.7. Arcabouço EasyMock... 25 4. Atividades Realizadas..... 26 4.1. Revisão Bibliográfica...... 27 4.2. Escrita de Artigo......... 29 4.3. Proposta de Plano de Estágio...... 29 4.4. Documentação das Atividades...... 30 4.5. Seleção de Casos de Teste...... 31 4.6. Participar do LADC'09...... 33 4.7. Geração de Testes com Colaboradores Stub... 34 4.8. Execução de Experimentos... 35 4.9. Avaliação Preliminar de Tempo de Execução... 37 4.10. Montagem de Questionário... 39 4.11. Avaliação Preliminar do Número de Linhas de Código... 40 5. Considerações Finais...... 43 Referências Bibliográficas... 45 APÊNDICE A... 50 APÊNDICE B... 59 9

APÊNDICE C... 62 APÊNDICE D... 72 APÊNDICE E... 75 ANEXO A... 81 ANEXO B... 84 ANEXO C... 87 10

LISTA DE SIGLAS E ABREVIATURAS BD Banco de Dados CD-ROM Compact Disc, Read-Only Memory CUT Class Under Test (Classe Sob Teste) DSC Departamento de Sistemas e Computação HP Hewlett-Packard IDE Integrated Development Environment IEEE Institute of Electrical and Electronics Engineers LA-WASP Latin American Workshop on Aspect-Oriented Software Development LCD Liquid Crystal Display (Visor de Cristal Líquido) LSD Laboratório de Sistemas Distribuídos LSI Laboratório de Sistemas de Informação SAST Workshop Brasileiro de Teste de Software Sistemático e Automatizado SBSE Simpósio Brasileiro de Engenharia de Software TDD Test-Driven Development (Desenvolvimento Orientado a Testes) UFCG Universidade Federal de Campina Grande 11

LISTA DE QUADROS Quadro 1 Classes de Teste e seus respectivos Sistemas... 36 12

LISTA DE TABELAS Tabela 1: Tempos gastos por participante na execução dos experimentos... 37 Tabela 2: Tempos gastos pela ferramenta Automock para gerar código mock... 37 Tabela 3: Ganho em tempo por participante frente à geração automática de código mock... 38 Tabela 4: Média de ganhos em tempo para intervalos de confiança de 95%... 38 Tabela 5: Número de linhas de código dos testes gerados em experimento... 41 Tabela 6: Média do total de linhas de código e erros para intervalos de confiança de 95%... 41 13

SEÇÃO I INTRODUÇÃO 14

1. INTRODUÇÃO A atividade de construção do conhecimento não está desassociada da prática do saber. Quando ambas caminham unidas, fortalecem-se os conceitos, adquire-se experiência, obtém-se proeficiência e autossuficiência. Participar de um estágio integrado, pois, é ser presenteado com um diferencial. Essa oportunidade única na vida escolar do jovem aprendiz visa apresentar uma visão prática das teorias já conhecidas. É através dela que se vivencia o dia-a-dia de quem corriqueiramente usa pra fins reais os conceitos meramente teóricos de outrora. Para a formação de um profissional, ter sido estagiário lhe dá uma bagagem de conhecimento teórico e prático, firmemente fixados, e que devem lhe acompanhar durante toda a vida. Seguindo essa filosofia, Renato Miceli participou durante o segundo semestre de 2009 de um estágio integrado. Ele foi realizado no Laboratório de Sistemas Distribuídos (LSD), bloco CO do Campus I da Universidade Federal de Campina Grande (UFCG), durante o período escolar 2009.2, sob orientação acadêmica de Dalton Dario Serey Guerrero e supervisão técnica de Sabrina de Figueirêdo Souto. Este relatório visa apresentar de forma sucinta as atividades desenvolvidas por Renato Miceli ao longo de seu estágio integrado. O estágio integrado desenvolvido teve por objetivo validar a técnica Automock para geração de testes com Objetos Mock (SOUTO, 2009). O foco do estágio foi entender o trabalho proposto, pesquisar soluções de avaliação para problemas similares, e empregar a solução mais adequada para avaliar o Automock sobre o Automock. Objetivo Geral: Validar a técnica e o protótipo de ferramenta Automock de geração de testes com Objetos Mock. 15

Objetivos Específicos: Entender o trabalho desenvolvido e proposto por Sabrina Souto, a partir de leitura de documentação por ela produzida, palestras e discussões interpessoais. Pesquisar soluções similares, a fim de identificar melhores abordagens para proceder com a avaliação do trabalho proposto. Conduzir o trabalho de avaliação usando a abordagem mais adequada, oriunda do trabalho de pesquisa, visando identificar a viabilidade, os benefícios e limitações da técnica Automock. O restante do relatório abordará com mais detalhes o ocorrido no decorrer do estágio integrado, focando as causas que resultaram em mudanças no andamento das atividades, embasadas por argumentos que justificam as decisões tomadas. 16

SEÇÃO II AMBIENTE DE ESTÁGIO 17

2. AMBIENTE DE ESTÁGIO Como citado na seção 1, o estágio integrado foi conduzido no Laboratório de Sistemas Distribuídos (LSD). Este é um laboratório pertencente à Universidade Federal de Campina Grande (UFCG), no âmbito do Departamento de Sistemas e Computação (DSC), localizado no bloco CO. O grupo de pesquisa em sistemas distribuídos já vem de longas datas: fundado em 1996, já passou por diversas mudanças em infraestrutura básica. Sua localidade atual, inaugurada em 2004, dedica toda uma construção própria ao laboratório. Desde sua fundação, os esforços do grupo de pesquisa estão direcionados para a área de sistemas distribuídos, com foco claro nas sub-áreas de computação em grade, sistemas entre-pares, gerenciamento de Ti orientado a negócios, sistemas de arquivo distribuídos e computação nas nuvens. No LSD foram desenvolvidas soluções conhecidas para ambientes distribuídos. Dentre elas, pode-se citar o OurGrid, para compartilhamento de recursos computacionais ociosos; o Commune, para comunicação segura e confiável entre pares através de uma rede; e o BeeFS, um sistema de arquivos distribuído sobre máquinas desktop, que utiliza da capacidade de armazenamento disponível nelas para criar um grande diretório de arquivos. Muitas outras soluções já foram ou estão em desenvolvimento no laboratório, que conta com o suporte financeiro da gigante da informática Hewlett-Packard (HP), especialmente por meio dos projetos OurGrid e Hybrid Clouds, este do qual o estagiário é pesquisador e desenvolvedor atualmente. Mais informações acerca do ambiente de estágio podem ser obtidas na seção Ambiente de Estágio no Apêndice A. O LSD possui infraestrutura própria e dispõe de salas climatizadas e máquinas de última geração. São computadores de uso pessoal com mouse, teclado e monitor LCD, rodando sistemas Unix/Linux e Windows e serviços básicos associados. Toda essa infraestrutura de informática é apoiada por uma equipe de suporte, disponível em horário comercial para quaisquer problemas 18

que haja. Assim, o laboratório satisfaz todos os requisitos necessários para ser posto de trabalho permanente no decorrer do estágio integrado. Acima de tudo, foi no LSD que se iniciou o desenvolvimento da técnica Automock, no contexto do projeto AutoTest, coordenado por Dalton Serey. Apesar do fim desse projeto, o laboratório ainda conserva as infraestrutura de serviços montada para suportá-lo; assim sendo, esse é o local mais que propício para a condução do estágio integrado. Dalton Serey e Sabrina Souto são, respectivamente, o orientador acadêmico e a supervisora técnica desse estágio integrado. Suas informações pessoais e profissionais são descritas em sequência. 2.1. ORIENTADOR ACADÊMICO Nome: Dalton Dario Serey Guerrero Função: Professor Adjunto e Coordenador de Curso Endereço Profissional: Universidade Federal de Campina Grande (UFCG) Centro de Engenharia Elétrica e Informática (CEEI) Coordenação do Curso de Ciência da Computação (CCC) Rua Aprígio Veloso, s/n, Bodocongó CEP 58429-900 Campina Grande - PB, Brasil. Telefone: +55 (83) 3310-1027 Endereço de Email Pessoal: daltonserey@gmail.com Endereço de Email Profissional: dalton@dsc.ufcg.edu.br 2.2. SUPERVISORA TÉCNICA Nome: Sabrina de Figueiredo Souto Função: Mestranda 19

Endereço Profissional: Universidade Federal de Campina Grande (UFCG) Departamento de Sistemas e Computação (DSC) Laboratório de Sistemas Distribuídos (LSD) Rua Aprígio Veloso, 882 - Bloco CO Bodocongó CEP 58109-970 Campina Grande - PB, Brasil. Telefone: +55 (83) 3310-1647 Fax: +55 (83) 3310-1498 Endereço de Email Pessoal: sabrinadfs@gmail.com Endereço de Email Profissional: sabrina@lsd.ufcg.edu.br 20

SEÇÃO III FUNDAMENTAÇÃO TEÓRICA 21

3. FUNDAMENTAÇÃO TEÓRICA 3.1. LINGUAGEM DE PROGRAMAÇÃO JAVA A linguagem de programação Java (JAVA, 2009) é uma linguagem de programação desenvolvida pela Sun Microsystems, Inc. em 1995 que mescla conceitos dos paradigmas imperativo e orientado a objeto. Sua sintaxe deriva majoritariamente das linguagens de programação C e C++, embora tenha um modelo de objetos bem mais simples e menos facilidades de baixo nível. Foi feita para rodar sobre a Máquina Virtual Java, por meio da interpretação de bytecodes, gerados pela compilação de código-fonte. Para a condução do estágio, foi necessário conhecimento aprofundado sobre o paradigma de programação orientado a objeto e suas boas práticas de projeto, bem como proeficiência na linguagem de programação Java. Essa foi a linguagem utilizada durante todo o trabalho já desenvolvido até o momento, inclusive sendo a linguagem usada para desenvolver o protótipo de ferramenta Automock, os cenários de estudo do protótipo e os sistemas para experimentação. Apesar de ser geral, a técnica Automock só foi implementada em ambientes Java (SOUTO, 2009), tornando esse um requisito fundamental para a atividade de estágio. 3.2. AMBIENTE DE DESENVOLVIMENTO ECLIPSE Um dos mais usados ambientes de desenvolvimento de softwares para a linguagem de programação Java, compreende uma IDE e um sistema de gerenciamento de plug-ins (ECLIPSE, 2009). É o sistema de facto utilizado na UFCG para desenvolvimento de aplicações Java. No contexto do trabalho, essa ferramenta foi de suma importância, pois foi através dela que o protótipo Automock e os casos de teste simples para 22

validação foram desenvolvidos (SOUTO, 2009). Esta ferramenta foi usada durante todo o decorrer do estágio para realizar alterações sobre código Java, além de ser tecnologia assistencial obrigatória para os estudos de caso e execução dos experimentos. 3.3. TESTES DE SOFTWARE AUTOMATIZADOS Dentre os maiores princípios da Engenharia de Software estão as recomendadas boas práticas de teste. Testar software é uma técnica eficaz para identificar defeitos em um software que podem ocasionar em falhas de execução. É fato que um maior tempo empregado com atividades de verificação e validação diminui consideravelmente o tempo demandado em atividades de depuração, refatoramento e evolução do software. Para facilitar as atividades de teste de software, inúmeras ferramentas surgiram. Elas se propõem a automatizar o passo-a-passo executado para estimular o software em busca de falhas. Ter se tornado uma tarefa bem menos custosa em termos de tempo contribuiu para tornar o teste de software cada vez mais popular na academia e no mercado. 3.4. ARCABOUÇO JUNIT Dos maiores arcabouços para desenvolvimento de testes de unidade automáticos em sistemas Java é o JUnit (JUNIT, 2009). Na sua atual versão 4.x, é o arcabouço dominante na academia e no mercado para compor testes automatizados sobre softwares Java. Foi com uso do JUnit que o protótipo Automock foi validado. Além disso, os testes que devem ser fornecidos ao protótipo são testes escritos usando o arcabouço JUnit. Assim, todos os testes estudados, alterados e construídos durante o estágio integrado estavam ou foram escritos usando JUnit. 23

3.5. CLASSES STUB O conceito de Classes Stub está intimamente ligado às bases do paradigma de programação orientado a objeto. Classes Stub são classes que simulam o comportamento de outras classes do sistema. Para isso, elas devem respeitar o mesmo contrato e retornar respostas predefinidas para certos estímulos fornecidos ao software. O comportamento esperado é definido estaticamente no código da classe Stub. Classes Stub são um dos meios para prover isolamento da CUT em testes de unidade. No entanto, podem se multiplicar ao longo do ciclo de vida do software, por não serem reutilizáveis. 3.6. OBJETOS MOCK Como o conceito de Classes Stub, o conceito de Objetos Mock também está intimamente ligado ao paradigma de programação orientado a objeto. Objetos Mock servem ao mesmo propósito de classes Stub. Diferenciam-se dessas por terem seu comportamento definido dinamicamente em código, no corpo dos métodos de teste. No mais, Objetos Mock têm a capacidade de auxiliar na decisão sobre a falha ou aceitação de um teste, checando a sequência de expectativas que deveriam ter sido satisfeitas quanto a chamadas sobre si. Objetos Mock, bem como Classes Stub, podem tornar a execução do teste mais rápida, por não executarem algoritmos complexos, além de isolar a CUT do restante do ambiente de teste. Por outro lado, código mock é bem custoso de se escrever, requer conhecimento profundo do testador sobre o sistema em estudo, além de ser bastante suscetível a mudanças sutis no código do sistema (pequenas alterações no código podem levar a descartar o código mock). O trabalho proposto visa solucionar esse problema, através de da técnica Automock (SOUTO, 2009). 24

Para construir Objetos Mock eficientemente, existe uma variedade de arcabouços disponíveis para a linguagem Java, dentre os quais destaca-se o EasyMock. 3.7. ARCABOUÇO EASYMOCK O EasyMock (EASYMOCK, 2009) é um dos arcabouços de desenvolvimento de código mock mais utilizados dentre os disponíveis para a linguagem de programação Java. Ele provê a construção de Objetos Mock para interfaces e classes Java, registra listas de expectativas e omite completamente a existência de um objeto falso por debaixo do tipo provido pelo objeto. É bastante recomendado para TDD, visto que seu modo único de registro de expectativas o torna imune à maioria dos refatoramentos feitos a códigos Java. Esse arcabouço foi de suma importância para o trabalho de estágio, visto que é com uso dele que o protótipo Automock gera código mock para testes JUnit. Por isso, toda e qualquer atividade que envolvesse Objetos Mock no decorrer desse trabalho necessariamente utilizou o arcabouço EasyMock, para fins de comparação de resultados. 25

SEÇÃO IV ATIVIDADES REALIZADAS 26

4. Atividades Realizadas Nessa seção são apresentadas as atividades realizadas no decorrer do estágio. Note-se que a sequência de atividades está ordenada cronologicamente, por questões de organização. 4.1. Revisão Bibliográfica Antes de se proceder com o trabalho de avaliação do Automock, foi necessária uma pesquisa bibliográfica inicial do estado-da-arte. O objetivo dessa atividade foi de agregar conhecimento acerca de outras técnicas utilizadas para realizar a avaliação proposta. Foi necessário entender primeiramente o contexto em que se inseria o problema sob estudo, as abordagens que já haviam sido empregadas para resolver tal problema, além de novas abordagens que potencialmente poderiam ser empregadas, para enfim propor uma metodologia adequada para encarar o problema. Assim, essa atividade foi de suma importância para a condução do trabalho de avaliação do Automock. A revisão bibliográfica apresentou Tim Mackinnon como o criador do conceito de Objetos Mock (MACKINNON, 2001). Seu intuito primário era de auxiliar os desenvolvedores a escrever testes para objetos isolados, enquanto seguiam o método Extreme Programming (BECK, 2000). Também foi mostrado que outra abordagem isolar esses objetos são os Stubs, que, mesmo que tenham os mesmos objetivos dos Objetos Mock, não são o mesmo (FOWLER, 2007). De acordo com Meszaros, Stubs proveem respostas predefinidas para as chamadas feitas durante um teste; se usados fora do programado para o teste, é possível que responsam incorretamente (MESZAROS, 2007). Por outro lado, Objetos Mock são dinamicamente préprogramados com expectativas; se usados fora do programado para o teste, eles podem indicar explicitamente uma falha. Há ainda outras características que os diferenciam: por exemplo, Objetos Mock geralmente contam o número 27

de vezes que cada operação é invocada, além de verificar os argumentos fornecidos às operações e terem seus valores de retorno pré-estabelecidos. Através dessa atividade pôde-se conhecer uma gama de arcabouços dedicados a auxiliar testadores na construção de testes com Objetos Mock. Dentre eles, pode-se listar o EasyMock (EASYMOCK, 2009) e o GoogleMock (GOOGLEMOCK, 2009). A revisão bibliográfica também revelou alguns trabalhos diretamente relacionados ao Automock. O GenUTest, por exemplo, é uma ferramenta que captura e registra interações entre os objetos durante a execução de programas Java para gerar testes JUnit (PASTERNAK, 2009). Apesar de aparentar ser bastante similar à técnica proposta, GenUTest depende de uma versão funcional do software para executar, e gera testes de unidade para todos as classes do sistema; o Automock, por outro lado, espera que o testador indique um objeto-alvo e provenha algum teste que exercite esse objeto (SOUTO, 2009). Ainda, pelo que consta, o GenUTest, até o presente momento, parece não ter sido levado a público, dificultando o estudo dessa ferramenta que tanto se assemelha ao Automock. Outros trabalhos bem relacionados foram um protótipo de ferramenta para geração de Objetos Mock usando uma combinação de execuções concreta e simbólica de código.net (TILLMANN, 2006), e uma proposta de ferramenta para conversão automática de testes de sistema em uma coleção de testes de unidade, a fim de apoiar a fatoração de testes (SAFF, 2005). Esse último trabalho utiliza a técnica de instrumentação do código binário do sistema, inclusive de todas as suas dependências (por exemplo, as bibliotecas que usa), exceto da CUT. Apesar da similaridade à técnica Automock, nenhum desses trabalhos parece abordar o problema da maneira proposta (SOUTO, 2009), o que aumenta seu trabalho em relevância e originalidade. A partir dessa atividade foram geradas as seções 2 e 1 dos artigos para o SAST'09 e o LA-WASP'09, respectivamente, que podem ser encontrados nos apêndices C e D. 28

4.2. Escrita de Artigo Dada a relevância e originalidade do trabalho de geração automática de testes com Objetos Mock, o próximo passo foi documentar seu estágio atual no formato de artigo científico. Embora tenha sido útil para treinar a prática da escrita de documentos formais, o maior objetivo dessa atividade era de apresentar à comunidade científica a abordagem a ser seguida para solucionar o problema da escrita de testes com Objetos Mock. O primeiro fruto dessa atividade foi o artigo escrito para o SAST'09 (vide apêndice C). Por questões de imaturidade do trabalho, esse artigo acabou não sendo submetido para a conferência a tempo. Entretanto, a partir dele foi escrito o artigo para o LA-WASP'09 (vide apêndice D). Esse último trabalho foi submetido ao evento e notificado como aceito. Ele foi defendido por Sabrina Souto durante o evento, ocorrido em outubro de 2009 em Fortaleza. Foi publicado em CD-ROM pela IEEE Computer Society, juntamente com os anais do SBSE'09. 4.3. Defesa de Plano de Estágio A ideia do estágio era de realizar a avaliação da técnica Automock por meio de estudos de caso. Para isso, deveria-se averiguar o ganho promovido pela técnica automatizada frente à construção manual de testes com Objetos Mock. Assim, seriam selecionados testes já desenvolvidos para os sistemas sob estudo, que seriam convertidos manualmente e automaticamente (com uso do protótipo de ferramenta) em testes com Objetos Mock. Sobre esses testes com e sem o uso de Objetos Mock seriam aplicadas métricas preestabelecidas: tempo para geração, total de linhas de código, cobertura da execução, número de detecções de erro, equivalência em semântica. O resultado dessas métricas, por uso de diferença simples, geraria o ganho proporcionado pela técnica sobre a construção manual de testes com Objetos Mock. Os sistemas para estudo foram selecionados pela proximidade da equipe de desenvolvimento. Esses sistemas eram o OurBackup, o Hidrogis e o OurGrid. Desenvolvido no LSD nos anos de 2007 e 2008 sob orientação de 29

Dalton Serey, o OurBackup (OLIVEIRA, 2008) é voltado para o compartilhamento de arquivos entre amigos, visando o becape cruzado; o Hidrogis foi desenvolvido no Laboratório de Sistemas de Informação (LSI), na UFCG; e o OurGrid (CIRNE, 2006), também desenvolvido no LSD, foca no compartilhamento de poder computacional entre várias grades de máquinas oportunistas. Todos os três sistemas possuem desenvolvedores próximos, o que facilitaria o trabalho de avaliação do Automock. O Plano de Estágio, que pode ser obtido no Apêndice A, foi defendido por meio de uma apresentação, disponível no Apêndice B. Após apreciação do trabalho frente à professora e à turma da disciplina de Estágio Integrado, foi aprovado com a pontuação máxima. 4.4. Documentação das Atividades Foi acordado com a supervisora técnica que todas as atividades relevantes desenvolvidas durante o estágio seriam registradas. Para tanto, foi criado um espaço em wiki no serviço Redmine (REDMINE, 2009), hospedado nos servidores do LSD. As atividades passíveis de documentação são primariamente as reuniões, sejam formais ou informais; o andamento das atividades, sejam de cumprimento obrigatório da disciplina, sejam decorrentes da condução do estágio integrado; quaisquer ideias que forem surgindo, que possam de alguma forma contribuir para melhorar o trabalho. Assim, durante todo o decorrer do estágio, foram postadas anotações que documentam adequadamente as atividades desenvolvidas no âmbito do estágio integrado. Além de tudo, também foram documentados os cronogramas de trabalho, horários de presença no estágio e as atividades desenvolvidas atualmente no âmbito do estágio, tanto do estagiário quanto de seu supervisor técnico. Portanto, o wiki do Redmine tornou-se serviço primordial na boa condução do estágio integrado; obteve status de serviço de centralização das informações concernentes ao estágio, bem como serviço de comunicação confiável público entre o estagiário e seu supervisor técnico. 30

4.5. Seleção de Casos de Teste Para dar início à avaliação da técnica Automock, foi necessário selecionar um sistema como ponto de partida para estudá-lo, entendê-lo e, por fim, poder extrair uma suíte de testes que comporia o estudo de caso. O primeiro sistema escolhido foi o OurBackup (OLIVEIRA, 2008). Esse sistema se apresenta em duas versões: a Home, voltada para usuários doméstico, e a Enterprise, direcionada a usuários corporativos. Visto que o estagiário havia participado do desenvolvido da versão Enterprise do OurBackup e isso implicaria em uma curva de aprendizado menos custosa, essa foi a escolha inicial de sistema para estudo. Após alguns estudos sobre o estado atual do sistema, constatou-se que o OurBackup Enterprise não possuia testes adequados para compor a suíte do estudo de caso. Apenas dois testes envolviam uma CUT e seus colaboradores; entretanto, esses testes já possuíam respectivos com uso de mocks. Os demais testes do sistema se encaixam em cinco categorias: ou são testes de unidade, cuja CUT é testada na inexistência de colaboradores; ou são testes de aceitação sobre um módulo servidor, cujo módulo cliente recebe os estímulos de entrada e fornece as respostas de saída; ou são testes de unidade com CUT e colaboradores, cujos colaboradores já são objetos mock; ou são testes de unidade cuja CUT não está bem modularizada, lidando diretamente com o ambiente (seja agregando responsabilidade ou usando instâncias locais de seus colaboradores em seus métodos), quando isso deveria ser feito por meio de colaboradores globais; ou são testes nãodeterminísticos (isto é, nem toda execução admitirá o mesmo comportamento resultante), que envolvem a realização de operações não necessariamente sequenciais (paralelas ou concorrentes) para atingir condições probabilísticas sobre o estado do sistema. (como é a maioria dos sistema distribuídos, senão todos). Além disso, testes adequados para a técnica Automock (chamados testes mockáveis ) não devem ser dependentes do tempo de execução, como ocorre com alguns testes não-determinísticos, uma vez que a substituição de colaboradores reais por Objetos Mock pode alterar o tempo de execução do sistema sensivelmente (imagine colaboradores para acesso a BD ou conexões 31

remotas). Dado o uso inviável dos testes do OurBackup Enterprise, não houve outra opção senão descartar o sistema. O próximo sistema sob estudo foi o OurBackup Home. Após diversas análises do sistema e de seus testes, constatou-se que ele apresentava as mesmas deficiências do sistema OurBackup Enterprise. No entanto, sua suíte de testes com Objetos Mock era bem maior. Foi identificado que em ambos os softwares os testes de unidade cuja CUT interage com diversos colaboradores (isto é, os testes focados pelo Automock) já fazem uso de Objetos Mock. Considera-se, pois, sua suíte de testes como de boa qualidade para os padrões atuais de teste de software. Uma alternativa em todo caso seria construir testes para os sistemas sob estudo. Isso requere conhecimento profundo sobre esses sistemas e os relacionamentos estabelecidos entre os objetos em tempo de execução. O tempo de aprendizado seria grande. Portanto, essa foi uma alternativa descartada. Outra alternativa consistia em converter os testes com código mock em testes com colaboradores reais, para então proceder de maneira inversa. No entanto, isso implicaria em realizar manualmente ou dispor de uma ferramenta para tal; ambas as abordagens podem apresentar imperfeições e não garantir equivalência semântica entre os testes original e alterado (vale salientar que avaliar a validade de uma técnica de conversão de testes com código mock em testes com colaboradores reais é da mesma ordem de complexidade de avaliar a técnica Automock). Também requere conhecimento aprofundado do sistema para saber que colaborador real faz o papel exato do Objeto Mock presente em um teste, para questões de substituição. Ainda é um requisito conhecimento acerca da gerência de configuração do sistema, que pode ser bastante complexa, dada a complexidade dos sistemas sob estudo. Por fim, uma limitação dessa abordagem foi de que nem sempre há colaboradores reais no software que se comportem de maneira exata ao modo prescrito pelos Objetos Mock; esse código mock pode realizar o comportamento errôneo (casos de erro ou de alteração do software original), ou ainda servir pra injetar falhas propositais no sistema, desviando do comportamento esperado para um colaborador. Ainda, mesmo que haja colaboradores que se comportem à 32