Você está na página 1de 35

Carlos Eduardo Pereira Tonolli 0520319

TCNICAS E FERRAMENTAS DE MEDIO DE DESEMPENHO DE APLICAES JAVA

Jaguarina 2007

Carlos Eduardo Pereira Tonolli 0520319

TCNICAS E FERRAMENTAS DE MEDIO DE DESEMPENHO DE APLICAES JAVA

Monografia apresentada disciplina Trabalho de Graduao III, do curso de Cincia da Computao da Faculdade de Jaguarina, sob a orientao do Prof. Ms. Peter Jandl Jr, como exigncia parcial para a obteno de mdia semestral.

Jaguarina 2007
8

TONOLLI, Carlos Eduardo Pereira. Tcnicas e Ferramentas de Medio de Desempenho de Aplicaes Java. Monografia defendida e aprovada na FAJ em 28 de Junho de 2007 pela banca examinadora constituda pelos professores:

__________________________________________________________________________ Prof. Ms. Peter Jandl Jr FAJ Orientador

_________________________________________________________________ Prof. Silvio Petroli Neto

__________________________________________________________________________ Prof. Fernando A. Zanchetta

A Deus em primeiro lugar, minha famlia, s pessoas mais importantes da minha vida, e aos meus amigos. Enfim, a todos que estiveram comigo nessa jornada. Obrigado.

10

AGRADECIMENTOS

Agradeo a minha famlia, em especial a minha esposa, pelo constante apoio, carinho e compreenso. Ao meu orientador, Prof. Peter Jandl Jr, pelo acompanhamento do trabalho. Aos mestres, peas fundamentais na minha formao acadmica, pelo ensino e dedicao. Meus sinceros agradecimentos a todos que, direta ou indiretamente, contriburam para este trabalho.

Obrigado!

TONOLLI, Carlos Eduardo Pereira. Tcnicas e Ferramentas de Medio de Desempenho de Aplicaes Java. 2007. Monografia (Bacharelado em Cincia da Computao) Curso de Cincia da Computao da Faculdade de Jaguarina, Jaguarina.

11

RESUMO

A constante evoluo tecnolgica de aparelhos e dispositivos exige, sempre softwares mais complexos e elaborados, e que atendam a vrias expectativas dos usurios, principalmente no que se refere ao desempenho, o usurio deseja que o software responda prontamente a suas solicitaes, e para que consigamos isso preciso construir aplicaes com boa performance. Este trabalho de graduao visa mostrar atividades que podem ser utilizadas para atacar de forma eficaz os problemas de desempenho de aplicativos Java. Para isso sero feitos testes em uma aplicao escrita na linguagem Java, com duas ferramentas que avaliam performance, e aps uma avaliao dos resultados obtidos com cada uma delas e ser possvel verificar se, e como, elas podem auxiliar a resolver as questes relativas aos problemas de desempenho de aplicaes. Com este trabalho ser possvel verificar se possvel identificar e resolver os problemas de desempenho, antes de entregar o produto final ao usurio, garantindo assim , alem da sua satisfao, outras vantagens, como por exemplo, menor tempo de desenvolvimento, menor volume de erros e correes aps a implantao, ganhando tempo, e economizando dinheiro no processo de desenvolvimento de software.

12

TONOLLI, Carlos Eduardo Pereira. Tcnicas e Ferramentas de Medio de Desempenho de Aplicaes Java. 2007. Monografia (Bacharelado em Cincia da Computao) Curso de Cincia da Computao da Faculdade de Jaguarina, Jaguarina.

ABSTRACT

The constant technological evolution of devices and devices demands, softwares always more complex and elaborated, and that they take care of you vary it expectations of the users, mainly as for the performance, the user desires that software answers its requests readily, and so that let us obtain this is necessary to construct applications with good performance. This work of graduation aims at to show activities that can be used to attack of efficient form the applicatory problems of performance of Java. For this tests in an application written in the Java language will be made, with two tools that evaluate performance, and after an one evaluation of the results gotten with each one of them and will be possible to verify if, and as, they can assist to decide the relative questions to the problems of performance of applications. With this work it will be possible to verify if it is possible to identify and to decide the performance problems, before delivering the end item to the user, thus guaranteeing, and of its satisfaction, other advantages, as for example, minor development time, minor volume of errors and corrections after the implantation, earning time, and saving money in the process of software development.

13

SUMRIO

