Blog

Como configurar o Sonarqube (Sonar)


O Sonarqube, anteriormente conhecido como apenas Sonar, é uma ferramenta capaz de gerenciar a qualidade do código desenvolvido sobre uma série de aspectos, e ainda, indicar melhores práticas para desenvolvimento de determinada funcionalidade.

A ferramenta possui suporte a muitas linguagens como C#, Java, PHP, Python, JavaScript, PL/SQL, C/C++, entre muitas outras. Ela atua oferecendo relatórios onde são apresentados caso de duplicação de código, práticas fora do padrão de desenvolvimento, testes unitários, complexidade de métodos, codificações propensas a falhas (bugs), comentários contendo lixo, arquitetura mal planejada, entre outros.

Ainda é possível utilizar o Sonarqube associado a outras ferramentas de automatização como o Jenkins, que garantem a integração continua dos testes com o desenvolvimento através do controle do versionamento em ambientes como o SVN, tornando o processo mais gerenciável e simples. Além disso, a configuração do Sonarqube é muito simples e pode ser feita em poucos minutos.

Para a instalação e configuração do aplicativo será preciso inicialmente fazer download e instalação do Sonarqube e das ferramentas necessárias para a configuração do mesmo.

  1. Java Development Kit (JDK)
  2. Sonarqube 4.5
  3. SonarRunner 2.4
  4. FxCop 10 (apenas projetos .NET)
  5. Gallio Bundle 3.4.14.0 (apenas projetos .NET)
  6. OpenCover 4.5.3207

O Sonarqube deve ser extraído do arquivo zip e copiado para um destino como o "C:\". O SonarRunner deve ser extraído e copiado para dentro da pasta do Sonarqube. As demais instalações serão feitas por instaladores automáticos que dispensam explicações, porém, deve-se manter todas as definições de instalação no valor padrão (no diretório padrão de instalação).

Configuração do SonarRunner

Ainda será preciso realizar algumas configurações para que tudo funcione corretamente, siga os passos abaixo:

1 - Crie ou edite as 3 seguintes variáveis de ambiente:

  • JAVA_HOME = Coloque o endereço do JDK
  • SONAR_RUNNER_HOME = Coloque o endereço do SonarRunner
  • PATH = Acrescente ao fim da variável que já existe um ponto e virgula, seguido do endereço da pasta "bin" dentro da pasta do SonnarRunner

2 - Crie um arquivo chamado "sonar-project.properties" na raiz da pasta do projeto com o conteúdo seguinte:

# identificação do projeto
sonar.projectKey=NOME_DO_PROJETO
sonar.projectVersion=1.0
sonar.projectName=NOME_DO_PROJETO
# Informações de configuração sonar.sources=. sonar.language=cs sonar.sourceEncoding=UTF-8
# Ativa o Visual Studio bootstrapper (apenas projetos .NET) sonar.visualstudio.enable=true

O campo "sonar.language" deverá conter a linguagem de programação utilizada no projeto (cs, php, java...).

Este arquivo deve ser adicionado na pasta raiz do projeto. Caso esteja utilizando SVN o arquivo deve ser adicionado junto ao projeto, permitindo assim a integração futura com o Jenkins (Como configurar o Jenkins integrado ao Sonarqube e SVN).

Inicialização do Sonarqube

Após realizar todas as configurações é preciso iniciar o serviço do Sonarqube e instalar todos os plugins necessários para o funcionamento do aplicativo. Para iniciar o serviço, deve-se ir até o diretório de instalação do mesmo, acessar o diretório "bin" e, em seguida, acessar o diretório que corresponda ao sistema operacional em uso, como por exemplo o "windows-x86-32" e então executar o arquivo "StartSonar.bat". Ao fim da inicialização do servidor já será possível acessar a página do sonar em "localhost:9000" ou utilizando o endereço correspondente. É muito importante atentar-se ao fato de que a versão do Sonarqube e dos demais aplicativos deve ser a mesma do servidor a ser iniciado, sendo então que, caso o sistema operacional seja 64 bits mas os aplicativos instalados foram 32 bits, deve-se iniciar o servidor 32 bits. Todos os links disponíveis neste artigo são para as versões 32 bits dos aplicativos, pois talvez não exista uma versão 64 bits para todos os aplicativos e, neste caso, deve-se usar a mesma versão 32 bits.

