quinta-feira, 16 de outubro de 2014

Camada de Serviços do Sonar - Consultas no Excel

Consultando indicadores do Sonar no Excel

 No post "Camada de Serviços do Sonar" aprendemos sobre a WEB API do Sonar que permite controlar muitas informações do projeto e criar as mais diversas consultas, vimos como identificar os identificadores dos indicadores (UAU, essa foi boa) de duas formas diferentes, então, veja esse post caso tenha dúvidas sobre como customizar suas consultas.

Vamos então importar um relatório no excel que vai listar os indicadores "Linhas de Código" (ncloc) e "Total Quality" (total-quality). A consulta do nosso exemplo é exatamente a mesma que criamos no post anterior. Porém é importante ressaltar, o formato deve ser xml. O Excel não trata nativamente o formato "json", por isso é necessário forçar o xml.

Copie a consulta abaixo:
http://localhost:9000/api/resources?metrics=ncloc,total-quality&format=xml

Passo a passo

Abra uma planilha do Excel nova, clique no menu Dados, no grupo "Obter Dados Externo" clique no botão: "Da Web", será exibido um diálogo como da imagem abaixo, copie o link da imagem acima e cole no diálogo. Será exibido o XML com o resultado da consulta listando todos os projetos do servidor com as duas métricas.

Consulta de projetos do Sonar no Excel

Clique no botão "Importar", será exibido um diálogo indicando que não há um esquema. Clique em sim, para o Excel gerar automaticamente esse mapeamento e importar os dados.

Confirmação de geração de esquema

 Escolha o posicionamento inicial da tabela que será gerada e clique em "Ok" para gerar a tabela.

Posicionamento da Tabela

Pronto, geramos nossa tabela com a consulta de projetos do Sonar, veja que ela apresenta os dados do projeto e as métricas de cada projeto.

Tabela gerada no Excel

Depois de criada a tabela da consulta, sempre que quiser atualizar os dados do serviço basta clicar com o botão direito nela e escolher a opção "Atualizar valores", o Excel vai conectar no Sonar e trazer os valores atualizados da sua consulta, inclusive para novos projetos.

Concluindo...

Esse post é apenas o primeiro passo para integração com o Excel. Você pode importar sua tabela para uma planilha "Dados" e utilizar ela para filtrar informações em outras planilhas, por exemplo, uma lista de projetos com uma quantidade limitada de indicadores, ou gerar quantitativos ou formulas a partir dos indicadores dos projetos consultados.

Eu tentei gerar um exemplo de Excel que trate as informações dos indicadores, mas confesso, não sou especialista em Excel e estourei meu prazo tentando achar uma solução para isso. Por isso vou deixar como dever de casa para que cada especialista em Excel trate as planilhas conforme as necessidades da sua organização.

Bom, espero que tenham se divertido tanto quanto eu e aguardem por novidades.

Atenciosamente,
Erick Ferreira Marques da Silva

quarta-feira, 8 de outubro de 2014

Camada de Serviços do Sonar

Web Server API do Sonar

O Sonar possui uma camada de serviços bem vasta que permite desde consultar indicadores, projetos, usuários, eventos, alertas, código fonte, etc. Praticamente qualquer necessidade que você tiver pode ser consultada pela camada de serviços.

Alguns serviços não precisam de autenticação e podem ser consultados de forma simples e direta.

Exemplo

Consultar todos os indicadores de um projeto no Sonar
http://localhost:9000/api/metrics

Outros precisam de autenticação. O Sonar utiliza autenticação básica para HTTP e para isso é necessário informar o usuário e senha a cada requisição. Lembram do usuário "admin" que usamos na configuração do dashboard do Sonar ?

Exemplo

Recuperando as propriedades do servidor Sonar
admin:admin http://localhost:9000/api/server/system

Atenção

Os serviços podem retornar os dados em XML ou Json, por padrão os serviços retornam informações no formato XML. Para alterar o formato para Json, basta incluir o parâmetro "format=json" na chamada, o exemplo abaixo retorna todos os indicadores do servidor no formato json;
http://localhost:9000/api/metrics?format=json

Para acessar a documentação completa e oficial da camada de serviços basta acessar o link abaixo:
http://docs.codehaus.org/display/SONAR/Web+Service+API

Consulta de Indicadores

