terça-feira, 9 de junho de 2015

Utilizando o Sonar para testes automatizados



Saaaaaaaaaaaaaaaaalve cambada de sofredores do dia a dia dos códigos! neste venho passar uma configuração da ferramenta sonar para que possamos otimizar nosso trabalho de testes, assim como automatiza-los. Lets go Sonar!

Sabemos que nos métodos ágeis as equipes são auto-organizadas. Ou seja, não existe a figura de um chefe que verifica e controla tudo o que os membros da equipe estão fazendo. Assim, a responsabilidade de manter a qualidade do código que está sendo produzido é da própria equipe de desenvolvimento. Mas como fazer isso com agilidade? Como apoiar a equipe de desenvolvimento nesta tarefa?
No post de hoje, apresentamos o Sonar, uma ferramenta para apoiar o desenvolvimento através da geração de relatórios dinâmicos que dão um feedback sobre a qualidade do código que está sendo produzido.
No dia a dia do desenvolvimento de software, quantas vezes nos deparamos com códigos sem comentários e difíceis de entender? Quantas vezes encontramos códigos que fogem ao padrão definido para o projeto? Quantas horas (ou até dias) dispensamos com bugs que podiam ser resolvidos com alterações simples no código? Essas são algumas situações comuns em projetos de software, principalmente em equipes grandes, onde é ainda mais difícil controlar o código que está sendo desenvolvido pela equipe. Nos métodos ágeis, isso não é nem uma questão de controle, uma vez que a equipe é auto-organizada. Trata-se de uma questão de apoio ao desenvolvimento. Como apoiar o desenvolvedor para que ele possa desenvolver sempre um código de qualidade? Já pensou em utilizar o Sonar?!
Sonar é uma ferramenta open source construída para avaliar a qualidade do código que está sendo desenvolvido. Questões de arquitetura, código duplicado, pontos potenciais de bugs, nível de complexidade e cobertura dos testes são avaliadas pelo Sonar, de modo a dar para a equipe um feedback da qualidade do seu código.
O Sonar pode ser configurado para armazenar todas as informações do seu código em um banco de dados para que se possa fazer também um acompanhamento da evolução da qualidade do código. Na Figura 1 é apresentada uma das telas geradas pelo Sonar, em que é mostrado um mapa geral da situação do código dos projetos envolvidos.
Mapa Geral Projetos
Figura 1: Mapa geral dos projetos
O usuário pode selecionar o tipo de avaliação que desejar. Por exemplo, avaliar a situação quanto ao percentual código duplicado em cada projeto. Quanto mais próximo da cor verde, maior a qualidade do projeto quanto ao tipo de avaliação selecionado. O usuário também pode selecionar um dos projetos (retângulos da Figura 1) para visualizar informações detalhadas do projeto correspondente.
Na Figura 2 são apresentadas informações mais detalhadas do projeto selecionado.
Visão Detalhada Projeto
Figura 2: Visão detalhada de um projeto
Uma forma de utilizar o Sonar é integrando-o a um serviço de integração contínua (IC) para automatizar a geração destes relatórios de avaliação da qualidade do código. Uma forma interessante seria programar o servidor de IC para diariamente fazer uma chamada ao Sonar e emitir um relatório dos projetos, de maneira a dar um feedback diário para a equipe sobre a qualidade do que ela está desenvolvendo. Ou então emitindo um relatório a cada commit no repositório de código. Dessa forma os desenvolvedores podem tomar conhecimento mais rápido acerca dos débitos técnicos da equipe e tomar as ações necessárias para corrigir o problema.
Reagir o mais cedo possível é importante para manter a qualidade do software que está sendo desenvolvido e garantir sempre qualidade nas entregas. Como mencionado anteriormente, a geração dos relatórios do Sonar pode ser integrada ao serviço de integração contínua de um projeto, como por exemplo, o Jenkins. No link "Jenkins Plugin" encontramos os detalhes de como fazer a integração das duas ferramentas.
No post de hoje apresentei uma forma de apoiar a equipe de desenvolvimento a manter a qualidade do seu trabalho. Com o uso do Sonar integrado a um serviço de IC é possível dar um retorno rápido para o desenvolvedor sobre a qualidade do seu código. O feedback diário é agilidade para a equipe, uma vez que permite que a ela tome conhecimento do que precisa ser melhorado o quanto antes, proporcionando entregas de qualidade para o cliente. E cabe ressaltar, que não se trata de uma questão de controle de qualidade, mas sim de apoio ao desenvolvimento visando qualidade.
E você? O que sua equipe de desenvolvimento faz para manter a qualidade do seu código?
- See more at: http://blog.myscrumhalf.com/2013/06/sonar-apoiando-a-qualidade-do-desenvolvimento-de-software/#sthash.mPDhmIMR.dpuf