Para cada linguagem a ser utilizada será preciso adicionar os seus plugins especificos que devem ser baixados diretamente pelo aplicativo. Acesse a parte administrativa do Sonarqube com o usuário "admin" e a senha "admin" (que deve ser alterada posteriormente) e  clique em "Update Center" e, em seguida, em "Available Plugins", para então encontrar os diversos plugins disponíveis. Atente-se ao fato de que, caso sua rede possua proxy, você precisará configura-lo no arquivo de configuração do Sonarqube para então prosseguir com os downloads e atualizações. Ainda assim, em alguns casos, devido a restrições permissivas no proxy, será preciso fazer download dos arquivos "*.hpi" que se encontram na mesma página e efetuar a instalação manualmente através da guia de "Plugins Update".

Ainda poderão ser baixados outros plugins que se adequem a alguma necessidade não apresentada neste artigo, mas que não é obrigatória para o funcionamento básico do serviço.

Quando todos os plugins estiverem instalados, já será possível executar o SonarRunner para gerar os dados e, posteriormente, visualiza-los no Sonarqube. Para isso será preciso abrir o Prompt de Comando (cmd), navegar até a pasta do projeto a ser processado e executar o comando "sonar-runner". Após a finalização deste processo já será possível visualizar o resultado sobre a forma de relatórios e gráficos.
Finalização
Após ter realizado toda a configuração, executado os processos de captura de informações e geração de dados, temos o ambiente básico configurado e, então, deve-se partir para a definição de uma base de dados em um SGDB para a aplicação e customização das regras e padrões de testes e validações. Caso você não tenha alterado a porta padrão do Sonarqube será possível acessar o serviço a partir do endereço http://localhost:9000/.



Sonar Sonarqube Jenkins Tutorial Windows

Hello World 2


Olá a todos!


Neste novo blog teremos novos artigos ainda mais interessantes. Espero agrada-los com esta nova plataforma e com minha nova forma de entregar conteúdo.

Não deixem de acompanhar minha agenda de eventos para estar por dentro das próximas faculdades em que ministrarei algum treinamento.

Obrigado!

João Felipe Portela

Blog Novidade 2014 2015

Formatar String com C#


Ao exibir informações de datas, valores numéricos, valores customizados como cpf, cnpj, cep, rg, entre outros, é importante definir uma formatação adequada ao valor. Existem formatos que o .net já possuí configuração pré-definida para se ajustar conforme a "cultura", conforme exemplos a seguir:


Especificador

Tipo

Formato

Saída (Ex.: Tipo double 1.2345)

Saída (Ex.: Tipo int -12345)

c Currency (Moeda) {0:c} £1.23 -£12,345.00
d Decimal {0:d} System.FormatException -12345
e Exponencial / Formatação científica {0:e} 1.234500e+000 -1.234500e+004
f Ponto fixo {0:f} 1.23 -12345.00
g Generalizada {0:g} 1.2345 -12345
n Numérica {0:n} 1.23 -12,345.00
r Arredondado {0:r} 1.23 System.FormatException
x Hexadecimal {0:x4} System.FormatException ffffcfc7

Existem formatos customizados que permitem trabalhar de forma mais flexível, atendendo a desenvolvedores que precisam definir um formato para seu próprio uso:

Especificador

Tipo

Formato

Saída (Ex.: Tipo double 1234.56)

0 Completar com zeros {0:00.000} 1234.560
# Máscarar um número {0:#.##} 1234.56
. Posicionar o separador de decimal {0:0.0} 1234.6
, Posicionar o separador de milhar {0:0,0} 1,235
% Porcentagem {0:0%} 123456%

