Você está na página 1de 19

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

Ismayle de Sousa Santos1 Pedro de Alcntara dos Santos Neto1 Rodolfo Srgio Ferreira Resende2

Resumo: Apesar do teste de software estar relacionado garantia de


qualidade, ele demanda tempo e recursos, por isso acaba por no ser realizado em parte dos projetos executados. No contexto das empresas que sempre realizam testes, percebe-se que o teste funcional cresce em utilizao e que o teste de desempenho e estresse ainda pouco executado, mesmo diante do aumento do nmero de sistemas acessveis via Web, nos quais esses testes so considerados essenciais. Neste artigo proposto um mtodo e sua ferramenta de apoio gerao de testes de desempenho e estresse de sistemas Web a partir de testes funcionais, na tentativa de popularizar o teste para esses requisitos no-funcionais. Apresenta-se tambm um estudo experimental que concluiu que o uso do mtodo e da ferramenta pode gerar ganhos em termo de reduo de esforo na criao desses testes de requisitos no-funcionais.

Abstract: Despite the fact that the software testing is related to quality
assurance, in order to save time and resources, it is not performed in part of software projects. In the organizations where testing is performed it can be seen that functional testing is getting more common and that the stress and

1 2

UFPI/DIE, Teresina-PI, {ismayle,pasn}@ufpi.edu.br UFMG/DCC, Belo Horizonte-MG, rodolfo@dcc.ufmg.br

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

performance tests are scarcely performed despite the increment of web-based systems where the latter are considered essential. In this article it is proposed a method and its supporting tool for stress and performance test generation of web based systems, in order to facilitate the execution of non-functional testing. The stress and performance test generation takes advantage of functional tests. Experimental studies are also presented showing that the method and the tool can generate overall effort reduction for these tests generation.

Introduo

Em um contexto de alta competitividade como o atual, principalmente quando se fala em sistemas Web, importante que as expectativas do cliente sejam atendidas o mais plenamente possvel, caso contrrio, o sistema desenvolvido ser rapidamente sobrepujado pelos concorrentes [1]. Essas expectativas podem estar explcitas, quando o cliente exige que o sistema desempenhe determinada funo, ou podem ser necessidades implcitas, tais como a necessidade que o sistema seja facilmente utilizvel ou que responda s requisies em um tempo mximo [2]. A atividade de teste parte importante do processo de garantir que essas expectativas sejam atendidas. Os testes, entretanto, requerem tempo, conhecimento, planejamento, infraestrutura e pessoal especializado sendo, portanto, uma atividade inerentemente custosa [1]. Esses so os principais motivos que fazem com que algumas empresas desenvolvedoras de software no realizem testes. No entanto, a ausncia dessa atividade pode deixar passar falhas que podem causar prejuzos irreparveis tanto para a empresa desenvolvedora quanto para o prprio cliente. Um exemplo disso aconteceu no Servio de Emergncia de Londres em 1992 [3]. Nesse episdio houve perda de vidas devido a um aumento nas solicitaes e incapacidade do sistema em tratar um grande nmero de requisies simultneas. Testes de desempenho e estresse poderiam ter detectado esse problema, evitando assim a catstrofe. O cenrio atual relacionado execuo de testes de software pode ser resumido da seguinte forma: boa parte das organizaes realiza o teste funcional, uma vez que ele envolve conceitos mais difundidos; mas por outro lado, poucas organizaes realizam os testes de desempenho e estresse, embora seja notoriamente reconhecida sua importncia, principalmente quando se trata de sistema para Web. Isso pode ser verificado nos dados obtidos do Programa Brasileiro da Qualidade e Produtividade de Software [4], que indicam que 54% das organizaes executam testes de aceitao (que so basicamente testes funcionais), porm no h qualquer referncia a testes de desempenho e estresse.

RITA Volume 17 Nmero 2 2010

175

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

A partir desse cenrio, pode-se observar que uma contribuio significativa para as organizaes desenvolvedoras de software seria criar, de alguma forma, um mecanismo que auxiliasse o desenvolvimento de testes de desempenho e estresse a partir de algum artefato gerado durante o processo de desenvolvimento. Como as empresas que tm a inteno de realizar testes de desempenho e estresse j executam, em sua grande maioria, testes funcionais, esses ltimos se tornam, portanto, timos candidatos para serem usados na gerao dos testes de desempenho e estresse. Alm disso, os testes funcionais possuem boa parte das informaes necessrias, que so as funcionalidades a serem exercitadas, os dados a serem utilizados e os resultados esperados, o que garante a viabilidade da idia proposta. Assim, apresenta-se neste artigo uma abordagem inovadora: a gerao de testes de desempenho e estresse a partir de testes funcionais. Essa gerao tem como objetivo reduzir os custos e o tempo gasto com esses testes, a partir da utilizao dos testes funcionais, j consolidados em grande parte das organizaes desenvolvedoras de software. O restante deste trabalho est organizado da seguinte forma: a Seo 2 apresenta, com maiores detalhes, as diferenas entre testes funcionais, de desempenho e de estresse; a Seo 3 descreve o mtodo para gerao de testes de desempenho e estresse a partir de testes funcionais; a Seo 4 apresenta a ferramenta prottipo construda; a Seo 5 exibe os resultados de um estudo experimental realizado com o intuito de avaliar o mtodo e a ferramenta; a Seo 6 apresenta os principais trabalhos relacionados; e a Seo 7, apresenta uma discusso final e direes para trabalhos futuros.

Testes Funcionais x Testes de Desempenho x Testes de Estresse