Instalando Sonar

Vamos usar o Maven 2 para integrar com o Sonar e executar a análise do código fonte quando for necessário. Primeiro devemos configurar o Sonar, faça o download. Para instalar o Sonar, descompacte o arquivo sonar-x.x.zip. Você pode manter a configuração básica padrão da instalação que usa o banco de dados H2. Nós vamos configurar o Sonar com o MySQL. Primeiramente, devemos configurar um schema de banco de dados específico para o Sonar no MySQL. Então, conecte no MySQL como root e execute os comandos a seguir.
1
2
3
4
5
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;

Banco de dados e usuário Sonar criados com sucesso, vamos para o próximo passo.
Edite o arquivo de configuração $SONA_HOME/conf/sonar.properties comente as linhas do H2 database.
1
2
#sonar.jdbc.url:    jdbc:h2:tcp://localhost:9092/sonar
#sonar.jdbc.driverClassName: org.h2.Driver

Agora, adicione a configuração do MySQL.
1
2
3
sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=
utf8&rewriteBatchedStatements=true
sonar.jdbc.driverClassName: com.mysql.jdbc.Driver
sonar.jdbc.validationQuery: select 1

Ok. Salve o arquivo de configuração.

Agora inicie o Sonar.

1
2
3
$ /usr/local/sonar-3.2/bin/<SEU-SISTEMA-OPERACIONAL>/sonar.sh start
$ Starting sonar...
$ Started sonar.

No diretório bin/ você deve selecionar o seu sistema operacional.
O Sonar esta pronto para receber seu projeto, acesse http://localhost:9000 e veja a interface gráfica dele, sem nenhum projeto até o momento. O próximo passo e último é configurar o Maven, você NÃO precisa modificar o arquivo POM.xml do seu projeto, para adicionar plugins basta editar o arquivo settings.xml e acrescentar uma profile do Sonar, conforme a seguir.
1
$ sudo vim ~/.m2/settings.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<settings>
    <profiles>
    <profile>
   <id>sonar</id>
   <activation>
      <activeByDefault>true</activeByDefault>
   </activation>
   <properties>
      <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar</sonar.jdbc.url>
      <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
      <sonar.jdbc.username>sonar</sonar.jdbc.username>
      <sonar.jdbc.password>sonar</sonar.jdbc.password>
      <sonar.host.url>http://localhost:9000</sonar.host.url>
   </properties>
</profile>
 </profiles>
</settings>

Perfeito, o sonar está configurado e integrado ao Maven. A partir do seu projeto você poderá criar um projeto no Sonar e realizar a análise do código fonte apenas com uma linha de comando.
1
$ mvn sonar:sonar

1.1 Configurando Em Seu Projeto

Eclipse Integração ( Para instalar este plugin no Eclipse IDE) - Com Eclipse Market Place

http://4.bp.blogspot.com/-E1izfZWNvqA/Uq4pCT4I6hI/AAAAAAAAAIs/Ff1GqHE17pQ/s1600/Figure+9+-+Sonar+Eclipse+Plug-in+Install+%2528Market+Place%2529.png
http://3.bp.blogspot.com/-Pnfc9b55QLY/Uq41oPL_JlI/AAAAAAAAAJE/lvSagAJtlRk/s320/Figure+10+-+Sonar+Eclipse+Plug-in+Install+(Market+Place)+II.png