Vamos conhecer a API Web de consulta de indicadores (resources), é o serviço mais utilizado no dia a dia, pois é através dele que vamos integrar o Sonar com qualquer outro serviço, planilha eletrônica, ou novo componente que venhamos a criar.

Seu uso básico lista todos os projetos cadastrados no Sonar. http://localhost:9000/api/resources

Mas isso vai trazer somente os projetos do servidor, para trazer os indicadores é necessário completar a requisição com os indicadores que queremos buscar.

No exemplo abaixo, vamos buscar todos os projetos do Sonar e o indicador Número de Linhas de Código:
http://localhost:9000/api/resources?metrics=ncloc

<resources>
<resource>
<id>1</id>
<key>my:SonarSnitch</key>
<name>Sonar Snitch</name>
<lname>Sonar Snitch</lname>
<scope>PRJ</scope>
<qualifier>TRK</qualifier>
<lang>cs</lang>
<version>1.0</version>
<date>2014-10-04T18:46:48-0300</date>
<creationDate>2014-10-04T18:46:48-0300</creationDate>
<msr>
<key>ncloc</key>
<val>1558.0</val>
<frmt_val>1.558</frmt_val>
</msr>
</resource>
</resources>

Atenção: É necessário informar na API a lista de identificadores (key) separados por vírgula dos indicadores que você quer consultar. Caso seja informado um identificador inválido ou sem medida, o Sonar vai ignorar esses indicadores na sua requisição, por exemplo, na requisição abaixo o retorno será igual ao exemplo acima, pois o projeto não tem testes unitários registrados, e o indicador_falso não existe.
http://localhost:9000/api/resources?metrics=ncloc,coverage,indicador_falso

Preparando a lista de identificadores dos indicadores

Existem duas formas de se descobrir os identificadores (key) dos indicadores:

  1. Utilizando a API de indicadores (metrics). O primeiro comando que vimos vai retornar todos os indicadores registrados no Sonar, Ele traz diversas as informações do indicador, como identificador (key), nome, descrição, etc.
    Veja no exemplo o retorno dos dados do indicador Número de Linhas de Código:
    http://localhost:9000/api/metrics/ncloc
    <metrics>
    <metric>
    <key>ncloc</key>
    <name>Lines of code</name>
    <description>Non Commenting Lines of Code</description>
    <domain>Size</domain>
    <qualitative>false</qualitative>
    <direction>-1</direction>
    <user_managed>false</user_managed>
    <val_type>INT</val_type>
    <hidden>false</hidden>
    </metric>
    </metrics>
  2. Fazendo uma consulta direto no dashboard do Sonar e capturando os identificadores dos indicadores que são expostos pela Web API.

Vamos montar a consulta para recuperar o Número de Linhas de Código e o Total Quality e depois montar a requisição com o ncloc que já conhecemos e o Total Quality que é um indicador customizado.

Acessando a dashboard do Sonar, e logado com o usuário Admin, (login e senha "admin", lembra ? caso não se lembra, não deixe de ver o post "Configurando visualizações do Sonar") será exibido no menu o link para "measure", clique nele para acessarmos um gerador de consultas do Sonar. Pode acessar diretamente o link também:
http://localhost:9000/measures

Preencha o filtro de pesquisa com Projetos e adicione os dois indicadores (metrics) Lines os Code e Total Quality, como na imagem abaixo e clique em Search:

Filtro de pesquisa preenchido

A busca vai gerar o link abaixo na barra de endereço do navegador. Repare que nos trechos em negrito, já temos o que precisamos, que é os identificadores dos indicadores que queremos.
http://localhost:9000/measures/search?qualifiers%5B%5D=TRK&baseId=&c3_metric=ncloc&c3_period=&c3_op=gt&c3_val=0&c2_metric=total-quality&c2_period=&c2_op=gt&c2_val=0&search=Search

Com os identificadores expostos fica fácil gerar nossa query pela API:
http://localhost:9000/api/resources?metrics=ncloc,total-quality
<resources>
<resource>
<id>1</id>
<key>my:SonarSnitch</key>
<name>Sonar Snitch</name>
<lname>Sonar Snitch</lname>
<scope>PRJ</scope>
<qualifier>TRK</qualifier>
<lang>cs</lang>
<version>1.0</version>
<date>2014-10-04T18:46:48-0300</date>
<creationDate>2014-10-04T18:46:48-0300</creationDate>
<msr>
<key>ncloc</key>
<val>1558.0</val>
<frmt_val>1.558</frmt_val>
</msr>
<msr>
<key>total-quality</key>
<val>71.7</val>
<frmt_val>71,7%</frmt_val>
</msr>
</resource>
</resources>