O teste de software pode ser categorizado de acordo com os objetivos da atividade. O teste funcional, por exemplo, tem como objetivo verificar o comportamento do software. Isso normalmente feito a partir de uma anlise da execuo, verificando se a utilizao de determinadas entradas causa a obteno da sada esperada. A partir do teste funcional possvel validar o comportamento, de maneira a identificar possveis incorrees, como por exemplo, ausncia de certas regras de negcio. O teste funcional tende a ser mais simples e rpido de se executar, quando comparado a testes com outros objetivos, uma vez que a verificao e validao em um nvel mais baixo costumam ser mais demoradas que no nvel de interface com o usurio. Em virtude disso, esse o teste mais conhecido e utilizado nas empresas desenvolvedoras de software [4]. A Figura 1 apresenta um teste funcional desenvolvido utilizando a ferramenta Selenium3. Em geral, as ferramentas para testes funcionais gravam as aes executadas e as reproduzem sempre que solicitado. No caso do Selenium e conforme exibido na Figura 1, existem comandos para acessar URLs (open), entrar com dados em campos (type), acionar comandos (clickAndWait) e verificar resultados (assertText). Na figura so exibidos trs testes, todos relacionados ao teste do login em uma aplicao. A partir deles, foi verificado
3

http://seleniumhq.org/

176

RITA Volume 17 Nmero 2 2010

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

se a tentativa de login com um usurio vlido, porm com senha incorreta (ti, 123456) causava a exibio de uma mensagem de erro (No foi possvel realizar o login.), assim como a tentativa de login com um usurio inexistente (errado, 123456). Por ltimo, foi testado se o login com a senha correta (ti, Java) resultava no surgimento dos elos para as funcionalidades Cadastro, Relatrios e Sair (linhas 10 a 15). O teste de desempenho consiste em verificar se um sistema atende aos seus requisitos de desempenho em um determinado contexto [5]. O contexto fundamental para o teste e define o ambiente no qual as verificaes devem ser realizadas [6]. Um exemplo de um contexto bem definido seria dizer: o sistema deve suportar 100 usurios simultneos, com tempo de resposta mximo de 8 segundos. A partir dessa definio, o teste de desempenho deve simular o ambiente desejado e verificar se o sistema se comporta conforme especificado.

Figura 1. Exemplo de teste funcional no Selenium.

RITA Volume 17 Nmero 2 2010

177

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

Testes de estresse geralmente so realizados de forma conjunta com testes de desempenho, no sendo raro haver confuso entre os mesmos. Enquanto o teste de desempenho tem como objetivo testar se determinado sistema capaz de lidar com a carga esperada e definida nos requisitos, o teste de estresse consiste em submeter o sistema a situaes anormais de uso [1], como grandes quantidades de carga, reduo dos recursos computacionais disponveis e entradas no realistas de dados [7]. Embora a maioria dos sistemas no responda s requisies quando submetidos a situaes de estresse, a partir dessa sobrecarga pode-se descobrir um comportamento indesejvel, como por exemplo, o vazamento de informaes confidenciais de um banco de dados em mensagens de erro [8]. A partir dos testes de estresse torna-se possvel observar o comportamento do sistema durante situaes crticas, identificando falhas no tolerveis e potencialmente difceis de serem encontradas em situaes normais de funcionamento. Um exemplo disso o caso do Sistema de Emergncia de Londres, citado anteriormente. O sistema funcionou corretamente durante algum tempo, porm, ao ser exposto a uma carga maior, ele respondeu em um tempo acima do tolervel, causando problemas no roteamento das ambulncias e, a partir disso, demora no atendimento, o que culminou com a morte de pessoas [3]. A Figura 2 exibe um trecho de cdigo gerado pelo JMeter4 para um teste de desempenho para o mesmo exemplo utilizado para os testes funcionais da Figura 1: o login em uma aplicao. Ele foi criado para verificar se a aplicao suporta 50 usurios simultneos (propriedade ThreadGroup.num_threads), com tempo de resposta mximo de 3 segundos (propriedade DurationAssertion.duration). O restante do cdigo ilustrado refere-se formao das URLs que sero utilizadas no teste, com seus respectivos dados de entrada. No teste de desempenho normalmente verificado o caminho feliz da aplicao, ignorando-se as diferentes condies alternativas existentes. Alm disso, normalmente no existe uma preocupao excessiva com as respostas obtidas e sim se houve resposta dentro do contexto do teste. Para se criar um teste de estresse a partir do teste de desempenho exibido, basta elevar um parmetro do teste, como por exemplo, o nmero de usurios simultneos, criando um contexto acima do estabelecido como aceitvel para a aplicao[1]. Conforme foi brevemente discutido nesta seo, os testes funcionais e testes de desempenho e estresse so bem diferentes, possuindo diferentes ferramentas, linguagens e aspectos a analisar. No entanto, pode-se observar que os testes funcionais podem ser uma fonte de dados para a gerao dos testes de desempenho e estresse. Essa foi a idia explorada neste trabalho, conforme discutido nas prximas sees.

http://jakarta.apache.org/jmeter/

178

RITA Volume 17 Nmero 2 2010

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

Figura 2. Exemplo de teste de desempenho no JMeter.

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