LISTA DE SIGLAS ................................................................................................................ 08 LISTA DE FIGURAS.............................................................................................................. 09 1 INTRODUO ................................................................................................................... 10 2 DESEMPENHO DE SOFTWARE ...................................................................................... 12 3 TESTES DE DESEMPENHO ............................................................................................ 13 3.1 Testes de carga .................................................................................................. 14 3.2 Testes de estresse .............................................................................................. 14 3.3 Testes de volume ................................................................................................ 15 3.4 Problemas de desempenho em Java .................................................................. 16 4 FERRAMENTAS DE TESTE.............................................................................................. 17 4.1 DevTest4J ........................................................................................................... 17 4.2 JProfiler ............................................................................................................... 19 5 TESTES ............................................................................................................................. 21 5.1 Aplicao alvo ..................................................................................................... 21 5.2 Ambiente de teste ............................................................................................... 23 5.3 Teste de utilizao de memria .......................................................................... 23 5.4 Teste de utilizao do processador ..................................................................... 26 5.5 Teste de gerao de deadlock ............................................................................ 30 6 CONCLUSES .................................................................................................................. 33 7 REFERNCIAS BIBLIOGRFICAS .................................................................................. 34

14

LISTA DE SIGLAS

CPU WEB IDE RAM

Unidade Central de Processamento. Rede de Alcance Mundial; Internet. Ambiente Integrado de Desenvolvimento. Memria de acesso Aleatrio.

LISTA DE FIGURAS
Figura 01 : Resultados obtidos no teste de desempenho de memria com DevTest4J........19 Figura 02 : Resultados obtidos no teste de desempenho de memria com JProfiler............20 Figura 03 : Aplicativo FishWorld.............................................................................................22 Figura 04 : Classificao dos melhores jogadores e suas pontuaes..................................23 Tabela 01 : Resultados de testes de desempenho de memria............................................24 Tabela 02 : Quantidade de memria utilizada pelas classes int, char e byte.........................24 Figura 05 : Teste de desempenho de memria apresentado pelo JProfiler...........................25 Figura 06 : Teste de desempenho de memria apresentado pelo TestDev4J.......................26 Tabela 03 : resultados dos testes de desempenho de CPU..................................................27 Tabela 04 : Mtodos que mais se utilizaram do processador................................................27 Figura 07 : Resultados obtidos no teste de desempenho de CPU com JProfiler...................28 Figura 08 : Resultados obtidos no teste de desempenho de CPU com TestDev4J...............29 Figura 09 : Teste de gerao de deadlock com JProfiler.......................................................30 Figura 10 : Teste de gerao de deadlock com TestDev4J...................................................31

1. INTRODUO
Atualmente com a constante evoluo na rea tecnolgica, o software est muito mais presente na vida das pessoas do que algumas dcadas atrs, hoje existe software embutido em eletrodomsticos, celulares, carros, alm claro, dos computadores na forma das mais variadas aplicaes desde aplicativos didticos, jogos, planilhas eletrnicas at sistemas de automao comercial ou industrial. Esta crescente demanda por software cria uma necessidade de sistemas cada vez mais complexos e elaborados e que atendam a vrias expectativas dos usurios, entre elas podemos citar o desempenho da aplicao. Para atender a esta necessidade a indstria de software deve investir em processos de desenvolvimento que visem o desempenho do produto, ou seja, uma aplicao que consuma pouca memria e utilize menos tempo possvel do processador e com isso envie respostas rpidas ao usurio. Para isso existem tcnicas e ferramentas de avaliao de desempenho de aplicaes, que podem simular situaes crticas de utilizao, exibindo resultados e at sugestes de melhorias que podem ser avaliados pelos analistas, que ento podem decidir por alterar partes do produto at que ele alcance um desempenho satisfatrio (Machado, 2000). A maior razo para o interesse na plataforma Java que, ela j atraiu mais de 4 milhes de desenvolvedores de software, usada em todos os principais setores no mundo inteiro e est presente em uma ampla gama de dispositivos, computadores e redes de todas as tecnologias de programao. Sua versatilidade, eficincia, portabilidade de plataforma e segurana fazem dela a tecnologia ideal para a computao em rede, de modo que, hoje, a tecnologia Java est presente em mais de dois bilhes e meio de dispositivos (Sun, 2007). Este trabalho visa mostrar atividades que podem ser utilizadas para atacar de forma eficaz os problemas de desempenho de aplicativos Java, atravs da anlise dos resultados

10

