terça-feira, 3 de junho de 2014

Como usar o jQana em seu projeto adequadamente


O jQana é um plugin Maven que verifica 3 importantes métricas em um projeto Java: Response For a Class, LCOM 4 (Lack of Cohesion in Methods - Hitz & Montazeri) e Complexidade Ciclomática (McCabe).

Ele funciona  com o Apache Maven, podendo rodar sob o Maven 2 ou 3 sem problemas. Vamos dar umas dicas de como usar o plugin em seus projetos.


Para começar

O jQana, infelizmente, ainda não está espelhado no Repositório Central Maven. Isso porque eu ainda não tive tempo de configurar o projeto para isso. Aliás, estou procurando voluntários...

Então, para usar o jQana, você terá que configurar o repositório em seu "pom.xml". Um exemplo disso está na página LATEST VERSION, do jQana:

<pluginRepositories>
    <pluginRepository>
        <id>jqana-mvn-repo</id>
        <url>https://raw.github.com/cleuton/jqana/mvn-repo/</url>
    </pluginRepository>
</pluginRepositories>

Assim, quando o Maven não encontrar o plugin em seu repositório local (pasta ".m2"), ele vai procurar e baixar do meu repositório Maven, que fica no GitHub.

Não adianta tentar navegar para a URL do repositório, pois o GitHub costuma dar erro HTTP 400. Você tem que configurar no seu "pom.xml" e usar a partir de lá. 

Maven 2

Se você usa Maven 2, então deve configurar o jQana na sessão "<reporting>" do seu "pom.xml": 


<plugin>
    <groupId>com.obomprogramador.tools</groupId>
    <artifactId>jqana-maven-plugin</artifactId>
    <version>0.0.6</version>              
</plugin> 


Maven 3

Se você usa Maven 3, então deve configurar o jQana dentro da sessão "<build>" do seu "pom.xml", dentro da configuração do plugin "maven-site-plugin":

<build>
...  
<plugins>
 <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.0.2</version>
  <configuration>
   <encoding>${encoding.default}</encoding>
   <source>1.6</source>
   <target>1.6</target>
  </configuration>
 </plugin>

 <plugin>
  <artifactId>maven-site-plugin</artifactId>
   <version>3.3</version>
   <configuration>
     <attach>true</attach>
     <reportPlugins>
    <plugin>  
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>
            maven-project-info-reports-plugin
        </artifactId>  
        <version>2.7</version>
        <configuration>  
            <dependencyDetailsEnabled>
            false</dependencyDetailsEnabled>  
            <dependencyLocationsEnabled>
            false</dependencyLocationsEnabled>  
         <reports>  
             <report>summary</report>  
             <report>dependencies</report>  
             <report>project-team</report>  
             <report>issue-tracking</report>  
             <report>scm</report>  
             <report>cim</report>  
             <report>modules</report>  
             <report>plugins</report>  
         </reports>  
        </configuration>  
    </plugin>          
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-pmd-plugin</artifactId>
           <version>3.0.1</version>
     <configuration>
              <sourceEncoding>utf-8</sourceEncoding>
              <targetJdk>1.6</targetJdk>
           </configuration>         
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-checkstyle-plugin</artifactId>
           <version>2.10</version>
         </plugin>
    <plugin>
     <groupId>com.obomprogramador.tools</groupId>
     <artifactId>jqana-maven-plugin</artifactId>
     <version>0.0.6</version>
    </plugin>
    <plugin>
     <groupId>org.codehaus.mojo</groupId>
     <artifactId>cobertura-maven-plugin</artifactId>
     <version>2.6</version>       
    </plugin>                       
     </reportPlugins>
    </configuration>
 </plugin>

 
</plugins>
</build>

Relatório

O relatório do jQana sai dentro do "maven site", na parte "project reports", conforme a figura:


Note que as métricas são agregadas de maneira diferente. A Complexidade Ciclomática é a média encontrada naquele nível (Classe, Pacote e Projeto), assim como o RFC. Já o LCOM 4 é o maior valor encontrado naquele nível.

Participe do projeto e contribua!