Neste trabalho foi desenvolvido um mtodo e uma ferramenta para a gerao de testes de desempenho e estresse a partir de testes funcionais. Esta seo descreve o mtodo (mtodo na acepo de Houaiss e Villar [9]), que corresponde ao conjunto de passos para efetiva gerao dos testes de requisitos no funcionais. A maioria desses passos feita diretamente a partir do uso da ferramenta, porm, no todos. O conjunto de passos descrito a seguir. 1. Criao dos testes funcionais. Neste primeiro passo devem ser criados os testes funcionais para o sistema sob teste utilizando alguma ferramenta de teste funcional. Esses testes sero os artefatos bsicos para a gerao do teste de desempenho e estresse. Conforme comentado na Seo 2, a Figura 1 exibe um teste funcional criado com o Selenium IDE. No exemplo ilustrado, o teste composto do acesso a uma pgina (open), da entrada de valores nos campos

RITA Volume 17 Nmero 2 2010

179

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

exibidos nessa pgina (type), da execuo de comandos (clickAndWait) e da verificao dos resultados obtidos (AssertTextPresent). 2. Extrao dos procedimentos e casos de teste relacionados. Analisando o teste funcional possvel obter as aes relacionadas (procedimentos de teste), assim como os dados de entrada, dados de sada e demais condies associadas ao teste (caso de teste). Essa extrao pode ser feita automaticamente a partir do uso da ferramenta construda. 3. Informao sobre os requisitos especficos da aplicao. Uma aplicao pode ter requisitos que dificultem a gerao de testes de desempenho e estresse. Em sistemas que permitem a criao de usurios, por exemplo, muito provvel que no seja permitido a criao de usurios com identificadores repetidos. Logo, testes de desempenho e estresse para esse sistema necessitam de vrios usurios simultaneamente, cada um com identificador nico. Alm da unicidade, pode haver restries quanto ao formato e tamanho dos dados de entrada, por exemplo. Como no possvel obter tais informaes diretamente dos testes funcionais, esses requisitos devem ser fornecidos manualmente e incorporados de alguma forma aos procedimentos e casos de testes extrados, obtendo como resultado um nico arquivo com todas essas informaes. No caso da ferramenta construda, isso feito atravs de uma tela especfica para informao dessas restries. 4. Informao dos requisitos de desempenho e estresse. Neste passo devem ser informados, pelo testador, os requisitos de desempenho e estresse. So exemplos desses requisitos: nmero mximo de usurios concorrentes e o tempo mximo de resposta para as operaes. Alm disso, a forma como o teste vai ser executado deve ser especificada. Deve-se definir, por exemplo, o nmero de mquinas a serem usadas no teste e o tempo entre cada requisio. 5. Gerao do teste de desempenho e estresse. O ltimo passo do mtodo consiste na utilizao das informaes extradas do teste funcional e das informaes fornecidas pelo testador para a gerao do teste de desempenho ou estresse, o qual poder ser executado em uma ferramenta de teste especfica. No caso da ferramenta construda, basta indicar o formato a ser utilizado e solicitar a gerao do teste de desempenho ou estresse.

FERRARE: a ferramenta prottipo desenvolvida

Para concretizar a idia proposta, foi desenvolvida uma ferramenta prottipo que permite a gerao de testes de desempenho e estresse a partir de testes funcionais. A ferramenta em questo foi denominada de FERRARE - FERRamenta de Automao dos testes de Requisitos de desempenho e Estresse. Ela foi concebida para trabalhar com qualquer ferramenta de teste funcional e qualquer ferramenta de teste de desempenho e

180

RITA Volume 17 Nmero 2 2010

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

estresse, desde que sejam implementadas as interfaces apropriadas, conforme ser discutido mais adiante. Atualmente, a FERRARE trabalha com as ferramentas de testes funcionais Selenium IDE e Canoo Web Test5, alm das ferramentas de teste de desempenho e estresse Apache JMeter e WebLoad6. Isso significa que ela gera testes de desempenho e estresse para serem executados no JMeter ou WebLoad, a partir de testes funcionais feitos com o Selenium IDE ou Canoo WebTest. Parte da estrutura interna da FERRARE exibida na Figura 3. A FERRARE dividida em dois mdulos: Extrator e Gerador. O mdulo Extrator responsvel pela extrao das informaes contidas no teste funcional. Isso inclui a criao de um procedimento de teste e identificao dos dados de entrada, sadas esperadas e demais condies do teste, que iro compor o caso de teste. O Gerador responsvel pela gerao do teste de desempenho seguindo um formato apropriado. Conforme mencionado, a FERRARE foi desenvolvida para ser utilizada com qualquer ferramenta de teste funcional, de desempenho ou de estresse. Para isso, foram criados interfaces e classes abstratas que devem ser implementadas para adequao uma ferramenta especfica. Para a utilizao do Selenium como fonte dos testes funcionais, foi necessrio desenvolver o SeleniumExtractor, que estende a classe BaseExtractor, que possui alguns mtodos abstratos a serem definidos pelos Extratores. O principal mtodo do BaseExtractor o getNextTest, que retorna um teste funcional. Normalmente, a implementao desse mtodo feita a partir de um parser que analisa o teste e gera sua representao interna utilizando o formato especificado na FERRARE, que inclui a determinao das entradas, sadas e aes associadas, na forma dos procedimentos de teste, conforme apresentado na Figura 3. O SeleniumExtractor, por exemplo, estende a classe BaseExtractor e implementa o mtodo getNextTest. A implementao do SeleniumExtractor leva em considerao os comandos existentes no Selenium. Assim, o comando assert, que utilizado para verificar a presena de um texto, est associado com as sadas esperadas do caso de teste; o comando type, utilizado para inserir um dado em um campo da pgina, est associado s entradas do caso de teste; o comando click, utilizado para se clicar em um elo ou boto; e o comando open, utilizado para acessar um endereo, so utilizados para executar aes relacionadas ao teste. Logicamente, em outras ferramentas existiro outros comandos, com finalidades iguais ou semelhantes as dos comandos do Selenium. Cabe ao Extrator abstrair essas diferenas e retornar um teste no formato exigido pela FERRARE, que ignora aspectos irrelevantes para a gerao do teste de desempenho e estresse.