obtidos em testes que sero feitos com duas ferramentas de avaliao de desempenho, em uma aplicao escrita nesta linguagem. Este trabalho permiti verificar que possvel, com a anlise dos resultados, obter informaes que possibilitem identificar e solucionar os problemas de desempenho de uma aplicao, garantindo assim o menor consumo de recursos de hardware, e tambm um menor tempo com correes de erros ocasionados por este tipo de problema alem de garantirmos a satisfao do usurio. O trabalho est organizado da seguinte forma: no captulo 2, so abordados os aspectos relativos a desempenho ou requisitos no funcionais. No captulo 3 so abordados os testes de desempenho, seus diferentes tipos e finalidades e tambm as caractersticas da plataforma Java relevantes que podem causam prejuzo a desempenho a de software, caractersticas essas sero relevantes para a realizao desde trabalho de graduao. No captulo 4 so abordadas as duas ferramentas de teste de desempenho de software escolhidas para a realizao dos testes de desempenho na aplicao Java. No captulo 5 mostra a aplicao escolhida para a realizao dos testes assim como os testes realizados com ambas as ferramentas e resultados. Por fim, o captulo 6 relata as concluses deste trabalho de graduao.

11

2. DESEMPENHO DE SOFTWARE

Desempenho de software um conjunto de requisitos no funcionais de desempenho, ou seja, aqueles que se referem velocidade de operao do sistema ou restries do uso de recursos do sistema. Diferentes tipos de requisitos podem ser especificados, so eles: Tempo de resposta, que especifica o tempo de resposta aceitvel do ponto de vista do cliente para que alguma operao seja concluda; Throughput, que especifica a quantidade de dados que precisam ser processados em um intervalo pr-definido de tempo. Temporizao, que especifica quo to rpido o sistema precisa coletar uma entrada proveniente de sensores antes que sejam sobrescritos por outras entradas da mesma natureza, ou quo rpidos os sistemas precisa realizar o processamento para que seja a entrada de outro subsistema. Existem dois tipos de requisitos de desempenho: estticos e dinmicos. Os estticos so aqueles que impem restries para que o sistema seja executado, incluindo, por exemplo, o nmero de terminais suportados, o nmero de usurios simultneos, o nmero de arquivos que o sistema deve processar e seu tamanho em bytes. Estes requisitos tambm podem ser chamados de requisitos de capacidade de espao. Os requisitos de desempenho dinmicos especificam as restries do

comportamento do sistema, que tipicamente inclui o tempo de resposta e o throughput. O desempenho afeta a usabilidade do sistema. Se o sistema de software lento, ele reduz a produtividade a ponto de no atender s suas necessidades. Alm disso, se o sistema requer muito espao em disco, pode ser oneroso utiliz-lo. Em contrapartida, se o sistema exige muita memria, este pode afetar outras aplicaes que esto sendo executadas no mesmo sistema operacional, ou pode se tornar to lento que o sistema operacional precise utilizar tcnicas de escalonamento de tarefas (Sommerville, 2003).

12

3. TESTES DE DESEMPENHO

A realizao de testes tem como finalidade assegurar a qualidade do sistema tornado sua execuo confivel, rpida e segura , sendo que seu objetivo principal encontrar erros, mas os testes tambm servem para se obter medidas como confiabilidade ou desempenho, atravs da realizao de testes de desempenho podemse obter medidas para verificar como o comportamento do sistema em alguns aspectos como por exemplo se um nmero muito grande se usurios estiverem utilizando o sistema simultaneamente ou quando houver uma massa muito grande de dados para ser processada. Entre os diferentes tipos de testes de sistema existentes destacam-se os testes de desempenho. A realizao deste tipo de teste tem por objetivo determinar se o desempenho do sistema integrado adequado, de acordo com os requisitos do prprio. Os testes de desempenho podem ser realizados ao longo do desenvolvimento, mas somente quando todos os componentes so finalmente integrados que se pode ter uma medida real do seu desempenho (Pressman, 1995). Os testes de desempenho precisam ser projetados para assegurar que o sistema possa processar sua carga pretendida, isso envolve planejar uma srie de testes, onde a carga constantemente aumentada at que o desempenho do sistema se torne inaceitvel (Sommerville, 2003). Os testes de desempenho podem ser divididos em basicamente trs tipos:

Carga. Estresse. Volume.

13

3.1. Testes de carga