Vá em Help > Install New Software Digite o nome sonar.
Ou você pode colocar a url URL (http://dist.sonar-ide.codehaus.org/eclipse/)

http://2.bp.blogspot.com/-S2eq0QAuCqs/Uq4o7sBuq-I/AAAAAAAAAGg/x7OodpVXfRw/s1600/Figure+11-+Sonar+Eclipse+Plug-in+Install+%2528With+Install+New+Software+Menu%2529.png
Baixe todos os pacotes.
Configure o Sonar no seu projeto Eclipse
Vá em Window > Preferences > Sonar > Servers.
Ele deve estar configura automaticamente na porta http://localhost:9000/. Não faça nada.
http://2.bp.blogspot.com/-FhxdvLifyXQ/Uq4o8iMKZqI/AAAAAAAAAGo/ze0CkFUDALc/s1600/Figure+12+-+Configure+Sonar+Server+in+Eclipse.png
Para vincular seu projeto, clique no pacote de seu projeto e selecione:
http://4.bp.blogspot.com/-Du8ryVM0QKU/Uq4o9D9d-bI/AAAAAAAAAG4/6l5fZ9D_UVc/s1600/Figure+13+-+Configure+and+Associate+your+Eclipse+Project+with+Sonar.png
No campo de texto digite sonar e escolha: Simple java Project analized etc...
http://4.bp.blogspot.com/-BXO1jeBxWyg/Uq4o9IoExTI/AAAAAAAAAGw/wSCgc3xJA9g/s1600/Figure+14+-+Associate+your+Eclipse+Project+with+Sonar+II.png
Clique em finish.
Para analisar e gerenciar as regras de violação:
http://4.bp.blogspot.com/-VkZrYJ8BwpU/Uq4o9rDfCeI/AAAAAAAAAHE/6FQisj4ee80/s1600/Figure+15+-+Configure+Modules.png
http://1.bp.blogspot.com/-VUyTj2hFKC4/Uq4o98dXG4I/AAAAAAAAAHQ/2W2jVF02YSA/s1600/Figure+16+-+configure+sonar+modules+from+Eclipse.png

Nota
Por favor, certifique-se de ter iniciado o servidor sonar local (como descrito na seção sonar Run ), caso contrário você não faria capaz de ver o projeto sonar direito que você pretende configurar

Executando o Sonar para uma análise local
http://4.bp.blogspot.com/-ZIw5SsIfePw/Uq4o-JszDBI/AAAAAAAAAHM/C-Nsr6Pk0uE/s1600/Figure+17a+%25E2%2580%2593+Set+Sonar+Analysis+on+Local+Mode.png
http://1.bp.blogspot.com/-N3PwMK-46_0/Uq4o-rbpztI/AAAAAAAAAHY/oS3LOg0umrY/s1600/Figure+17b+-+Run+Sonar+Analysis+on+Local.png
http://2.bp.blogspot.com/-9twAWTa95Zs/Uq4o-ogIkTI/AAAAAAAAAHw/gz8XmjWB8CM/s1600/Figure+18+-+sonar+violation+analysis+console.png



http://1.bp.blogspot.com/-xPKLi3qI3QU/Uq4o-yazhPI/AAAAAAAAAHg/06DZqv1-GyU/s1600/Figure+19+-+Sonar+violation+analysis+console+II.png
http://4.bp.blogspot.com/-6eFSjl8hdAc/Uq42ver7MKI/AAAAAAAAAJM/CoenSwlIKFw/s1600/Figure+20+-+Sonar+violations+Markers.png

Pronto! Seu Sonar está instalado, configurado e funcionando no seu projeto com eclipse.
E digo apenas Flow flow! valeu, obrigado de nada!

Admin: Bruno

Olá Galera! muito grato por estarem acessando nosso blog. Espero que seja possível transmitir de forma compreensível um pouco de meus conhecimentos em programação, para esta comunidade de desenvolvedores que cresce cada vez mais! Espero que Gostem! Abraço! E meu enorme obrigado à Renato Simões, Átila Soares,Wanderson Quinto, Emerson e a toda galera que sempre ajudou meu sincero obrigado....
Especialmente a Natalia Failache e Rita de Cassia que sempre apoiaram este sonho....

De seu amigo Bruno Rafael.