5 6

http://webtest.canoo.com/ http://www.webload.org/

RITA Volume 17 Nmero 2 2010

181

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

Figura 3. Principais classes existentes na FERRARE. O outro mdulo da FERRARE, o Gerador, tem por objetivo gerar os testes de desempenho e estresse a partir da representao interna do teste funcional gerada pelo Extrator. Para isso, a ferramenta cria uma representao interna do teste de desempenho ou estresse, permitindo ainda uma especificao dos requisitos associados ao teste, como por exemplo, o nmero de usurios concorrentes e tempo mximo de resposta de requisies, conforme apresentado na Figura 3. Assim como o Extrator, essa parte da ferramenta malevel e pode ser facilmente estendida para o uso com outras ferramentas de testes alm daquelas j suportadas (JMeter e WebLoad). Existe uma classe abstrata, denominada

182

RITA Volume 17 Nmero 2 2010

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

BaseGenerator, que tem acesso s informaes extradas pelo Extrator e que deve ser utilizada para gerao dos testes de desempenho e estresse. Cada Gerador especfico deve ser criado levando em considerao a linguagem da ferramenta utilizada para gerao dos testes. O Gerador para uma ferramenta deve implementar o mtodo generate, que deve gerar os testes de desempenho e estresse com base nos testes abstratos (extrados do teste funcional e independentes de tecnologia) e nos requisitos de desempenho e estresse. Assim, caso algum deseje criar um novo Gerador, basta criar uma classe que herde de BaseGenerator e que siga as instrues relatadas aqui. A FERRARE ainda possui limitaes atualmente. Uma delas diz respeito a no identificao de todas as URLs acessadas no teste funcional, pois, em geral, ferramentas de testes funcionais gravam apenas as aes que esto sendo executadas, simulando um usurio da aplicao. Como essas URLs no esto disponveis no teste funcional, a gerao dos testes de desempenho e estresse dificultada, pois estes necessitam destas URLs para montar as requisies que sero feitas aplicao. A soluo encontrada para este problema foi deixar para a ferramenta de teste de desempenho e estresse a tarefa de encontrar as URLs acessadas. Assim, quando o Gerador cria o teste de desempenho e estresse, ele indica quais URLs precisam ser descobertas e utiliza os recursos da ferramenta de destino para isso. No caso do JMeter, por exemplo, utilizam-se das suas expresses regulares para analisar a pgina e descobrir qual a URL adequada para a prxima requisio que ser feita. Outra limitao diz respeito no gerao dos dados necessrios execuo dos testes de desempenho e estresse criados pela FERRARE. Dessa forma, embora o teste seja gerado pela ferramenta construda, um esforo significativo ainda necessrio para criar os dados requeridos, bem como para adequar o teste gerado utilizao desses dados. Para melhor entendimento dessa limitao, suponha-se, por exemplo, a gerao de testes de desempenho a partir de um teste funcional que realiza um emprstimo de livro em um sistema de biblioteca on-line. Um teste para verificar 100 emprstimos de livros ao mesmo tempo no poderia ser gerado automaticamente pela ferramenta, uma vez que envolve uma combinao de condies para um nico emprstimo, tais como a existncia de um livro disponvel (que no seja cativo e possa ser emprestado) e de um usurio com menos de cinco livros em emprstimo (supondo que cinco seja o limite mximo para a categoria do usurio em questo). importante frisar que esse exemplo de difcil implementao em qualquer ferramenta, uma vez que requer uma grande quantidade de dados iniciais. Para restries mais simples a FERRARE trabalha sem qualquer problema Para resolver esse problema, encontra-se em desenvolvimento a GNESIS, um novo mdulo para a FERRARE que gera dados a partir de um modelo pr-existente. Com isso, ser utilizado como modelo a especificao de um caso de teste vlido. A partir disso realizado uma cpia dos dados necessrios ao teste, levando-se em considerao as restries associadas. Mais detalhes sobre o GENESIS e sobre a gerao de dados a partir de testes funcionais pode ser encontrada no artigo que descreve o prottipo j implementando [10]. Outra alternativa seria especificar as restries na ferramenta, a partir da modelagem de restries, mas isso pode ser bem mais complexo e se distancia da idia original do trabalho, que tem como objetivo no prescrever a criao de nenhum artefato adicional.

RITA Volume 17 Nmero 2 2010

183

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

Estudo Experimental