Os testes de carga tm por finalidade testar o desempenho do sistema levando-se em conta uma carga de usurios simultneos em quantidade reais de utilizao. Com isso possvel observar alguns fatores como o tempo de resposta do sistema para o usurio e a ocorrncia de erros em situaes reais de utilizao (Pressman, 1995). Suponha, por exemplo, a existncia de um sistema web que realize consultas a um banco de dados e exiba informaes na tela, este sistema possui um limite de conexes simultneas que ele pode suportar, sem apresentar falhas ou lentido nas respostas, o teste de carga coloca este nmero de usurios simultaneamente utilizando o sistema para que possamos verificar o comportamento do mesmo.

3.2. Testes de estresse

Os testes de estresse visam avaliar o desempenho do sistema com um grande nmero de usurios, geralmente so inseridos usurios alem da capacidade mxima que o sistema pode suportar. Os testes de estresse continuam alem da carga mxima para a qual o sistema foi projetado, at que o sistema falhe, este tipo de teste tem dois objetivos: Testar o comportamento de falha do sistema, onde importante que a falha ocorrida no cause a corrupo dos dados ou a perda inesperada de servios do usurio. Causar estresse no sistema, situao onde podem ocorrer defeitos que normalmente no se manifestariam. Este tipo de teste particularmente relevante para sistemas distribudos, com base em uma rede de processadores pois eles sofrem uma grande degradao quando so sobrecarregados, tornando a rede inundada com dados de coordenao que so trocados

14

entres os diferentes processos, com isso os processos se tornam lentos pois esto a espera de dados de outros processos. (Sommerville, 2003). Por exemplo, se um sistema foi projetado para suportar um nmero de cem conexes simultneas, o teste de estresse vai simular um nmero bem maior de usurios, para verificar o comportamento do mesmo.

3.3. Testes de volume

Os testes de volume testam a quantidade de dados que o sistema pode gerenciar, o objetivo deste teste determinar a capacidade do sistema em lidar com o volume de dados especificado nos seus requisitos. Em geral, este tipo de teste usa grandes quantidades de dados, o que permite determinar os limites em que o sistema falha. Alm disso, costumam ser utilizados na identificao da carga mxima ou volume de dados que o sistema pode gerenciar em um dado perodo de tempo (Pressman, 1995). Este teste, diferentemente dos anteriores, no est preocupado com a quantidade de usurios simultneos, e sim com a quantidade mxima de dados que podem ser processados, em uma determinada quantidade de tempo, sem que o sistema apresente falhas, perda de informaes dos usurios, lentido, ou mesmo entre em colapso. Um exemplo muito comum sistema que realiza consultas a uma base de dados uma determinada consulta pode ser rpida quando a tabela onde esto os dados contm poucas informaes, mas a medida em que a quantidade de dados aumenta esta consulta pode se tornar muito lenta, neste caso o teste de estresse insere uma quantidade muito grande de dados, geralmente maior do que o estimado pelo sistema, para que se possa testar o desempenho do sistema.

15

3.4. Problemas de desempenho em Java


A linguagem Java foi projetada para ser compacta, portvel, e para utilizao em rede, o que levou a deciso de ser interpretada por meio dos esquemas de bytecodes. Por ser interpretada, seu desempenho razovel, no podendo ser comparado ao desempenho obtido pelos cdigos nativos. Para compensar esta limitao, muitas maquinas virtuais Java dispem de compiladores just in time, que compilam os bytecodes em cdigos nativos obtendo assim, uma melhora significante no desempenho das aplicaes, sem esquecer, no entanto que, isso implica na perda da portabilidade do cdigo (Jandl, 2002). Recentemente, tem sido pouca a razo para tais aplicaes serem lentas. A tecnologia da mquina virtual Java, desenvolveu ferramentas onde as aplicaes (applets, servlets, etc) no so particularmente desvantajosas em relao as demais linguagens compiladas. Com um bom projeto, seguindo boas prticas de codificao e evitando gargalos, aplicaes usualmente executam rpido o bastante. Entretanto, a verdade que a primeira (e as subseqentes) verses de um programa escrito em qualquer linguagem so muitas vezes mais lentos que a expectativa, e as razes para essa carncia de desempenho no sempre clara para o desenvolvedor a primeira vista, preciso ter um conhecimento mais profundo sobre as peculiaridades da linguagem e extrair a sua melhor desempenho. verdade que h um overhead na plataforma Java principalmente devido a sua camada de maquina virtual que abstrai Java para as camadas de hardware.Tambm verdade que h sobrecarga da natureza dinmica do Java. Estas sobrecargas podem causar a uma aplicao Java, uma execuo mais lenta que uma aplicao equivalente em uma linguagem de menor nvel (assim como um programa C geralmente mais lento que um programa equivalente escrito em Assembler). Porm Java possui muitas vantagens em relao a algumas outras linguagens de programao: sua plataforma independente, gerenciamento de memria, poderosa checagem de excees, multithreading,