O Sonar Snitch que implementei utiliza além desse serviço o serviço TimeMachine que consegue analisar os indicadores a cada build disparada. Já conversamos sobre essa ferramenta nos posts "Meus primeiros passos no Sonar" e "Integrando indicadores com o Total Quality". Vamos conversar mais sobre essa ferramenta em posts futuros, mas basicamente ela usa 2 serviços o resources que já vimos e o timemachine que permite analisar todos os indicadores de cada inspeção realizada.

Complemento

A documentação completa dessa API encontra-se no link abaixo:
http://docs.codehaus.org/pages/viewpage.action?pageId=244875483


Espero que tenham se divertido tanto quanto eu, esse post vai servir de base para posts que mostrem como integrar o Sonar em outras aplicações e planilhas.

Um grande abraço a todos.

Atenciosamente,
Erick Ferreira Marques da Silva

segunda-feira, 6 de outubro de 2014

Configurando as visualizações do Sonar

Visualizações do Sonar

O Sonar possui dois tipos de visualizações, o Dashboard e a tela de detalhes.

Dashboard

O Dashboard é a tela que lista projetos (os sistemas são tratados no Sonar como projetos), seus componentes são configurados para consultas, e possuem dois principais componentes.

Lista

Como o nome diz, é uma lista de projetos, você define uma consulta e escolhe os indicadores que serão exibidos para cada projeto na lista.
Lista de Projetos exibindo nome, linhas de código, adequação as regras e data de inspeção

Treemap

É um gráfico de projetos que combina dois indicadores, você define uma consulta e escolhe somente dois indicadores para serem representados, um indicador é apresentado referenciando o tamanho do projeto do gráfico (quanto maior mais aderente), e outro é pela cor que varia de vermelho a verde (quanto mais verde mais aderente).

Treemap exibindo por tamanho linhas de código e por cor adequação às regras

Exemplo

Vamos seguir um exemplo passo a passo e criar uma lista para filtrar projetos por linguagem. Para isso primeiramente vamos precisar acessar o Sonar como uma conta de Administrador. Vamos conversar em um post futuro sobre controle de acesso do Sonar. Mas nesses primeiros passos o Sonar já carrega um usuário Administrador por padrão e vamos conectar nele.

No canto direito superior da tela está o botão de login, bem próximo a barra de pesquisa. Clique nele para acessar a tela de login.

Acesso ao login do Sonar

Na tela de login, informe login e senha "admin" e clique em "Log In" para acessar o Sonar.

Tela de Login

Depois de logar no Sonar, seu usuário é exibido onde estava o botão de Log in.

Menu superior direito depois de logado

Na tela inicial onde são listados os projetos clique no botão "Configure widgets" para configurarmos nossa nova lista de projetos com filtro. Procure o componente "Measure Filter as List" e clique em "Add widget".
Componentes que podem ser exibidos no dashboard de projetos

Configuração da listagem

 Após incluir o componente de listagem, precisamos definir o filtro que será utilizado, vamos criar um filtro chamado "Projetos C#", limitando os projetos para a linguagem C# e incluindo na exibição o Total Quality.
Lista de filtros cadastrados

Utilize o menu lateral na esquerda para configurar a consulta, para a pesquisa selecione Projetos e para o campo critérios selecione "Language" e clique novamente no campo serão exibidas opções para C# e Java, selecione C# e clique em "Search".

Filtro de projetos C#

Vamos incluir o campo Total Quality na listagem, selecione o campo "Change Columns", selecione na combo a opção Total Quality e mantenha o Value selecionado para exibir o valor do campo. Clique em "Add Column" para incluir a nova coluna.

Incluindo o Total Quality na lista

Clique nas setas laterais para definir a ordem das colunas, basta clicar na seta até a coluna Total Quality ser exibida após o nome do projeto.

Ordenado as colunas para o Total Quality ser o primeiro indicador

Filtro configurado

Agora vamos salvar o filtro dando o nome Projetos C#.