Foi realizado um estudo experimental com o intuito de comparar o tempo necessrio para a criao de testes de desempenho e estresse com e sem o uso do mtodo e da ferramenta desenvolvida. O propsito do estudo foi avaliar, com respeito a esforo, do ponto de vista do pesquisador, no contexto de alunos de graduao em Cincia da Computao, a aplicabilidade do mtodo e da FERRARE na criao de testes de desempenho e estresse para um sistema Web. No experimento foram utilizados o SeleniumExtractor e o JMeterGenerator. Por conta disso, a principal questo relacionada ao experimento foi: a utilizao do mtodo e da FERRARE gera uma reduo no esforo necessrio para a criao dos testes de desempenho e estresse para serem executados com o JMeter, quando comparado criao dos mesmos testes utilizando somente o JMeter, sem o apoio da FERRARE? A hiptese nula, relacionada a essa questo : no existe diferena no esforo, medido em termos de minutos, para criar os testes com e sem o apoio do mtodo e da ferramenta, ou seja, H0: EsforoTeste(FERRARE) = EsforcoTeste(JMeter). A hiptese alternativa que o esforo empregado no teste, com apoio do mtodo menor que o esforo empregado sem o uso do mtodo e da ferramenta, ou seja, EsforoTeste(FERRARE) < EsforcoTeste(JMeter). No entanto, conforme ser detalhado a seguir, o desenho experimental utilizado permitiu que fosse avaliada uma srie de outras questes relevantes ao estudo. Foi utilizada a ferramenta Selenium pelo fato dela ser uma das ferramentas mais comentadas nas revistas tcnicas existentes no Brasil. Alm disso, ela possui boa usabilidade, livre, gratuita e se mostrou bastante adequada em todas as avaliaes que foram executadas pelo grupo de pesquisa. Na avaliao experimental foram entregues testes funcionais feitos utilizando Selenium para que os participantes pudessem gerar testes no funcionais com a FERRARE. Foram utilizados como participantes alunos das disciplinas de Engenharia de Software do curso de Bacharelado em Cincia da Computao da Universidade Federal do Piau (UFPI). Esses alunos cursaram as disciplinas de Engenharia de Software ofertadas no ano de 2008. Participaram 23 voluntrios, dos quais 20 concluram todas as etapas previstas. Os participantes no tinham experincia alguma no uso de ferramentas de automao de testes funcionais e nem no uso de ferramentas para o teste de desempenho e estresse. Por conta disso no foi feito nenhum tipo de agrupamento baseado no perfil dos mesmos. Antes do incio do estudo foi realizada uma breve apresentao com relao s atividades que seriam realizadas. Tambm foi garantido que seria preservado o anonimato dos estudantes explicando ainda como os dados coletados seriam utilizados. Todos os voluntrios concordaram com o experimento e permitiram sua utilizao para fins acadmicos. O desenho experimental utilizado levou em considerao as possveis ameaas validade do mesmo. A Figura 4 resume o desenho experimental utilizado. Conforme pode ser visualizado na figura, todos os participantes tiveram contato com as duas ferramentas, porm em momentos diferentes e realizando exatamente as mesmas tarefas. Isso permitiu

184

RITA Volume 17 Nmero 2 2010

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

que um grupo atuasse como controle do outro. Assim, os participantes do Grupo 1 (G1) criaram testes utilizando o JMeter e s depois criaram os mesmos testes utilizando a FERRARE. O Grupo 2 (G2) iniciou criando os testes com a FERRARE e depois criaram testes com o JMeter. A atribuio aos grupos foi aleatria. A seleo dos participantes foi baseada na convenincia, por isso o estudo considerado um quase-experimento [11]. Vale ressaltar que em todos os casos os testes eram executados no JMeter, ou seja, a diferena se concentrava em como os testes eram criados: se utilizando a FERRARE ou o prprio JMeter.

Figura 4. Desenho experimental utilizado. Em termos de implementao, o estudo foi dividido em duas sesses, uma envolvendo apenas o treinamento das ferramentas que seriam utilizadas com apoio dos autores deste artigo e outra sesso dedicada para observao, sem interferncia dos autores. Durante o treinamento foi apresentado aos participantes uma viso geral sobre testes de software e em seguida foram detalhadas as ferramentas JMeter e FERRARE. A partir disso foram realizados alguns exerccios para a verificao do aprendizado, com o apoio dos autores do artigo, dirimindo dvidas e auxiliando os voluntrios naquilo que fosse necessrio. A idia era trein-los de forma adequada para que durante a observao no fosse necessria nenhuma interveno externa, uma vez que isso poderia comprometer os dados coletados. Durante a sesso de observao, os participantes do estudo tiveram que criar testes de desempenho para parte de um sistema gerenciador do stio da UFPI. A funo desse sistema tornar simples a criao de pginas para o stio, seguindo formatos pr-estabelecidos. Os usurios do sistema podem criar menus, notcias, destaques, usurios para administrao de pginas e elos para outras pginas, alm de criar subpginas, que funcionam tal qual a pgina principal e com todas as funcionalidades anteriormente descritas. Existem oito casos de uso nesse sistema, dos quais dois foram utilizados durante a sesso de treinamento: Gesto de Usurios e Gesto de Eventos; e outros dois foram utilizados na sesso de observao: Gesto de Notcias e Gesto de Menus. Todos os casos de uso so implementaes de CRUD (create, read, update, delete). As Figuras 5 e 6 apresentam os dados colhidos no estudo. A Figura 5 apresenta os dados relativos execuo do estudo iniciando pelo uso do JMeter (G1), enquanto que a Figura 6 apresenta os dados do grupo que iniciou com a FERRARE (G2). Analisando esses dados pode-se notar que os participantes utilizando o mtodo proposto neste trabalho dedicaram um esforo menor para a criao de testes de desempenho e estresse que os

RITA Volume 17 Nmero 2 2010

185

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

participantes que criaram tais testes sem o apoio do mtodo e da FERRARE, em ambos os casos. A explicao para isso est no fato da FERRARE automatizar a gerao do teste de desempenho e estresse, utilizando os testes funcionais como base para essa criao. Com isso, o usurio da ferramenta precisa apenas especificar alguns parmetros para o teste de desempenho e estresse, reduzindo o tempo gasto para a criao dos mesmos. importante ressaltar que todos os testes desenvolvidos foram executados pelos participantes, para homologar o trabalho realizado, e verificados pelos autores do artigo, para garantir que as especificaes de teste foram desenvolvidas em sua totalidade.