carregamento dinmico, controle de segurana (Falco, 2006).

16

4. FERRAMENTAS DE TESTE

Existem diversas ferramentas para testar desempenho de sistemas em Java, disponveis no mercado, dentre elas foram selecionadas algumas que permitem utilizao integral dos recursos oferecidos, por um determinado prazo, ou so ferramentas de uso livre, entre estas esto : SilkPerformer 2006 R2 Workbench Borland. (Borland, 2007). JProfiler EJ Technologies. (EJ-Technologies, 2007). JMeter Apache. (Apache, 2007). DevTest4J AppPerfect. (AppPerfect, 2007).

Nos testes, sero utilizadas as ferramentas DevTest4J e JProfiler, pois nelas se destacaram a facilidade de utilizao, a exibio dos resultados em tempo real, a facilidade de instalao , configurao e execuo dos testes e os relatrios e grficos bastante completos, permitindo agrupamentos por mtodos, classes ou pacotes, detalhando por exemplo a desempenho de cada classe do sistema, caso se queira analisar o

comportamento de um mtodo no sistema pode-se saber quantas chamadas dele foram executadas e qual impacto elas tiveram na utilizao dos recursos do hardware, por

exemplo quanta memria e quanto tempo de processador foram utilizados. Isso permite atacar de forma eficiente, exatamente os pontos que esto denegrindo o desempenho da aplicao, alem de permitir uma viso do geral do comportamento das classes em relao a utilizao dos recursos de hardware. Ambas as ferramentas possuem verses de avaliao gratuitas disponveis para download no site do fabricante.

4.1. DevTest4J
O DevTest4J um produto de uma empresa norte americana chamada AppPerfect especializada em desenvolvimento de solues para teste e monitoramento de softwares,

17

que atua no mercado desde 2002 e tem como principais clientes a Marinha e o Exrcito norte americanos, Boeing, Siemens, American Express, HP, Motorola entre outras. O DevTest4J um software para anlise e testes de aplicaes Java, que engloba trs funcionalidades principais, a anlise de cdigo fonte, teste unitrio e finalmente o teste de desempenho. Entre as vantagens deste software podemos citar a integrao com varias IDEs, entre elas, Eclipse, NetBeans, JBuilder e JDeveloper, resultados detalhados para anlise de memria , utilizao de CPU e comportamento de threads atravs de grficos , a facilidade de uso, o suporte a todos os tipos de aplicao Java clientes, aplicaes e applets , e servidores, EJBs, JSP/Servlets, e tambm oferece suporte a servidores de aplicao como BEA WebLogic, IBM WebSphere, JBoss, Apache Tomcat, Oracle Server, SunOne (AppPerfect, 2007). O custo da licena de instalao para apenas uma mquina de $495 dlares. possvel observar na figura 1, as quantidades de memria, livre, total e utilizada pelas classes ativas alem das quantidades de threads que esto executando, aguardando, bloqueadas e total e tambm a quantidade de instncias dos objetos e arrays ativos, em um teste de desempenho utilizando o DevTest4J.

18

Figura 1, Resultados obtidos no teste de desempenho de memria com DevTest4J.

4.2. JProfiler
O JProfiler um produto da empresa alem EJ-Technologies, fundada em 2001, ela atua no desenvolvimento de solues que auxiliam desenvolvedores de software a solucionar problemas de desempenho e distribuio em suas aplicaes. Entre seus principais clientes esto 3M, Adobe, AT&T, Xrox entre outros. O JProfiler destina-se exclusivamente a realizar testes de desempenho em aplicaes Java. Suas principais vantagens so a facilidade de utilizao e configurao, exibio dos resultados em tempo real, baixa sobrecarga no sistema, integrao com vrias IDEs e servidores de aplicao, suporte plataformas 32 e 64 bits, excelente suporte ao Java Enterprise Edition, excelentes analisadores de desempenho de memria, CPU e threads. O custo da licena de instalao em apenas uma mquina de $499 dlares (EJTechnologies, 2007).

19

possvel observar na figura 2, a quantidade de utilizao de memria, pelas classes, assim como a quantidade de instncias ativas das mesmas , agrupadas por pacotes e em ordem decrescente de instncias ativas em um teste de desempenho utilizando o JProfiler.