Salvando o filtro Projetos C#

Filtro salvo e configurado

Agora que temos o filtro salvo, vamos selecionar o filtro no componente de listagem de projetos e clicar em Save. Pronto, nossa listagem de projetos em C# está configurada e podemos ver nossa lista na tela inicial do Sonar no primeiro Dashboard.

Voltando para o componente de lista e selecionando o filtro Projetos C#

Filtro configurado

Dashboard configurado com a nova listagem de projetos C# exibindo o Total Quality

Atenção: Essa lista tem uma limitação que é o nome que aparece no componente é o nome do filtro.

Tela de Detalhes

Ao selecionar um projeto no dashboard acessamos a tela de detalhes do mesmo. Nessa tela vemos vários componentes, cada componente representa um ou mais indicadores e assim como instalamos o componente Total Quality no post "Integrando indicadores do Sonar com o Total Quality", podemos incluir vários outros componentes customizados.

Indicador de linhas de código

Indicador de violações de código

Indicador de comentários

Indicador de código duplicado

Indicador de complexidade de código

Agora vamos instalar  o componente Total Quality novamente, fazendo o passo a passo e vendo dicas de como configurar nossa tela de detalhes.

Ainda logado como um usuário Administrador e acessando a tela de detalhes do projeto, clique no botão "Configure Widgets".

Menu superior direito após log in

Na tela de configuração dos componentes (widget) podemos ver a lista de todos os componentes registrados no Sonar, mesmo os customizados, como o Total Quality que instalamos. Desça a barra de rolagem na lista de componentes até localizar o Total Quality, como vemos nas imagens abaixo:


Lista de componentes instalados no Sonar

Adicionando o Total Quality no Dashboard

Podemos fazer mais uma configuração na tela que é indicar o número de colunas e seu posicionamento, no menu a direita podemos ver uma lista de quadrados que indicam como serão apresentadas as colunas.

Podemos também ajustar o posicionamento dos componentes da forma que quisermos arrastando e soltando os painéis dos componentes. Quando terminar de montar sua tela de detalhes com os componentes que quiser, basta clicar em "Back to dashboard", o Sonar vai salvar suas configurações e essa tela será exibida em todos os projetos exibidos no Sonar.

Por exemplo, ao selecionar as 3 colunas a tela vai se ajustar para apresentar os componentes em 3 colunas, depois vamos arrastar alguns componentes para a terceira coluna para nivelar as colunas, como nas imagens abaixo.

Configuração da terceira coluna

Dashboard configurado apresentando informações de um projeto


Pronto, finalmente terminamos com todas as configurações de visualizações para o Sonar, não deixe de explorar e aprender novos componentes e estudar aqueles que te atendem da melhor forma. Não deixem de conferir os próximos posts para conhecer cada vez mais componentes e boas práticas do Sonar para escrevermos sistemas com cada vez mais qualidade.

Um grande abraço a todos.

Atenciosamente,
Erick Ferreira Marques da Silva

sábado, 4 de outubro de 2014

Inspecionando sistemas com o Sonar Runner

Sonar Runner

O Sonar Runner é o programa que realiza a inspeção nos nossos sistemas e registra os resultados no Sonar. Já tivemos o primeiro contato com essa ferramenta no post "Meus Primeiros Passos no Sonar". E vimos no post "Configurando o Banco de Dados no Sonar" como configurar um banco de dados definitivo para o Sonar, agora precisamos ajustar a configuração do Sonar Runner que fizemos no primeiro post para que ele possa conectar nesse banco.

Para isso vamos abrir o arquivo de configuração "\sonar-runner-2.4\conf\sonar-runner.properties".

Localize a linha:
#----- H2
sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar

e comente o banco H2.
#sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar

Assim desligamos o banco H2 e agora vamos configurar o mesmo banco de dados que escolhemos seguindo o post "Configurando o Banco de Dados do Sonar".

Localize a linha abaixo para configurar o usuário e senha do banco:

#----- Global database settings
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

Depois basta procurar a linha do seu banco de dados desejado, descomentar e configurar:

#----- MySQL
#sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8

#----- Oracle
#sonar.jdbc.url=jdbc:oracle:thin:@localhost/XE

#----- Microsoft SQLServer
#sonar.jdbc.url=jdbc:jtds:sqlserver://localhost/sonar;SelectMethod=Cursor