Figura 5. Comparao de tempos para a construo dos testes do Grupo 1 (JMeter x FERRARE).

Figura 6. Comparao de tempos para a construo dos testes do Grupo 2 (FERRARE x JMeter). A Tabela 1 apresenta os resultados dos testes de hipteses para cada uma das questes associadas ao estudo experimental, com seus respectivos nveis de significncia, graus de liberdade e escore t de referncia. Conforme foi descrito anteriormente, o desenho experimental utilizado permitiu que fossem trabalhadas algumas questes interessantes

186

RITA Volume 17 Nmero 2 2010

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

relacionadas ao estudo, conforme detalhamento a seguir. Em cada uma das questes foi utilizado o teste t de Student para realizar o teste de hipteses. Tabela 1. Principais questes associadas ao estudo experimental.

A principal questo do experimento est expressa na primeira linha da tabela, e que pode ser resumida da seguinte forma: os tempos para criar os mesmos testes, utilizando o JMeter e a FERRARE, independentemente de ordem (considerando todos os tempos nos dois grupos) so estatisticamente iguais? Foi utilizado o Teste t para essa comparao. O resultado, presente na Tabela 1, indica que os tempos so significativamente diferentes. Esse resultado era esperado, uma vez que a FERRARE automatiza boa parte da gerao do teste, exigindo apenas a especificao de alguns parmetros para essa gerao. importante ressaltar que foram realizados experimentos utilizando dois grupos, com ordens de execuo dos passos do experimento diferentes. Essa comparao envolveu todos, independente da ordem utilizada e apresentou como resultado a indicao que o uso da FERRARE reduz o esforo necessrio para criao dos testes. Outra questo verificada a partir do experimento foi se o resultado tambm ocorreu quando se compara os tempos para criar os mesmos testes em uma ordem especfica. Essa anlise interessante para se descobrir se a ordem de execuo das tarefas pode criar algum vis ao experimento. Os resultados indicam que a FERRARE gera benefcios, independentemente da ordem utilizada. Os dados relacionados a essa questo, comparando tanto os tempos na ordem FERRARE (G1) x JMeter (G1), assim como JMeter (G2) x FERRARE (G2), FERRARE (G2) x JMeter (G1) e JMeter (G2) x FERRARE (G1) so apresentados, respectivamente nas linhas 2, 3, 6 e 7 da Tabela 1. Tambm foi verificado se a utilizao de uma ferramenta influencia no uso da outra. O uso da FERRARE, seja antes ou depois de ter sido utilizado o JMeter, no apresentou diferenas significativas (linha 5). No entanto, foi possvel notar que o uso do JMeter, aps o

RITA Volume 17 Nmero 2 2010

187

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

uso da FERRARE gerou tempos significativamente menores (linha 4). De acordo com esse resultado, usar o JMeter depois de ter usado a FERRARE gera ganhos no tempo para realizao da tarefa, indicando assim que os desenvolvedores que utilizam JMeter se tornam mais produtivos. Por conta disso, os participantes do experimento foram entrevistados para obteno de maiores dados sobre esse fenmeno. Foi unnime a explicao para o fato: como a FERRARE gera os testes em JMeter e eles tiveram que coloc-lo em execuo para homologar seus trabalhos (podendo assim visualizar sua estrutura), o aprendizado obtido com isso influenciou de forma positiva a realizao da criao manual desses testes. A visualizao do teste criado pela FERRARE torna a tarefa de gerao dos testes em JMeter bem mais fcil. Mesmo assim, importante ressaltar que o uso da FERRARE ainda gerou ganhos substanciais em termos de tempo, mesmo sendo comparado com esse vis favorecendo a criao de testes com o JMeter. Em resumo, todas as comparaes que foram realizadas mostraram que o uso da FERRARE gera ganhos significativos em termo de esforo. No entanto, importante analisar o quo vlidos so os resultados obtidos. Idealmente, os resultados deveriam ser vlidos no somente na populao em que eles foram recebidos, mas tambm para uma populao mais ampla. Os resultados possuem a validade adequada se so vlidos para a populao a qual tendem a ser generalizados. No caso de experimentos em Engenharia de Software, normalmente deve ser avaliado a Validade Interna e a Validade Externa, que so as mais importantes nesse tipo de estudo [12]. A validade interna define se o relacionamento observado entre o tratamento e o resultado causal e no influncia de outros fatores no controlados. De acordo com os resultados obtidos, o uso da FERRARE gera uma reduo no esforo necessrio para desenvolvimento de testes. Como os participantes tiveram que automatizar testes para a mesma parte do sistema, utilizando tanto a FERRARE quanto o JMeter, no foi notado o problema da instrumentao, uma vez que no h diferena no problema utilizado no estudo. Outro problema que poderia influenciar os resultados a ameaa conhecida como testagem. Ela se refere ao fato da pessoa ficar mais produtiva entre as tarefas, por conhecer mais o sistema e o prprio problema a ser tratado. Conforme foi enfatizado anteriormente, a testagem influencia apenas o desenvolvimento de testes com o JMeter, uma vez que a FERRARE gera testes para o JMeter, permitindo assim que os participantes aprendam mais sobre o JMeter, reduzindo o tempo total para criao de testes nessa ferramenta, aps o uso da FERRARE. No entanto, mesmo com esse vis favorecendo a produtividade dos voluntrios utilizando o JMeter, foi possvel constatar que os participantes utilizando a FERRARE foram mais produtivos, o que comprova que a ferramenta realmente gera ganhos em termos de produtividade. Nada relacionado ao estudo indica que houve alguma ameaa relacionada histria, ou seja, no foi identificado nenhum efeito externo que pudesse influenciar nos resultados diferentemente do que foi mencionado acima. Com relao maturao, acredita-se que os participantes melhoraram com o tempo, uma vez que so alunos e esto submetidos a