Figura 2, Resultados obtidos no teste de desempenho de memria com JProfiler.

20

5. TESTES
Sero utilizados o JProfiler e o TestDev4J para realizao de testes de utilizao da memria, utilizao do processador e gerao de deadlock. Pois estes testes so comuns a ambas as aplicaes, os testes sero executados por cinco minutos, e repetidos por trs vezes. Finalmente ser feita uma anlise dos resultados apresentados pelos softwares comprando o desempenho da aplicao, em cada teste de cada produto.

5.1. Aplicao alvo


A aplicao alvo utilizada nos testes foi um Applet escrito em Java chamado FishWorld, que consiste em um jogo em segunda dimenso, escrito por Stephan Uhlmann, que mantm verses atualizadas e disponveis para download em seu site, inclusive com acesso ao cdigo fonte, ele foi escolhido por utilizar diversos recursos que necessitam de um desempenho adequado, como por exemplo movimentao de imagens, composio de grficos vetoriais e respostas rpidas ao usurio. O principio de funcionamento da aplicao muito simples, basta clicar como mouse sobre os peixes para elimin-los e quanto mais peixes o usurio conseguir eliminar mais postos so acumulados (FishWorld, 2007). possvel observar na figura 3, uma tela do aplicativo FishWorld durante a execuo do jogo, onde o usurio deve clicar com o mouse sobre as figuras dos peixes para destrulos, e na figura 4 exibida a classificao dos melhores jogadores e suas respectivas pontuaes.

21

Figura 3, Aplicativo FishWorld.

22

Figura 4, Classificao dos melhores jogadores e suas pontuaes.

5.2. Ambiente de teste


Os testes foram realizados em um computador com processador Intel Celeron 2,20 GHz com 256 MB de memria RAM , e Hard Disk de 40 GB, com sistema operacional Microsoft Windows XP Professional(verso 2002 Service Pack 2) e mquina virtual Java verso 1.4.2 (Sun, 2007).

5.3 Teste de utilizao de memria


Na realizao dos testes de desempenho de memria as duas ferramentas apresentaram resultados muito semelhantes tanto quando comparados os trs testes de cada uma, como quando comparados os resultados obtidos entre elas, como os nmeros

23

no so exatamente os mesmos, o teste selecionado, para realizar o comparativo, aquele que apresentou o pior desempenho, em cada aplicao. possvel observar na tabela 1, os resultados dos trs testes de desempenho de memria, apresentados pelas ferramentas DevTest4J e JProfiler, e destacado est o teste utilizado como comparativo para anlise de resultados. Testes de desempenho de memria Teste 1 Teste 2

Teste 3

Quantidade de Quantidade de Quantidade de Memria Utilizada Memria Utilizada Memria Utilizada (KB) (KB) (KB) DevTes4J JProfiler DevTes4J JProfiler DevTes4J JProfiler int 1068 1076 1195 1064 1200 1098 char 236 224 246,58 213 255,7 238 byte 276,5 210 249,65 198 289,26 233 Tabela 1, Resultados de testes de desempenho de memria. De acordo com resultados obtidos em ambas as aplicaes, as classes que mais se utilizaram da memria foram: int, char e byte. possvel observar na tabela 2 as quantidades de memria utilizadas pelas classes e a diferena percentual entre os testes das duas ferramentas.
Classe int char byte Quantidade de Memria Utilizada (KB) DevTes4J JProfiler 1200,00 1098,00 255,70 238,00 289,26 233,00 Diferena -8,50 % -6,92 % -19,45 %

Tabela 2, Quantidade de memria utilizada pelas classes int, char e byte. Nas figuras 5 e 6 abaixo possvel observar nos grficos dos resultados da utilizao de memria apresentados pelo JProfiler e pelo TestDev4J que as classes int, char e byte foram realmente as que mais se utilizaram dos recursos de memria do sistema, e tambm que o nmero de instncias ativas no influencia nesta quantidade de memria pois, por exemplo, a classe int tem cerca de cinco vezes menos instncias ativas que a classe char , e mesmo assim utilizou aproximadamente quatro vezes mais memria.

24

Figura 5, Teste de desempenho de memria apresentado pelo JProfiler.

25

