Archive

Archive for the ‘java’ Category

Integração Continua com Hudson

Nas últimas semanas eu estive trabalhando em um projeto de Integração Contínua e foram analisadas duas ferramentes CruiseControl e Hudson.

O Hudson na análise se mostrou uma ferramenta mais prática e fácil de utilizar, tem interface gráfica e possibilita a construção de projetos auxiliares (dependências), inclusive com a possibilidade de utilizar várias máquinas para acelerar o processamento das construções.

A função da Integração Contínua é fornecer automatização da construção de aplicações e testes integrados, gerando relatórios que facilitam a homologação da aplicação e possível resgate de uma construção anterior.

O Hudson integra com repositórios como CVS, possibilitando fazer checkout do projeto e configurar um listener para gerar uma nova construção da aplicação toda vez que existir alteração da versão de qualquer aquivo no projeto. Existe ainda integração com ferramentas para construção de aplicação como ANT, que é aonde devem ser configurados para serem executados os testes Junit.

Foram testados Junit que utilizam o Selenium, uma ferramenta de testes de interface WEB ou seja ferramenta para testar o Client Side da aplicação. Este teste obteve sucesso.

Não entrei em detalhes profundos sobre o Hudson, pois já existe bastante conteúdo sobre ele no Google, um bom link para começar é : http://blog.dilas.com.br/index.php/2007/07/25/integracao-continua-com-hudson/

Com certeza manter um processo de Integração Contínua em um projeto, adiciona muito para a qualidade do projeto além da transparência para todos os participantes do processo de desenvolvimento.

Conforme for havendo o amadurecimento do projeto devo trazer algumas funcionalidades interessantes do Hudson :).

Cobertura de testes unitários com Emma

Os testes unitários facilitam a integração continua em uma aplicação! Isso muitos já sabem, mas o que talvez possa estar passando a despercebido em algumas empresas hoje, é a eficiência destes testes unitários, que reflete diretamente na qualidade da aplicação.

Na tentativa de melhorar a qualidade de testes unitários percebi que não bastava apenas visualmente verificar classe por classe, sua utilização e tentar cobrir o máximo de possibilidades, verifiquei que isso seria impossível ser alcançado utilizando apenas o bom senso. Principalmente quando são projetos muito grandes com muitas pessoas desenvolvendo testes e artefatos do software.

Um boa prática para os projetos foi implantada recentemente em um dos projetos que eu trabalho, a ferramenta Emma, bem como outras ferramentas como por exemplo: Cobertura e CodeCover, que tem como objetivo gerar relatórios sobre o código que está sendo utilizado no momento de execução dos testes unitários. Com isso eu pude verificar com exatidão quais classes, métodos, blocos e linhas do meu código não estão sendo utilizados pelos testes. Permitindo então construir novos testes para essa parte da aplicação que até então não está sendo testada, mas deveria.

A ferramenta Emma que foi implantada em um sistema EJB 2.0 e foi publicada no Jboss 3.2.7, é muito fácil de utilizar, vou descrever abaixo os passos para gerar um relatório.

Copie o arquivo “emma.jar” quem vem dentro “emma-*****-lib.zip”, é pode ser baixado no site http://emma.sourceforge.net/, para dentro do diretório do Servidor da Aplicação, no meu caso “/java/jboss-3.2.7/server/default/lib”.

É necessário gerar a versão da sua aplicação publicada com as classes instrumentadas, o que significa que suas classes originais serão modificadas para que possa ser possível o Emma verificar o que do código está sendo utilizado. Para gerara as classes instrumentadas utilize o comando “java –cp emma.jar emma instr -d output -ip ****.jar” com isso será gerado o arquivo “coverage.em” e a nova versão instrumentada do “****.jar”. Agora basta substituir o JAR publicado no seu Servidor de Aplicação por esse novo que foi instrumentado e iniciar o servidor.


Rode os testes normalmente e ao terminar desligue o Servidor de Aplicação. Com isso o Emma utilizando suas classes instrumentadas já gerou o arquivo de onde se origina o relatório no diretório aonde está sendo executado o Servidor, no meu caso “C:\java\jboss-3.2.7\bin\ coverage.ec”.
 Para concluir e gerar o relatório basta rodar o comando: 
C:\java\jboss-3.2.7\bin>java -cp emma.jar emma report -r html -in coverage.em -in C:\java\jboss-3.2.7\bin\coverage.ec, lembrando que o arquivo que foi gerado no momento da instrumentação “coverage.em”, deve estar no mesmo diretório que o “coverage.ec” ou descrever o caminho para esse arquivo. O relatório será gerado em “coverage\index.html”, existem ainda a possibilidade de gerar esse relatório em Plain Text ou XML.


Uma outra forma de utilização do Emma é executar a instrumentação e processamento do relatório através do Ant, abaixo segue o exemplo de instrumentação:

<emma>
   <instr destdir=“${emma.bin.dir}” mode=“fullcopy” merge=“false” metadatafile=“${emma.metadado.dir}/coverage.em” instrpath=“${bin.dir}”/>
</emma>

É isso, espero ter ajudado!

Categorias:java Tags:, , ,