188

RITA Volume 17 Nmero 2 2010

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

diversos contedos novos, mas nada que pudesse influenciar diretamente o estudo desenvolvido. O desenho experimental escolhido, em que todos os participantes utilizaram as duas ferramentas permitindo que um grupo atuasse como controle do outro, validam a concluso obtida, ao mesmo tempo em que minimizam qualquer ameaa relacionada ao comportamento competitivo e ao comportamento compensatrio [12]. A validade externa define as condies que limitam a habilidade de generalizar os resultados de um experimento para a prtica industrial. Os participantes do estudo, alunos do 6 e 7 perodo do curso, encontram-se em fase final de formao, possuindo um perfil prximo a profissionais com pouca experincia. Alm disso, os participantes nunca trabalharam com ferramentas de automao de testes, mas 55% deles afirmaram ter experincia de trabalho como programadores. Os treinamentos ministrados, juntamente com o exerccio de fixao contriburam para uma boa formao dos participantes nos objetos (FERRARE e JMeter) do estudo. O exemplo utilizado, dois casos de uso de um sistema para Web, embora seja pequeno, possui as caractersticas comumente existentes nos sistemas de informao para Web. Assim, acredita-se que as concluses obtidas no estudo possam ser estendidas para outros sistemas, com tamanho usual e utilizados por profissionais com pouca experincia, sem prejuzos nos resultados observados.

Trabalhos Relacionados

Existem poucos trabalhos relacionados a testes de desempenho e estresse, em especial, tratando dos aspectos de automao. Por conta disso, um interessante trabalho nessa rea foi desenvolvido por Weyuker e Vokolos [6]. Eles descrevem questes essenciais relacionadas a testes de desempenho, ressaltando a importncia desses testes. Os autores exploram a idia de elaborar casos de testes especficos para testar o desempenho do sistema ao invs de corretude funcional e discorrem sobre a criao de cargas de trabalho representativas para os sistemas em teste, alm de diversos outros aspectos essenciais. Boa parte dos trabalhos que envolvem automao dos testes de desempenho e estresse faz isso a partir de modelos descrevendo o software. Um artefato muito utilizado como base para essa automao so as mquinas de estados finitos. O projeto AGEDIS [13] inclui uma ferramenta que pode automatizar testes de desempenho e estresse a partir da descrio de um modelo comportamental do software, utilizando mquinas de estado. Shams, Krishnamurty e Far [14] descrevem uma abordagem baseada em modelos para o teste de desempenho em aplicaes Web, utilizando mquinas de estado para modelar as dependncias entre requisies e as dependncias de dados de um sistema. O grande problema das abordagens utilizando mquinas de estado, descrito no relatrio final do projeto AGEDIS, que tal forma de modelagem no parece ser apropriada para representar interaes entre diversos elementos, gerando um esforo muito grande e baixa inteligibilidade.

RITA Volume 17 Nmero 2 2010

189

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

Outras abordagens para automao utilizam modelos baseados em padres de mercado, como a UML. Garousi, Briand e Labiche [7] desenvolveram uma metodologia de teste de estresse em sistemas distribudos baseada em modelos UML estendidos com informaes sobre tempo e anlise de controle de fluxo em diagramas de seqncia. O problema nessa abordagem propor a criao de mais artefatos durante o desenvolvimento, gerando ainda mais trabalho e burocracia, uma vez que a tarefa de mant-los consistentes e atualizados no trivial. De forma geral, os trabalhos mencionados descrevem mtodos e/ou ferramentas que podem gerar testes de desempenho e estresse a partir de uma descrio do sistema. Neste trabalho apresentada uma idia inovadora: utilizar os prprios testes funcionais para gerar os testes de desempenho e estresse. E mais do que a gerao de outros testes, descobriu-se que possvel se utilizar das informaes dos testes funcionais para gerar dados e at mesmo documentos, conforme descrito em detalhes em [10] e [15], respectivamente.

Consideraes Finais

A atividade de teste parte importante do processo utilizado para garantir que os requisitos identificados pelos usurios sejam atendidos pelo produto desenvolvido. Os testes, entretanto, requerem tempo, planejamento, infra-estrutura e conhecimento especializado, sendo, portanto, uma atividade inerentemente onerosa e que exige profissionais qualificados. Embora os testes funcionais estejam relativamente bem difundidos nas organizaes, isso no acontece com os testes de desempenho e estresse, que so bem menos difundidos. A principal explicao relacionada a esse fato a ausncia de profissionais qualificados e o alto custo para realizao dessa tarefa. Neste trabalho foi apresentado um mtodo e uma ferramenta para auxiliar a difuso do teste de desempenho e estresse. importante ressaltar que os testes de desempenho e estresse esto crescendo em importncia, uma vez que os sistemas para Web cada vez mais ganham espao em relao aos sistemas desktop, no entanto, existem poucos profissionais qualificados para a criao desses testes. Como os testes funcionais encontram-se razoavelmente bem difundidos nas organizaes e possuem praticamente todas as informaes necessrias para a gerao automtica de testes de desempenho e estresse, eles foram utilizados para automao desses testes. O principal objetivo desta idia tornar mais simples a criao de testes de desempenho e estresse, no exigindo tanto conhecimento na criao desses testes e, ao mesmo tempo, reduzindo o esforo relacionado. Isso foi confirmado no estudo experimental que foi realizado: os participantes que utilizaram o mtodo e a ferramenta foram mais efetivos, em termo de esforo, para gerar o mesmo conjunto de teste. O estudo foi idealizado de forma a contrapor diversas ameaas sua validade. Os resultados obtidos foram positivos em relao ao uso da FERRARE. Alm disso, os testes de desempenho e estresse gerados com base em testes funcionais tendem a cobrir toda a aplicao sendo testada, uma vez que essa gerao simplifica muito a tarefa do testador. Dados os custos associados, muito comum em