Como estou usando a instancia do MySQl vou descomentar esse banco e configurar.

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonardev?useUnicode=true&amp;characterEncoding=utf8

Depois de configurar o banco do Sonar Runner posso executar o sonar.bat que criamos no post "Meus Primeiros Passos no Sonar" novamente.
Sonar exibindo o Sonar Snitch após inspeção

Espero que tenham gostado, nesse ponto já temos o Sonar configurado para que possa ser usado corporativamente. Mas dicas de como estruturar o Sonar na sua organização é assunto para outra história... 

Um grande abraço a todos e aguardem novidades.

Atenciosamente,
Erick Ferreira Marques da Silva

quinta-feira, 2 de outubro de 2014

Configurando o Banco de Dados do Sonar (Oracle, SQL Server e MySQL)

Configurando o Sonar

No post Meus primeiros passos com o Sonar aprendemos como instalar e configurar o servidor de inspeção contínua Sonar. Aprendemos como inspecionar uma aplicação e gerar indicadores de qualidade.

No exemplo utilizamos o banco H2 que vem embutido no Sonar, esse banco não aceita conexões remotas o que o torna inviável para utilizar no dia a dia. Mesmo se você for utilizá-lo no dia a dia, somente na sua máquina, vai notar que depois de alguns dias de inspeções o servidor vai ficar muito lento, essa lentidão é por causa do banco de dados e para tratar disso vamos precisar escolher uma instância de banco de dados definitiva.

O Sonar suporta diversos bancos de dados, como SQL Server, Oracle e MySQL, dentre outros. Nesse post vamos focar nesses 3 principais bancos de dados Oracle, SQL Server e MySQL e mostrar como configurar, passo a passo, o Sonar em cada um desses bancos.

Procedimento para Banco de Dados

Instalar o banco do dados do Sonar é bem simples e segue o mesmo procedimento tanto no Oracle, quanto no SQL Server. Eu realmente acredito que seja o mesmo procedimento para o MySQL, mas não testei ainda.

Primeiro, crie um schema de banco de dados vazio no SGBD (Sistema de Gerenciamento de Banco de Dados) desejado.

Segundo, configure um usuário com permissões de executar DDL (Data Definition Language) no schema criado.

Terceiro, configure o charset do banco de dados para "UTF-8" e a linguagem padrão (do banco e usuário) para "English" (Inglês).

Quarto, configure o arquivo ".\sonar-3.7.4\conf\sonar.properties".

Vamos configurar o usuário que criamos no segundo passo, para isso localize no arquivo a parte de credenciais, como está no exemplo abaixo e configure o usuário e senha.

#----- Credentials
# The schema must be created first.
sonar.jdbc.username: sonar
sonar.jdbc.password: sonar

Depois procure no arquivo a configuração para o banco H2 que configuramos no artigo de primeiros passos e comente a linha "sonar.jdbc.url" que está no exemplo abaixo:

#----- Embedded database H2
# Comment the following line to deactivate the default embedded database.
sonar.jdbc.url: jdbc:h2:tcp://localhost:9092/sonar