Um dos tipos de formatação mais usados é o de data, que por sua vez permite uma série de configurações, podendo apresentar diferentes posições de Dia, Mês e Ano, em formato reduzido, médio ou longo, com ou sem a hora entre outras definições mais específicas para Data e Hora:

É importante notar que a apresentação das datas variam conforme a Cultura (CultureInfo) definida. Para o padrão brasileiro ("pt-BR") temos o seguinte comportamento:

Especificador

Tipo

Saída (Ex.: 19 de Setembro de 1980 14:30:59)

d Data curta 19/09/1980
D Data long 19 Setembro 1980
t Hora Curta 14:30
T Hora Longa 14:30:59
f Data e Hora 19 Setembro 1980 14:30
F Data e Hora completo 19 Setembro 1980 14:30:59
g Data de Hora padrão 19/09/1980 14:30
G Data de Hora padrão longo 19/09/1980 14:30:59
M Dia / Mês 19 Setembro
r RFC1123 date string Sex, 19 Set 1980 14:30:59 GMT
s Sortable data/hora 1980-09-19T14:30:59
u Hora Universal, Timezone local 1980-09-19 14:30:59Z
Y Mês / Ano Setembro 1980

Na tabela abaixo é possível ver como formatar uma data de forma customizada:

Especificador Tipo Saída (Ex.: Setembro 19, 1980 14:30:59)
dd Dia 19
ddd Nome curto do dia Sex
dddd Nome completo do dia Sexta-feira
hh 2 dígitos para a hora 02
HH 2 dígitos para a hora (24 horas) 14
mm 2 dígitos para o minuto 30
MM Mês 09
MMM Nome curto do Mês Set
MMMM Nome do Mês Setembro
ss Segundos 59
tt AM/PM PM
yy 2 dígitos do Ano 80
yyyy 4 dígitos do Ano 1980
: Separador, ex. {0:hh:mm:ss} 14:30:59
/ Seperator, ex. {0:dd/MM/yyyy} 08/06/1970

(Este artigo foi atualizado em 08/01/2017)

C# .net

Remover acentos de strings em C#


Para remover acentos de strings em C# pode-se usar o simples método abaixo:

public string RemoverAcentos(this string texto)
{
    if (string.IsNullOrEmpty(texto)) 
    {
        return String.Empty;
    }
    else
    {
        byte[] bytes = System.Text.Encoding.GetEncoding("iso-8859-8").GetBytes(texto);
        return System.Text.Encoding.UTF8.GetString(bytes);
    }
}


O método deve ser usado da seguinte forma:

string nome = "João Felipe Portela";
string nomeSemAcentos = nome.RemoverAcentos();

C#

Exportar dados de uma tabela para o formato Excel (xls)


Exportar dados de uma tabela para um arquivo excel (xls) utilizando o .NET Framework é algo muito simples. Para tanto será preciso apenas criar uma estrutura de consulta ADO.NET utilizando um "SqlDataReader", e uma estrutura de escrita em arquivo utilizando a classe "StreamWriter". No exemplo abaixo pode-se observar uma possível situação:

 
// Prepara o arquivo xls para escrita
using (StreamWriter sw = File.CreateText(@"c:\arquivo.xls"))
{
    try
    {
        SqlConnection conn = new SqlConnection("Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;");
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE_X", conn);

        // Abre a conexão
        cmd.Connection.Open();

        // Cria o SqlDataReader 
        System.Data.SqlClient.SqlDataReader dr = cmd.ExecuteReader();

        // Varre a tabela e alimenta o arquivo xls linha a linha
        while (dr.Read())
        {
            sw.WriteLine(dr["COLUNA_A"].ToString() + "\t" +
                         dr["COLUNA_B"].ToString() + "\t" +
                         dr["COLUNA_C"].ToString() + "\t" +
                         dr["COLUNA_D"].ToString());
        }

        // Fecha a conexão
        cmd.Connection.Close();

        // Mensagem de sucesso
        MessageBox.Show("Arquivo gerado com sucesso.");
    }
    catch (Exception ex)
    {
        // Mensagem de exceção
        MessageBox.Show(ex.Message);
    }
}

C# Excel