190

RITA Volume 17 Nmero 2 2010

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

organizaes que realizam o teste de desempenho e estresse focar em apenas alguns casos de uso e ignorar outros. O apoio da ferramenta descrita neste trabalho reduz o custo para o teste de desempenho e estresse, tornando plenamente vivel a cobertura de todo o sistema. Embora a qualidade dos testes gerados no tenha sido uma varivel no estudo, pois foi exigido de todos os participantes um nvel de qualidade padro, uma vez que todos deveriam implementar uma especificao de teste previamente criada, fcil notar que um testador utilizando a FERRARE certamente gerar testes com maior cobertura, uma vez que ele pode fazer isso em bem menos tempo. importante ressaltar que a FERRARE auxilia a implementao de testes e no seu projeto. O projeto que define a qualidade dos testes. Por isso, esse fator no foi diretamente abordado no estudo. Outro fator interessante que a ferramenta facilmente extensvel, podendo ser adaptvel para qualquer conjunto de ferramentas. Basta para isso implementar as interfaces e classes abstratas criadas para facilitar essa extenso, conforme comentado na Seo 4. igualmente importante ressaltar que a idia explorada neste trabalho no foi encontrada em nenhum outro trabalho relacionado. Conforme foi discutido na Seo 6, existem muitas idias associadas facilitao da gerao de testes de desempenho e estresse, porm sem explorar a reutilizao de testes funcionais. Essa abordagem tem se mostrado muito promissora e ser continuada, uma vez que os resultados apresentam dados interessantes. Um dos trabalhos em andamento o estudo da expressividade da abordagem e a resoluo da limitao da ferramenta em relao existncia de restries complexas.

Referncias
[1] Myers (2004), G. The Art of Software Testing. John Wiley & Sons, 2 edio. [2] Hutcheson, M. L. (2003) Software Testing Fundamentals: Methods and Metrics. John Wiley & Sons. [3] Finkelstein, A. e Dowell, J. (1996). A comedy of errors: the London ambulance service case study. In IWSSD96: Proceedings of the 8th International Workshop on Software Specification and Design, page 2, Washington, DC, USA. IEEE Computer Society. [4] MCT (2007). Programa Brasileiro da Qualidade e Produtividade de Software. Ministrio da Cincia e Tecnologia, 4 edio. [5] Denaro, G.; Polini, A.; e Emmerich, W. (2004). Early performance testing of distributed software applications. SIGSOFT Software Engineering Notes, 29(1):94-103. [6] Weyuker, E. e Vokolos, F. (2000). Experience with performance testing of software systems: Issues, an approach, and case study. IEEE Transactions on Software Engineering, 26(12):1147-1156. [7] Garousi, V., Briand, L., e Labiche, Y. (2006). Traffic-aware stress testing of distributed systems based on UML models. In Proceedings of the 28th International Conference on Software Engineering (ICSE), pages 391-400, Shangai, China.

RITA Volume 17 Nmero 2 2010

191

Gerao de Testes de Desempenho e Estresse a partir de Testes Funcionais

[8] Sommerville, I. (2003). Engenharia de Software. Addison Wesley, 6 edio. [9] Houaiss, A. e Villar, M. (2001). Dicionrio Houaiss de lngua portuguesa. [10] Sousa F, I.; Santos, A. R.; Santos, I. S.; Santos Neto, P.; Britto, R. S. (2010). Gerao de Dados para Testes de Desempenho e Estresse a Partir de Testes Funcionais. In: IX Simpsio Brasileiro de Qualidade de Software, Belm, PA. Anais do IX Simpsio Brasileiro de Qualidade de Software, 2010. p. 89-102. [11] Wainer, J. (2007). Pesquisa quantitativa e qualitativa em cincia da computao. In Kowaltowski, T. and Breitman, K., editors, Jornada de Atualizao em Informtica (JAI), pg. 221-262. Sociedade Brasileira de Computao (SBC), Editora PUC Rio. [12] Wohlin, C.; Runeson, P.; Host, M.; Ohlsson, M.; Regnell, B.; e Wesslen, A. (2000). Experimentation in Software Engineering: An Introduction. Kluwer Academic Publihers. [13] Hartman, A. e Nagin, K. (2004). The AGEDIS tools for model based testing. In Proceedings of the International Symposium on Software Testing and Analysis (ISSTA 2004), Boston, Massachusetts, USA. [14] Shams, M.; Krishnamurthy, D.; e Far, B. (2006). A model-based approach for testing the performance of web applications. In Proceedings of the 3rd International Workshop on Software Quality Assurance, pages 54-61, Portland, Oregon. [15] Santos, I. S.; Santos Neto, P.; Moura, R. S.; Soares, A. C. B. (2010). Documentao Dirigida por Testes. In: IX Simpsio Brasileiro de Qualidade de Software, Belm, PA. Anais do IX Simpsio Brasileiro de Qualidade de Software, 2010. p. 25-40.

192

RITA Volume 17 Nmero 2 2010