Figura 6, Teste de desempenho de memria apresentado pelo TestDev4J. A anlise destes grficos e nmeros permite, alm de identificar quais classes esto ocupando uma quantidade elevada de memria, tambm questionar o comportamento de outras classes que apesar de no serem as que mais se utilizaram deste recurso, tambm possam ter cdigo revisto e talvez, contribuir para uma melhora significativa no desempenho do uso de memria do sistema.

5.4 Teste de utilizao do processador


Assim como no teste de memria, o teste utilizado para anlise o que apresentou pior desempenho em cada ferramenta. possvel observar na tabela 3, os resultados dos trs testes de desempenho de CPU, apresentados pelas ferramentas DevTest4J e JProfiler, e destacado est o teste utilizado como comparativo para anlise de resultados.

26

Testes de desempenho de CPU Teste 1 Teste 2 Teste 3 Tempo Utilizando Tempo Utilizando Tempo Utilizando o o Processador o Processador Processador (ms) (ms) (ms) DevTes4J JProfiler DevTes4J JProfiler DevTes4J JProfiler FishWorld.Update FishWorld.LoadGraphics 3145 328 3612,4 338 3170 343,75 3615,5 344,61 3051 336,6 105 3586,9 324 112

FishWorld.init 102 105 109,38 121 Tabela 3, resultados dos testes de desempenho de cpu.

Na tabela 4 possvel

identificar que os mtodos que mais se utilizaram do

processador, em ambas as ferramentas foram : FishWorld.Update, FishWorld.LoadGraphics e FishWorld.init.

Mtodos FishWorld.Update FishWorld.LoadGraphics FishWorld.init

Tempo Utilizando o Processador (ms) DevTes4J JProfiler Diferena 3170,00 3615,50 14,05 % 343,75 344,61 0,25 % 109,38 121,00 10,62 %

Tabela 4, Mtodos que mais se utilizaram do processador.

27

Nas figuras 7 e 8 abaixo possvel observar nos resultados do teste de desempenho de processador apresentados pelas duas aplicaes, que os mtodos que mais se utilizaram deste recursos foram FishWorld.update, FishWorld.LoadGraphics e FishWorld.init.

Figura 7, Resultados obtidos no teste de desempenho de CPU com JProfiler.

28

Figura 8, Resultados obtidos no teste de desempenho de CPU com TestDev4J. A anlise destes grficos e nmeros, permite identificar quais mtodos esto ocupando um maior tempo de CPU, possibilitando uma anlise no cdigo fonte do sistema para contribuir para uma melhora no desempenho do uso do processador pelos vrios processos que necessitem dele.

5.5 Teste de gerao de deadlock


Neste caso, os resultados obtidos so idnticos, e em ambas as aplicaes no foram detectadas a gerao de deadlock. Nas figuras 9 e 10 abaixo, possvel observar que, nos resultados obtidos pelas duas aplicaes no houve gerao de deadlock por parte da aplicao testada.

29

Figura 9, Teste de gerao de deadlock com Jprofiler.

30

Figura 10, Teste de gerao de deadlock com TestDev4J. Deadlock uma situao de impasse no qual alguns processos bloqueiam recursos entre si impedindo que o funcionamento normal continue. Por exemplo no caso de trs transaes chamadas respectivamente de T1, T2 e T3 , trs recursos chamados respectivamente de A, B e C, e os seguintes comportamentos : T1 = Leia A, Grave A, Leia B, Grave B, Leia C, Grave C T2 = Leia B, Grave B, Leia C, Grave C, Leia A, Grave A T3 = Leia C, Grave C, Leia A, Grave A, Leia B, Grave B

Sabendo que para atividades de gravao preciso obter um bloqueio exclusivo sobre os recursos. Assim as atividades de gravao de A, B e C para as transaes T1, T2 e T3 sero bloqueados de forma exclusiva. Supondo ento que as trs transaes sejam iniciadas no mesmo momento o seguinte comportamento pode ser observado : T1 - Consegue bloquear A T2 - Consegue bloquear B

31

T3 - Consegue bloquear C