Para comentar a linha basta colocar o jogo da velha (#) ficando como o exemplo abaixo:
#sonar.jdbc.url: jdbc:h2:tcp://localhost:9092/sonar

Configurando o Oracle

Ainda com o arquivo sonar.properties aberto localize o trexo abaixo:

#----- Oracle 10g/11g
# To connect to Oracle database :
#
# - It's recommended to use the latest version of the JDBC driver (ojdbc6.jar).
#   Download it in http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
# - Copy the driver to the directory extensions/jdbc-driver/oracle/
# - Comment the embedded database and uncomment the following line :
#sonar.jdbc.url:                            jdbc:oracle:thin:@localhost/XE

Vamos descomentar a linha sonar.jdbc.url e configurar o banco de dados, ficando como o exemplo abaixo:
sonar.jdbc.url: jdbc:oracle:thin:@localhost/XE
sonar.jdbc.url: jdbc:oracle:thin:@//servidor:1521/instância

Dica: A configuração thin para o Oracle dispensa a configuração do TNS, nela já são indicados servidor, porta e instância. Porém ainda é necessário que a máquina possua o Client do Oracle instalado e funcionando. Ao especificar a porta na configuração pode ser necessário incluir as duas barras "//", como no segundo exemplo.

Continuando a configurar o arquivo...

# Uncomment the following property if the Oracle account has permissions to access multiple schemas,
# for example sonar schemas with different versions. In that case, use the same property during project analysis
# (-Dsonar.jdbc.schema=<schema>)
# The schema is case-sensitive.
#sonar.jdbc.schema: sonar

Vamos descomentar e configurar o schema que criamos no primeiro passo.
sonar.jdbc.schema: sonarBD

Atenção: Para evitar dores de cabeça depois de criado o banco no Oracle, fique atento com o TableSpace, ao analisar projetos maiores, constantemente o Oracle pode cair apresentando erro de falta de espaço no TableSpace, depois do banco ter sido criado a primeira vez, é importante aumentar o valor default dele, se não me engano no Oracle 11G era de 10mb, recomendo que ela seja setado para auto incremento para não ter dores de cabeça, ou para o tamanho máximo que ele suporta, não lembro se era 2gb ou 4gb, caso o DBA da infraestrutura da sua empresa não permita o TableSpace auto incremental.

Pronto, nosso banco no Oracle foi configurado com sucesso. 

Configurando o SQL Server

Ainda com o arquivo sonar.properties aberto localize o trexo abaixo:

#----- Microsoft SQLServer
# The Jtds open source driver is available in extensions/jdbc-driver/mssql. More details on http://jtds.sourceforge.net
#sonar.jdbc.url:                            jdbc:jtds:sqlserver://localhost/sonar;SelectMethod=Cursor

Vamos descomentar a linha sonar.jdbc.url e configurar a instância que criamos no primeiro passo.
sonar.jdbc.url: jdbc:jtds:sqlserver://localhost/sonarBD;SelectMethod=Cursor

Para conectar no SQL Server em máquina remota utilize a linha abaixo:
sonar.jdbc.url: jdbc:jtds:sqlserver://servidor:porta/sonarBD;SelectMethod=Cursor

Atenção: O Sonar possui as seguinte limitações para o SQL Server: o provider de conexão para o SQL Server não suporta ainda o SQL Server 2014 (versão que vem junto do Visual Studio 2013); para conectar no banco ele deve estar configurado em named pipe, isso significa que seu banco deve estar registrado em um servidor com acesso remoto, mesmo para a configuração localhost.

Para conectar no SQL Server do Azure (o usuário precisa indicar o servidor):
sonar.jdbc.username=<username>@SERVER
sonar.jdbc.password=<password>
sonar.jdbc.url=jdbc:jtds:sqlserver://SERVER.database.windows.net:1433/DATABASE;ssl=require;SelectMethod=Cursor

Atenção: O SQL Server no Azure tem um problema de geração de script, onde será necessário gerar uma instância local, conectar o sonar nessa instância para gerar o script e depois fazer um deploy do seu banco para o Azure.

Pronto, nosso banco no SQL Server (local, remoto ou no Azure) foi configurado com sucesso.


Configurando o MySQL

Ainda com o arquivo sonar.properties aberto localize o trexo abaixo:

#----- MySQL 5.x
# Comment the embedded database and uncomment the following line to use MySQL
#sonar.jdbc.url:                            jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

Vamos descomentar a linha sonar.jdbc.url e configurar nossa instância de banco.
sonar.jdbc.url: jdbc:mysql://localhost:3306/sonardev?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

Pronto, nosso banco no MySQL foi configurado com sucesso.

Vamos testar?

Abra a pasta .\sonar-3.7.4\bin\windows-x86-32 e execute o arquivo StartSonar.bat

Ao conectar no banco de dados configurado, o Sonar vai configurar toda a estrutura do banco de dados e fazer a carga inicial de informações necessárias para sua execução, caso ele identifique que está mudando a versão do Sonar ele também fará todas as atualizações automaticamente.

Caso não apareçam problemas de configuração de banco ou restrições de infra estrutura, o console será mantido aberto informando que está ativo e monitorando a porta 9000. Pode ser que a atualização do banco de dados demore, mas depois que ele consegue conectar não tive problema nas instalações.
Serviço do Sonar inicializado

Depois ao acessar o dashboard será exibida a tela inicial do Sonar vazia sem nenhum projeto. Não se esqueça, suas medições anteriores ficaram no banco de dados H2.
Dashboard do Sonar inicializado pela primeira vez

Conclusões

Definir em qual banco vou instalar o Sonar vai depender do gosto ou necessidade do cliente. Se estiver fazendo isso em casa como eu fiz para testar, não pense duas vezes, o MySQL foi o mais simples e rápido para configurar, é impressionando como tudo funcionou de primeira, a instalação fiz com o MySQL 5.6 foi super tranquila e rápida, depois foi só criar o Schema para o Sonar que chamei de sonardev configurado para encode UTF-8 e depois criei o usuário "sonar" tudo isso auxiliado pela ferramenta MySQL Workbench.

Para o Oracle ou SQL Server se sua empresa tiver disponível, use e abuse, a performance do banco no servidor é muito superior a instalação que vai ficar na máquina. Não quero menosprezar o MySQL que eu gostei muito, mas não o recomendaria para um servidor de produção do Sonar pois ainda desconheço os problemas que ele pode apresentar, mas sei que a taxa de crescimento para o banco é muito alta, a cada projeto incluído, principalmente projetos grandes, vai demandar muito da base de dados. Acredite ela cresce vertiginosamente. 

O Sonar não guarda só os resultados dos indicadores no portal, mas também todo o seu código fonte. Quando você for analisar as violações geradas pelo Sonar, ele vai te mostrar o seu código fonte e dizer, encontrei essa violação nessa linha, que tem esse comando e para corrigir faça isso. É simples para nós usuários do dashboard, mas é uma análise muito complexa por parte da ferramenta. Todas as visões baseadas no código fonte poderão ser mapeadas pelo Sonar diretamente no fonte, como Cobertura de Testes Unitários, código duplicado, métodos públicos sem comentários, enfim, isso tudo é para destacar como a base de dados é importante e o quanto ela vai crecer.

Confesso que fiquei um bocado desiludido com as limitações do Sonar no SQL Server, espero que com atualizações isso simplifique, mas hoje tá muito complicado, levei dias para configurar uma estrutura de teste em minha máquina.

Espero que tenham se divertido tanto quanto eu, pois foi um post bem complicado e desafiador.

Um grande abraço a todos e até a próxima.

Atenciosamente,
Erick Ferreira Marques da Silva

domingo, 28 de setembro de 2014

Série Componentes - Bootstrap Confirm

Bootstrap Confirm

O Bootstrap Confirm é um componente para interface que permite gerar pop-ups de confirmação de forma simples, rápida e elegante. Ele transforma um link em um botão de confirmação apresentando botões de confirmação e cancelamento. O botão de cancelamento, cancela a requisição e fecha a janela, o botão de confirmação redireciona o usuário para o endereço do link.

O autor é o EThaiZone e o componente pode ser baixado no link abaixo:
http://ethaizone.github.io/Bootstrap-Confirmation/

Esse componente possui toda a documentação e exemplos no site, porém ele só funciona no Bootstrap 2, foi feito um fork do projeto pelo Tavicu para funcionar no Bootstrap 3. O procedimento é o mesmo, só o script do bootstrap confirmation deve ser baixado do link abaixo:
https://github.com/Tavicu/bootstrap-confirmation/

Veja na imagem abaixo como são apresentadas as mensagens de confirmação:
Podemos ver a pop-up de confirmação sendo exibida de diversas formas

Seu uso é bastante simples e precisamos somente incluir a referência do script "bootstrap-confirmation.js" depois dos scripts do Jquery e Bootstrap. Depois disso, basta decorar os links onde quisermos incluir a confirmação e chamar um javascript para carregar as janelas.

Exemplo:

Vamos ver de exemplo o botão excluir de uma tela de projetos, veja os elementos:

Botão

<a href="/Projeto/Delete/1" class="btn btn-outline btn-danger" title="Deseja realmente excluir o projeto?" data-toggle="confirmation" data-singleton="true" data-popout="true"><i class="fa fa-trash-o fa-fw" title="Excluir o projeto"></i></a>

Os campos em negrito são as configurações para o componente. Esse botão será exibido somente como um ícone e quando clicado vai exibir a janela de confirmação.

Botões na tela

Tela de confirmação

Atenção: O title do link será usado para o texto da confirmação, caso queira continuar a exibir um hint no botão antes dele ser clicado como aparece na imagem é necessário usar o title de algum elemento dentro do botão, no exemplo acima incluímos o title dentro da imagem do ícone.

Script

$('[data-toggle="confirmation"]').confirmation({ btnOkLabel: "&nbsp;Sim", btnCancelLabel: "&nbsp;Não" });

Atenção: O texto dos botões por padrão é "Yes" e "No", só por script funciona a alteração do texto dos botões. Isso é importante pois se alterarmos direto o script teremos dificuldade em aplicar globalização nos controles, com isso podemos trocar a linguagem dos botões sem preocupações.

Mãos a obra

Veja no fiddle como fica na vera esse componente e teste as opções do componente.

Conclusão

Esse é um componente bastante legal e fácil de ser usado. Esse é visualmente agradável e bastante intuitivo. Também se ajusta a qualquer template do bootstrap que esteja usando. Vale a pena ver e conhecer.

Agradeço a atenção e espero que tenham se divertido.

Atenciosamente,
Erick Ferreira Marques da Silva

domingo, 21 de setembro de 2014

Integrando indicadores do Sonar com o Total Quality

Total Quality

O Total Quality é um componente para o Sonar que gera um indicador de qualidade para o sistema, como comentei em nossa página de Qualidade de Software, ele gera uma nota única que representa a média de diversos indicadores para o sistema. Essa nota é configurável por uma formula que leva em conta 4 indicadores de qualidade:

  • Architecture: esse indicador de arquitetura não sei se é usado para aplicações .NET, pois nunca vi descer de 100%, em aplicações Java ele considera níveis de acoplamento e complexidade ciclomática acumulada.
  • Design: também não varia muito, dificilmente está em 100%, mas sei que ele leva em consideração algumas violações de código que são classificadas como de Design.
  • Test: diretamente ligado a cobertura de código com testes unitários e automatizados.
  • Code: diretamente ligado a violações, duplicidade e comentários.

Através dele podemos rankear os sistemas com base nesse indicador de qualidade e através de ferramentas como o Sonar Snitch podemos monitorar constantemente as alterações no indicador.

Para instalar o plugin acesse o link abaixo e faça o download da versão mais atual.

http://docs.codehaus.org/display/SONAR/Total+Quality+Plugin

Depois de fazer o download do arquivo sonar-total-quality-plugin-1.1.jar vamos copiar ele para a pasta extensions/plugins do sonar conforme imagem abaixo:
Total Quality na pasta de plugins do Sonar

Pronto, o Total Quality já está configurado no Sonar, agora basta iniciar o servidor e a cada nova inspeção realizada esse indicador será calculado e armazenado. Importante, caso seu servidor já esteja ativo, será necessário reiniciar o Sonar para que esse plugin seja iniciado.
Iniciando o Servidor do Sonar

Importantes observações

O Sonar só vai calcular os indicadores para o Total Quality nas próximas inspeções de código, ele não vai gerar dados retroativos.

Tela de detalhes do projeto antes da configuração

É preciso configurar o painel do Sonar para exibir o indicador de Total Quality, para isso basta se logar como administrador no sonar, caso ainda não tenha mudado, login e senha são "admin", acesse a tela de detalhes do projeto, como vimos no post de configuração do Sonar e clique no botão "Configure Widgets".

Tela de detalhes do projeto durante configuração

No campo Search digite Total e no componente Total Quality que aparece na tela basta clicar no botão "Add Widget", com isso será exibido um novo painel com o indicador Total Quality mais os 4 indicadores de qualidade que comentei no início do post. Todos os blocos podem ser movidos (arrastando e soltando), configurados (link"Edit") ou excluídos (link "Delete") nessa tela. 

Detalhes do projeto após a configuração.

Atenção, só administradores tem acesso a ela e depois de configurada, todos os sistema serão exibidos da mesma forma.

Por último, o Sonar Snitch já está configurado para esse plugin.tanto na visão resumida quanto na visão detalhada.
Sonar Snitch - Visão Resumida

Sonar Snitch - Visão Detalhada - Parte 1

Sonar Snitch - Visão Detalhada - Parte 2


Desde já agradeço a atenção de todos e espero que tenham se divertido configurando o Sonar. Aguardem por novidades em breve. Um grande abraço a todos.

Atenciosamente,
Erick Ferreira Marques da Silva