Análise Comparativa de Ferramentas de Teste para Aplicações em Banco de Dados Cynthia G. Pierazo¹, Letícia B. M. Rodrigues¹, Hélio R. Soares¹, Sônia P. Santana¹ 1 Instituto de Informática – Centro Universitário do Triângulo (UNITRI) Av. Nicomedes Alves dos Santos, 4545 – Gávea – Caixa Postal 38.411-106 – Uberlândia – MG - Brasil {cpierazo, lezinhabmr, sonia.ap.santana}@gmail.com, [email protected] Abstract. This article aims a comparative analysis between the tools DB Stress and JMeter. For purposes of contextualization, it will be presented testing basic concepts and also, afterward, some testing tools for applications in databases. The tools presented are designed to help the analysis of databases performance which provides a better quality of applications for uses. Resumo. Este artigo tem como objetivo a análise comparativa entre as ferramentas DB Stress e JMeter. Para fins de contextualização serão apresentados conceitos básicos de teste, e em seguida algumas ferramentas de teste para aplicações em bancos de dados. As ferramentas apresentadas têm por objetivo auxiliar a análise de desempenho dos bancos de dados possibilitando uma melhor qualidade das aplicações para os usuários. 1. Introdução Cada vez mais os softwares estão presentes na vida das pessoas, seja em celulares, bancos, entre outros. Consequentemente os mesmos estão se tornando cada vez mais complexos devido ao avanço tecnológico. E o quesito qualidade é de extrema importância para uma maior confiabilidade ao adquirir um software. Isso torna o teste uma das etapas fundamentais no processo de criação de software. Com o teste de software têm sido de suma importância para uma maior qualidade do produto, várias técnicas e ferramentas vêm sendo propostas. As técnicas utilizadas para o teste de software são as técnicas funcionais e estruturais. O processo de teste consiste em executar o software de maneira controlada com a finalidade de avaliar se o mesmo se comporta conforme o especificado. A divisão deste artigo encontra-se organizada da seguinte forma: a seção 2 apresenta os conceitos básicos de teste com o objetivo de apresentar os tipos de teste e algumas técnicas utilizadas. Na seção 3 mostra algumas ferramentas utilizadas para realização de testes em bancos de dados, já na seção 4 encontra-se o estudo de caso das ferramentas DB Stress e JMeter. Na seção 5 apresenta a análise comparativa do estudo de caso das ferramentas escolhidas e na seção 6 é apresentada a contribuição do artigo e a perspectiva de trabalhos futuros. 2. Conceitos A atividade de teste possui definições diferentes, isso é devido às diversas estratégias de teste que podem ser utilizadas. Segue alguns exemplos: • Teste é uma das atividades de garantia da qualidade de software e constitui um dos elementos para aprimorar a produtividade e a confiabilidade do software (Maldonado, 1991). • O teste tem como objetivo encontrar defeitos (Myers, 1979). • Qualquer atividade que a partir da avaliação de um atributo ou capacidade de um programa ou sistema, seja possível determinar se ele alcança os resultados desejados (Dória, 2001). • A qualidade do software pode ser entendida como um conjunto de características que devem ser satisfeitas, de modo que o software atenda a todas as necessidades dos usuários (ROCHA, 2001). Uma das metodologias de teste muito utilizada no mercado é a FURPS (Functionality, Usability, Reliabity, Performance, Supportability). Esta metodologia é dividida em categorias que serão descritas a seguir (Rios, 2012): A categoria de funcionalidade visa verificar se o produto de software construído esta de acordo com o que foi especificado. Para esta verificação pode-se realizar os tipos de teste: • Teste funcional: concentra-se na verificação das funcionalidades do sistema especificado. Também conhecido como teste caixa-preta (Gonçalves, 2003). • Teste de regressão: tem como objetivo verificar se as alterações realizadas no sistema não afetaram partes inalteradas (Pinheiro, 2012). • Teste de volume: verifica se o sistema funciona com volume de dados definidos em seus requisitos (Rios, 2012). • Teste de segurança: destinado a identificar possíveis falhas de acessos indevidos, visando garantir a segurança da aplicação (Pressman, 2002). A categoria de usabilidade tem o objetivo de demonstrar a facilidade de uso do sistema. Segue os tipos de teste referente a esta categoria (Bernardo, 2011): • Teste de interface: é a interação do usuário com o produto de software garantindo acesso a navegação das funcionalidades de acordo com o que foi especificado. • Teste de usabilidade: verifica a facilidade de uso do sistema e se o mesmo segue os padrões visuais da empresa. A categoria de confiabilidade garante a integridade dos dados e da estrutura de dados. Seguem alguns dos testes que podem ser realizados para garantir a confiabilidade: • Teste de integração: possui o objetivo de avaliar a integração dos módulos para identificar falhas de lógica do desenvolvimento do software (Emer, 2007). • Teste de estrutura: verifica a adequação do sistema com relação ao desenvolvimento (Leitão, 2005). • Teste de estresse: avalia o software sob condições anormais, como: memória insuficiente, carga de trabalho extrema, etc., ou seja, este teste possibilita uma visão melhor de como o sistema deve ser dividido para facilitar os planos de contingência e manutenção (Santana, 2007). • Smoke test: é uma passagem única pelo sistema, e geralmente é executado de forma automática. O ideal é que seja realizado ao final da construção de cada versão do sistema (Bernardo, 2011). A categoria de desempenho visa garantir a velocidade de processamento das informações. Podem ser realizados os tipos de teste a seguir (Rios, 2012): • De acordo com Rios (2012) ‘o teste de avaliação desempenho compara o desempenho de um objetivo de teste a um sistema e uma carga de trabalho de referência conhecidos’. • Teste de contenção: destinado a verificar se o software pode trabalhar de forma aceitável com vários usuários ao mesmo tempo. • Teste de carga: tem como objetivo verificar se o software atende as exigências do ambiente de produção. • Perfil de desempenho: teste que monitora as ações do software para identificar os pontos de gargalos de desempenho e processos ineficientes (Bruneli, 2006). A categoria de suportabilidade é a capacidade de o sistema funcionar em diversos ambientes. A seguir os tipos de teste que contribuem para garantir esta categoria (Rios, 2012). • Teste de configuração: garante que o sistema funcione em diferentes ambiente de hardware e software. • Teste de instalação: garante que o sistema seja instalado conforme o esperado em diferentes ambientes. 3. Algumas ferramentas do mercado Para auxiliar o trabalho de teste nas aplicações de banco de dados o mercado de tecnologia possui ferramentas que realizam os testes de forma automática, estes testes trouxeram mais agilidade e mais credibilidade a esses produtos. Das diversas ferramentas de teste em banco de dados, algumas delas são de código livre, outras são freewares (ferramentas gratuitas) ou sharewares (ferramentas gratuitas, porém com limitações de acesso a algumas funcionalidades ou de tempo para utilização) e, por fim, algumas são pagas. A seguir será apresentado um breve resumo do conceito de cinco ferramentas utilizadas no mercado: DTM DB Stress, DBTester, JMeter, DBMonster, GS Data Generator. Posteriormente será realizado um estudo de caso de duas ferramentas. 3.1 DTM DB Stress O DTM DB Stress é uma ferramenta para fazer testes de estresse em partes de servidores de sistemas de informação e aplicativos. Esta ferramenta permite a criação e configuração de um conjunto contínuo de requisições para o servidor dos tipos OLAP (execução de query) e OLTP (adicionar, modificar e apagar dados no banco de dados). Ao mesmo tempo, o usuário pode alterar com flexibilidade o número e a prioridade de ambos ou o tipo de requisições para o banco de dados ou aplicativo. A ferramenta é útil para quem deseja ter certeza de que o produto está sendo desenvolvimento pode trabalhar com um grande número de conexões simultâneas, consultas e transações concorrentes. Esta ferramenta também possibilita que os administradores de bancos de dados avaliem o desempenho atual do servidor e possam realizar o planejamento do aumentar o poder de processamento (DTM Database Tools, 2013). A tabela 1 apresentada às funcionalidades disponíveis para as versões do DTM DB Stress. Tabela 1. Funcionalidades por versão do DB Stress (DTM Database Tools, 2013) Características Standard Professional Enterprise Número máximo de usuários 64 Ilimitado* Ilimitado* Número máximo de parâmetros SQL 10 99 99 Personalizar separador de valores Funções de importação e exportação Personalizar intervalos de estatísticas Opção de conexão no nível de tarefa Definir execução de script Unir tarefas em grupo Modo Console Gerador de dados Biblioteca de scripts Integração visual segura Comparação de relatórios Visualizador de relatório Relatório de dados de desempenho Apresentar Plano de Execução *O sistema operacional e o banco de dados podem limitar o número de threads. 3.2 DBTester Esta ferramenta possibilita a realização de testes de integridade dos dados, conectividade com bancos heterogêneos, definição de limites para os resultados das consultas, monitorar o crescimento do banco de dados, criar repositório de casos de teste, acompanhamento do crescimento de dados, migração de dados, verificação de replicação entre os bancos de dados e configuração de teste com padrão pré-definido. Esta ferramenta é um software pago (Imasterdata, 2013). 3.3 JMeter A ferramenta JMeter é uma aplicação desktop projetada para a realização de testes de desempenho e estresse em aplicações cliente/servidor. A ferramenta foi se expandindo, sendo capaz de realizar outros testes, tais como servidor de banco de dados, servidor FTP, entre outros. Alguns dos requisitos da ferramenta JMeter são (Apache – Jmeter, 2013): • Escalabilidade para assegurar se um SGBD está capacitado para suportar certa quantidade de usuários simultâneos. • Análise do tempo de resposta do sistema. • Expandir a capacidade de processamento e armazenamento de registros. • Aperfeiçoar o uso de seus recursos. Os principais elementos ligados à execução de testes de capacitação de banco de dados são: Grupo de Usuários, JDBC Request e Graph Results. • Grupo de Usuários: neste componente é possivel informar a quantidade de usuarios que irá simular o teste e o comportamento dos usuários quanto à utilização de requisições ao SGBD, segue os parametros básicos do componente (Bernardo, 2011): Número de Usuários: este parâmetro recebe a quantidade de usuários concorrentes a simular o teste. Tempo de Inicialização: qual será o tempo em segundos que a ferramenta tem para colocar todos os usuários em execução. Contador de Interação: indica o número de vezes que o comando do teste será repedito. Marcando a opção infinito entende-se que o comando será repetido muitas vezes até todos usuários concluírem. • JDBC Request: nesta funcionalidade é realizada a preparação do comando SQL que deve ser executado (Apache –Jmeter, 2013). • Graph Results: esta funcionalidade exibe gráfico onde é possível visualizar informações referente ao tempo de resposta dos teste realizados pelos usuários. (Bernardo, 2011). 3.4 DBMonstrer Esta ferramenta ajuda os desenvolvedores de bancos de dados, incrementando a estrutura da base de dados, o uso de índices, e testando o desempenho da aplicação sobre um grande número de dados. O DBMonster gera tanto testes aleatórios, quanto testes da maneira que atendam as regras de negócio dentro do banco de dados SQL (Horário, 2013). 3.5 GS Data Generator Esta é uma ferramenta paga de testes automatizados que permite a geração de dados. Essa ferramenta permite a geração de dados aleatórios e a realização de testes de desempenho, usabilidade e carga de dados. (GSAPPS, 2013). A tabela 2 apresenta as funcionalidades disponíveis em cada versão do GS Data Generator. Tabela 2. Funcionalidades das versões do GS Data Generator (GSAPPS, 2013) Características Standard Professional Geração de dados aleatórios Dicionário de dados Listas Personalizadas Suporte a Integridade Referencial Visualização e edição de dados Operações com arquivos texto Debug Execução de lote Portabilidade Engenharia reversa de metadados Inserir e Atualizar Operações Controle de Pesquisa Personalizar Funções Funções pré – construídas Suporte a Jscript e SQL 4. Estudo de Caso Foi utilizado uma máquina com 3 GB de memória RAM, sistema operacional Windows 7 de 32 bits e processador Intel Core i3 onde foi criado um ambiente virtual com a ferramenta Virtualbox com memória de 1024MB, sistema operacional Windows XP, a ferramenta Oracle Database 10g XE, a ferramenta de teste DB Stress versão Enterprise 1.21.01 e a ferramenta JMeter versão 2.9. Foi utilizado o modelo de dados de uma empresa de Recursos Humanos, este modelo está disponível na versão do Oracle utilizada para os testes, cujo owner é HR. O estudo de caso foi baseado nos seguintes critérios: • Custo; • Plataformas; • Conexão com banco de dados; • Funcionalidades; • Interface Gráfica; A tabela 3 apresenta as principais funcionalidades das duas ferramentas analisadas. Tabela 3. Funcionalidades DB Stress x JMeter Opções DB Stress JMeter Código Livre X Multiplataforma X Conexão com vários bancos de dados X X Gráficos X X Execução de script X X Simulador de Usuários X X Gerador de Dados X Relatório Comparativo X Plano de Execução X Modo Console X Log X Biblioteca de scripts X X X Analisando a tabela 3 observa-se que o DB Stress é compatível apenas com a plataforma Windows, enquanto a ferramenta JMeter possui compatibilidade com qualquer ambiente capaz de suportar a máquina virtual Java versão 1.4 ou superior (Solaris, Linux, Windows e etc.). Avaliando as ferramentas com relação a custo identifica-se que a ferramenta JMeter é de código livre e a ferramenta DB Stress é um software pago, cujo as informações referente a valores e licenças estão disponível no site da ferramenta. Ambas as ferramentas podem ser conectadas aos bancos de dados: Microsoft SQL Server, Oracle, MySQL, Interbase/Firebird, IBM DB2 e PostgreSQL. Para demonstrar algumas funcionalidades foi simulado o cadastro de dados na tabela “employees” do modelo de dados do Oracle de owner HR. Será simulado o teste com 2 usuários simultâneos por um período de 50 segundos. O teste será realizado primeiramente na ferramenta DB Stress. Para iniciar o teste é necessário configurar a conexão com banco de dados que na ferramenta DB Stress é uma conexão ODBC comumente utilizada em banco de dados relacionais, conforme pode ser visto na figura 1. Após a conexão com o banco ter sido configurada os scripts de teste podem ser preparados na funcionalidade "Task Properties” onde deve inserir os scripts SQL manualmente ou através de arquivos salvos e realizar a definição da quantidade de usuários que executarão os testes. A figura 2 exibe a preparação dos scripts do teste. Na funcionalidade “Project Stress” ocorre à execução de todas as tarefas de teste configuradas. Nesta funcionalidade é permitida a configuração de tempo de execução, ordem e inicialização da execução dos testes programados. A configuração de execução do teste pode ser vista na figura 3. Uma funcionalidade bastante utilizada após a realização dos testes é o resultado em gráfico exibido na figura 4. Através do gráfico é possível visualizar o desempenho dos testes realizados por cada usuário durante o período de tempo de execução configurado. Esta funcionalidade possui a desvantagem de não ter opção de armazenar o gráfico gerado. Para obter os resultados dos testes realizados anteriormente é possível avaliar através de relatórios ou realizar uma nova execução. Figura 1. Configuração da conexão com banco de dados no DB Stress. Figura 2. Preparação do teste Figura 3. Configuração da execução do teste Figura 4. Resultado por gráfico no DB Stress Figura 5. Console SQL O DB Stress ainda possibilita a execução de instruções SQL através da funcionalidade “Console SQL”. Nesta funcionalidade quando o mouse é colocado sobre a coluna exibida nos resultados é possível saber que tipo de dado é armazenado na coluna. Os resultados das instruções SQL podem ser exportados para os formatos: TXT, SQL, HTML, XML ou Microsoft Excel, como é demonstrada na figura 5. A seguir será realizado o mesmo cenário de teste da ferramenta DB Stress na ferramenta JMeter. A primeira configuração a ser realizada no JMeter para o teste de banco de dados é a configuração de quantos usuários, quantas vezes e quantos testes devem ser realizados, isso ocorre na funcionalidade “Thread Group” conforme a figura 6. Após a configuração de usuário deve ser criada a conexão com banco de dados que no JMeter é feita uma configuração JDBC na funcionalidade “JDBC Connection Configuration”. Para cada cenário de teste deve ser criada uma conexão com banco de dados individual conforme é exibido na figura 7. Uma vantagem desta forma de configuração é poder realizar testes com banco de dados diferentes. Os scripts de teste devem ser inseridos manualmente na funcionalidade “JDBC Request”. A configuração “Variable Name Bound to Pool” indica de qual Configuração de conexão de banco de dados deve ser usada para a execução do teste. A criação do script de teste esta exibida na figura 8. Figura 6. Configuração de usuário Figura 7. Conexão com banco de dados Figura 8. Script de teste Figura 9. Gráfico de resultados Os resultados do teste realizado no JMeter são exibidos em gráfico de resultados onde é possível visualizar os tempos de todas as requisições, o desvio padrão, a média e a taxa de requisições realizadas por segundo. Esta funcionalidade permite que o usuário escolha quais dados e em quais formatos serão salvos que deve ser configurado antes da execução do teste na funcionalidade “Graph Results”. O resultado do teste está exibido no gráfico da figura 9. O JMeter ainda tem outras formas de apresentação dos resultados através das funcionalidades "View Results Tree"e "Assertion Results". 5. Análise comparativa Através do estudo de caso pode-se observar que com relação aos critérios de custo e plataformas a ferramenta JMeter apresentou-se mais adequada. Com relação ao critério de conexão com banco de dados, ambas a ferramentas podem se conectar aos mesmos bancos de dadas. No critério de funcionalidade as duas ferramentas possuem funcionalidades para realização de teste de carga e desempenho que facilitam a análise das necessidades dos ambientes corporativo das aplicações em banco de dados. Pode se observar que a ferramenta DB Stress possui funcionalidades que auxiliam nas atividades de instruções SQL e a possui funcionalidades além das relacionadas à realização de testes para aplicações de banco de dados Com relação ao critério de interface gráfica de ambas as ferramentas demonstram usabilidade conforme padrão de ferramentas disponíveis no mercado. A escolha para utilização do DB Stress ou JMeter está relacionado ao foco que a empresa necessita para os testes. Se a aplicação em banco de dados for crítica e a empresa dispõe de capital para investir em ferramenta paga a DB Stress apresentou-se a mais direcionada para estes casos, porém se a empresa necessitar realizar testes em aplicações de banco de dados e aplicações Web a ferramenta JMeter poderá atender de forma satisfatória a essa necessidade. 6. Conclusão O objetivo deste artigo foi apresentar uma comparação entre as ferramentas DB Stress e JMeter como alternativa para auxílio nas tarefas diárias no ambiente corporativo das aplicações de banco de dados. Neste artigo foi possível observar que a ferramenta DB Stress possui as desvantagens de pouca documentação disponível, ser um software pago, possuir a limitação de pode ser utilizado apenas na plataforma Windows e apresentar o gráfico de desempenho apenas após a execução do teste na própria ferramenta. DB Stress pode ser indicado para empresas que trabalham com alto volume de dados e administradores de banco de dados devido às vantagens de possuir vários mecanismos de configuração, simulação de teste com usuários em diferentes tarefas e funcionalidades que auxiliam a análise dos resultados dos testes executados. Já o JMeter é uma aplicação de código aberto, multiplataforma, funcionalidades para teste de aplicações web. A ferramenta possui a desvantagem de avaliar os resultados apenas através de gráficos diante disto pode-se indicar esta ferramenta aos desenvolvedores para realização de teste de carga, desempenho e stress. Como trabalhos futuros seria a comparação dessas ferramentas com outras ferramentas do mesmo segmento disponíveis no mercado ou a avaliação das outras funcionalidades disponíveis na ferramenta JMeter. 7. Referências DTM - Database Tools. Endereço BBS: sqledit.com, login: . 23 abril 2013. Apache – Jmeter. Endereço BBS: jmeter.apache.org, login, . 23 abril 2013. BRUNELI, Marcos Valério de Queiroz. A utilização de uma metodologia de teste no processo da melhora da qualidade de software Campinas: Universidade Estadual de Campinas, Instituto de Computação, 2006. 20p. (Tese, Mestrado). Disponível na internet. http://www.bibliotecadigital.unicamp.br/document/?code=vtls000423676. 04 de maio de 2013. BERNARDO, Paulo Cheque. Padrões de testes automatizados São Paulo: Universidade de São Paulo, Instituto de Matemática e Estatística da Universidade de São Paulo, 2011. (Tese, Mestrado). Disponível na internet. http://www.teses.usp.br/teses/disponiveis/45/45134/tde-02042012-120707/pt-br.php. 04 de maio de 2013. MYERS, Glenford J., The art of sofware testing. New York: Wiley, 1979. PRESSMAN, R. S. Engenharia de software. 5ª Ed. Rio de Janeiro: MCGraw-Hill, 2002. RIOS, Emerson, BASTOS, Aderson, CRISTALLI, Ricardo et al. Base de conhecimento em teste de software. 3ª Ed. São Paulo: Martins Editora, 2012. MALDONADO, Jose Carlos. Critérios potenciais usos: Uma contribuição ao teste estruturado de software. Campinas: Universidade Estadual de Campinas, Faculdade de Engenharia Elétrica, 1991. (Tese, Doutorado). Disponível na internet. http://www.bibliotecadigital.unicamp.br/document/?code=vtls000031945&opt=4. 04 de maio de 2013. GONÇALVES, Klausner Vieira. Teste de software em aplicações de banco de dados relacional. Campinas: Universidade Estadual de Campinas, Instituto de Computação, 2003. (Tese, Mestrado). Disponível na internet. http://www.bibliotecadigital.unicamp.br/document/?code=vtls000311559&opt=4. 12 de maio de 2013. DÓRIA, Emerson Silas. Replicação de estudos empíricos em engenharia de software. São Carlos: Instituto de Ciências matemática e de Computação – ICMC-USP, 2001. (Tese, Mestrado). Disponível na internet. www.teses.usp.br/teses/disponiveis/55/55134/tde-10052002103851/Emerson_Silas_Doria.pdf. 12 de maio de 2013. EMER, Maria Claudia Figueiredo Pereira. Abordagem de teste baseada em defeitos para esquemas de dados. Campinas: Universidade Estadual de Campinas, Faculdade de Engenharia Elétrica e de Computação, 2007. (Teste, Mestrado). Disponível na internet. http://www.bibliotecadigital.unicamp.br/document/?code=vtls000426157&opt=4 12 de maio de 2013. ROCHA, A, MALDONADO, Jose Carlos, WEBER, K. Qualidade de software: teoria e prática. São Paulo: Prentice-Hall, 2001. 138p. PINHEIRO, Arineiza Cristina. Subsídios para a aplicação de métodos de geração de casos de testes baseados em máquinas de estados. São Carlos: Universidade de São Paulo, Instituto de Ciências matemáticas e de computação, 2012. 6-7p. (Tese, Mestrado). Disponível na internet. www.teses.usp.br/teses/.../DissertacaoREVISADA_ArineizaPinheiro.pdf. 12 de maio de 2013. LEITÃO, Plínio de Sá Júnior. Teste baseado na interação entre regras ativas escritas em SQL. Campinas: Universidade Estadual de Campinas, Faculdade de Engenharia Elétrica e de Computação, 2005. 3p (Tese, Doutorado). Disponível na internet. http://www.bibliotecadigital.unicamp.br/document/?code=vtls000376468&opt=4. 14 de junho de 2013. SANTANA, André Aguiar. Metodologia de teste para acelerar o desenvolvimento de sistemas de processamento paralelo. São Paulo: Escola Politécnica da Universidade de São Paulo, 2007. 26-32p (Tese, Doutorado). Disponível na internet. www.teses.usp.br/teses/disponiveis/3/.../TeseAndreSantanaFinalv20OK.pdf. 14 de junho de 2013. GSAPPS. Endereço BBS: gsapps.com, login: . 05 maio 2013. HORÁCIO, Janaina de Souza. GearDB: uma nova ferramenta para geração de dados. ftp://ftp.inf.puc-rio.br/pub/docs/techreports/11_15_horacio.pdf. 05 maio 2013. IMASTERDATA. Endereço BBS: imasterdata.com. 18 maio 2013.