Feito os bloqueios nos respectivos recursos, as transaes tentaro bloquear os prximos recursos. Logo a prxima etapa : T1 - Consegue bloquear A, tenta bloquear B (mas no consegue, pois T2 est bloqueando-o) T2 - Consegue bloquear B, tenta bloquear C (mas no consegue, pois T3 est bloqueando-o) T3 - Consegue bloquear C, tenta bloquear A (mas no consegue, pois T1 est bloqueando-o) Nesse ponto existe um impasse, pois para que T1 seja concluda, ela precisa do recurso B, que est bloqueado pr T2. T2 s ir liberar o recurso B, quando ela terminar, mas para ela termine necessrio que ela acesse o recurso C, que est bloqueado por T3. T3 s ir liberar o recurso C quando ela terminar, mas para ela termine necessrio que ela acesse o recurso A, que est bloqueado pr T1. Assim as trs transaes iro esperar indefinidamente pr um recurso que no ser liberado, ocasionando um deadlock (UTLEY,

2002).
Esta uma anlise muito importante, pois sempre que forem detectados impasses que impeam a continuidade da aplicao, os mesmos dever ser corrigidos com solues que impeam o seu surgimento ou com mecanismos de controle e ou desvio, que permitam a aplicao, por exemplo, gravar um log para consulta posterior e continuar seu funcionamento, ou at mesmo encerrar suas atividades liberando os recursos do sistema, para outros processos.

32

6 CONCLUSES
O processo de teste de desempenho de software de suma importncia para que a aplicao trabalhe de forma eficiente, ou seja, consumindo o mnimo necessrio dos

recursos de hardware e atendendo de forma rpida as solicitaes do usurio final, garantindo com isso sua satisfao. A utilizao das ferramentas para anlise de desempenho, TestDev4J e JProfiler , se mostrou bastante importante no processo de teste de desempenho de software, ambas obtiveram resultados semelhantes, e apesar de nenhuma delas fornecer solues para os problemas encontrados, as duas permitiram, atravs da anlise dos resultados oferecidos, observar e questionar o comportamento de classes e mtodos da aplicao com relao a fatores indispensveis para quem deseja produzir um software com bom desempenho e que satisfaa ao usurio, como por exemplo a utilizao de memria e processador. A grande vantagem de ambas as ferramentas que elas possibilitam, atacar exatamente nos pontos onde est havendo uma maior degradao dos recursos do sistema, e com isso se ganha muito tempo no processo de aperfeioamento da aplicao. Assim possvel modificar o produto final fazendo, por exemplo, com que ele utilize menos memria e menos tempo de processamento, isso pode, por exemplo, adiar a compra de um novo servidor ou dispensar a necessidade de um upgrade. No entanto no importante lembrar que alterar uma aplicao tambm envolve custos e riscos, e que muitas vezes pode no ser a melhor soluo. Sendo assim possvel concluir que, as ferramentas utilizadas nos testes, no fornecem solues para os problemas de desempenho elas apenas apresentam os

problemas, e servem como instrumento de auxilio para que seja possvel tomar decises sobre como resolver estes problemas da melhor forma possvel, ou seja encontrando a melhor soluo para que se obtenha um sistema com desempenho , confiabilidade e custo adequados.

33

REFERNCIAS BIBLIOGRFICAS
APACHE, Apache Software Foundation. Disponvel em http://jakarta.apache.org/jmeter/. Recuperado em 01/06/2007. APPPERFECT, Application Testing and Monitoring Solutions. Disponvel http://www.appperfect.com/download/index.html. Recuperado em 07/06/2007. em

BORLAND, SilkPerformer Software Application Performance and Load Testing. Disponvel em http://www.borland.com/us/products/silk/silkperformer/index.html. Recuperado em 01/06/2007. EJ-TECHNOLOGIES. JProfiler Trial Dowload. Disponvel em technologies.com/download/jprofiler/trial.php. Recuperado em 02/04/2007. http://www.ej-

FALCO, Flvia Merylyn Carneiro. Metodologia de Desenvolvimento Java com Performance. UFPE PE, Monografia, 2006. FISHWORLD, Stephan Uhlmann. FishWorld. Disponvel em Recuperado em 02/06/2007 http://su2.info/fishworld/.

JANDL JUNIOR, Peter. Introduo ao Java, So Paulo: Berkeley, 2002. MACHADO, L.F.C. Modelo para Definio de Processos de Software na Estao TABA.COPPE/UFRJ RJ, Dissertao de Mestrado, 2000. PRESSMAN, Roger S. Engenharia de software, So Paulo: Makron Books, 1995. SOMMERVILLE, I. Engenharia de software. 6 ed. So Paulo: Addison Wesley, 2003. SUN Microsystems. Tecnologia Java: breve histrico da tecnologia Java. Disponvel em http://www.java.com/pt_BR/about/. Recuperado em 16/04/2007. UTLEY, Craig. Desenvolvendo Aplicativos para Web com SQL Server 2000, So Paulo : Makron Books, 2002.

34

Você também pode gostar