sexta-feira, 12 de janeiro de 2024

Configurando o Projeto Delphi para o SonarQube

 


No post anterior expliquei como instalar e configurar o SonarQube com o plugin do Delphi. Neste post vamos configurar nosso projeto Delphi e realizarmos nosso primeiro scanner.

Criando Projeto no SonarQube

Acesse o SonarQube a partir do endereço http://localhost:9000 e em seguida clique na opção Criar um projeto localmente.

Em seguida deverá ser informado os dados do projeto, tais como: Display Name, Project Key e Branch Name. Dando um destaque no Project Key, é esse o camarada que devemos lembrar, pois vamos precisar para configurar o arquivo de scanner.

O próximo passo é referente a configuração. Como que o SonarQube tratará um novo código. Nesse caso, podemos marcar a primeira opção Use the Global Setting e clicar em Create Project.

Use the Global setting
Versão anterior
Qualquer código que tenha sido alterado desde a versão anterior é considerado código novo.
Recomendado para projetos que seguem versões ou lançamentos regulares.


Em Método de Análise escolheremos a opção localmente. Em outros vídeos demonstrarei como fazer a integração via GitLab (não percam).

A última etapa de configuração no SonarQube e não menos importante é Analise o seu Projeto. Nela vamos gerar um novo token (que será utilizado pelo sonar-scanner).
Após gerar o token (recomendo salvar em um local seguro), devemos escolher o tipo de projeto e o sistema operacional. Nesse caso podemos escolher Outras Opções e o S.O. Windows.








Ao chegar no final desse processo, copie o comando que o Sonar irá sugerir para nós. É ele que vamos configurar um .bat para rodarmos nossa primeira análise estática.

Exemplo: sonar-scanner.bat -D"sonar.projectKey=calculator" -D"sonar.sources=." -D"sonar.host.url=http://localhost:9000" -D"sonar.token=sqp_561ba0a6cde158b5215462abd0433e4f8011cb59"

Criando o Arquivo sonar-project.properties

Na raiz do seu projeto crie um arquivo com o nome sonar-project.properties. Esse arquivo conterá as configurações necessárias para que o SonarScanner possa realizar a análise estática.

Exemplo:

sonar.projectKey=calculator
sonar.delphi.codecoverage.tool=dcc
sonar.delphi.codecoverage.report=CodeCoverage/CodeCoverage/CodeCoverage_Summary.xml
sonar.testExecutionReportPaths=bin/TEST-dunitx-sqresults.xml

sonar.projectKey - Nome da chave que cadastramos nas primeiras etapas do SonarQube.
sonar.delphi.codecoverage.tool - Ferramenta a ser usada pelo CodeCoverage.
sonar.delphi.codecoverage.report - Arquivo de resumo da cobertura de testes do CodeCoverage.
sonar.testExecutionReportPaths - Arquivo de resultado dos testes gerado pelo DUnitX.









Ajustando Projeto de Testes do DUnitX

Antes de criar o arquivo .bat que irá scannear o nosso projeto, devemos realizar alguns ajustes no projeto de testes do DUnitX, são eles:

  • Adicionar o arquivo DUnitX.Loggers.XML.SonarQube.pas no projeto.
  • Importar a pasta do DUnitX da Embarcadero.
  • Importar as bibliotecas do Jedi
  • Adicionar diretiva de compilação CI
  • Adicionar pasta de fontes a ser analisada pelo SonarDelphi


O arquivo DUnitX.Loggers.XML.SonarQube.pas encontra-se no site oficial do GitHub da Embarcadero. O mesmo pode ser baixado e salvo na pasta da sua aplicação.

Em seguida deverá adicionar no library path o caminho da pasta do DUnitX da Embarcadero, a mesma pode ser encontrada em: C:\Program Files (x86)\Embarcadero\Studio\[versão]\source\DunitX

O arquivo do DUnitX que acabamos de importar da Embarcadero necessita de algumas bibliotecas do Jedi para funcionar corretamente. Essas bibliotecas podem ser baixadas diretamente do site do DephiCodeCoverage.
Devemos importá-las no library path:

DelphiCodeCoverage-master\3rdParty\JCL\Source\common   
DelphiCodeCoverage-master\3rdParty\JCL\Source\include
DelphiCodeCoverage-master\3rdParty\JCL\Source\include\jedi
DelphiCodeCoverage-master\3rdParty\JCL\Source\Windows

Para que o console da aplicação não fique questionando a iteração do usuário no momento de rodar os testes pelo CodeCoverage, devemos criar a diretiva de compilação CI em Options -> Delphi Compiler -> Condicional Defines.

E por fim no View Source do projeto de testes devemos informar quais são as pastas dos fontes da aplicação. Para isso crie um arquivo na raiz do projeto e informe as pastas onde encontram-se os fontes e em seguida implemente o código abaixo.




Criando Arquivo RunScannerSonar.bat

Agora chegou o momento de criarmos o arquivo para scannear o nosso projeto e enviar as informações ao SonarQube. Sabe aquele comando que você salvou na última etapa do SonarQube? É agora que iremos utilizá-lo.

Juntamente com o comando copiado, devemos executar a cobertura de teste pelo CodeCoverage para obtermos os relatórios de cobertura. Segue exemplo do arquivo RunScannerSonar.bat completo:

cd CodeCoverage
CodeCoverage.exe ^
  -e ..\bin\CalculadoraTests.exe ^
  -m ..\bin\CalculadoraTests.map ^
  -dproj ..\Calculadora.dproj ^
  -od CodeCoverage ^
  -emma ^
  -html ^
  -xml ^
  -xmllines ^
  -v
cd..  
sonar-scanner.bat -D"sonar.projectKey=calculator" -D"sonar.sources=." -D"sonar.host.url=http://localhost:9000" -D"sonar.token=sqp_561ba0a6cde158b5215462abd0433e4f8011cb59"

Ao salvar o arquivo e rodar o RunScannerSonar.bat, o mesmo deverá ser capaz de rodar o CodeCoverage e iniciar o SonarScanner. E no final do processo deverá ter algo semelhante as imagens abaixo:







E aí gostou? Comente o que achou. Nos próximos posts falarei mais sobre CI usando o SonarQube e como podemos automatizar esse processo.

Abaixo segue um vídeo de toda a configuração descrita.




Links
DelphiCodeCoverage
SonarDelphi
SonarScanner

quarta-feira, 10 de janeiro de 2024

Instalando o SonarQube com o Plugin para o Delphi

 


Em meados de 2022, a Embarcadero liberou um plugin para ser instalado no SonarQube. Com isso os projetos feitos em Delphi ganharam a possibilidade de integrar com essa poderosa ferramenta de análise estática de código-fonte.
Neste artigo trago de forma simples e direta como realizar a instalação do SonarQube juntamente com este plugin do Delphi.

Instalando o SonarQube

O SonarQube possui como pré-requisito o Java 17, para instalarmos podemos utilizar a distribuição JDK Temurin.
A instalação do Java não tem segredo (next, next, next e finish). Após a instalação ser concluída, certifique-se que o Java foi instalado com sucesso no sistema operacional, para isso execute no cmd o seguinte comando "java -version". Deverá listar a versão 17, conforme a imagem abaixo:


Com o Java instalado, agora é a hora de baixar e descompactar o SonarQube.
Acesse o site oficial e na página de downloads, escolha a versão Community Edition.
Descompacte na sua pasta de preferência, porém recomendo ser em: "C:\Utilitarios\sonarqube".

Antes de iniciarmos o SonarQube, devemos baixar e adicionar o plugin para trabalharmos com o Delphi.

SonarDelphi

O SonarQube não vem com a linguagem Delphi por padrão, infelizmente. Dessa forma devemos adicionar um plugin por fora. Para isso basta acessar o repositório oficial da embarcadero e baixar o plugin.

Uma vez baixado basta descompactar o arquivo sonar-delphi-plugin-1.0.8.jar em "C:\Utilitarios\sonarqube\extensions\plugins\".

Iniciando o SonarQube

Nesse momento chegou a hora de iniciarmos o SonarQube pela primeira vez e realizarmos algumas configurações. Para isso basta executar o arquivo StartSonar.bat, localizado em "C:\Utilitarios\sonarqube\bin\windows-x86-64\StartSonar.bat" pelo cmd (recomendo rodar como administrador).
Dependendo das configurações da sua máquina, pode levar cerca de 1 a 3 minutos para levantar o serviço. No final você terá uma imagem conforme abaixo:


Como acessar a ferramenta?

Com o serviço no ar, agora basta digitar no seu navegador o endereço http://localhost:9000/.
No primeiro acesso o usuário padrão será "admin" e a senha "admin" e em seguida será solicitado para realizar a troca.




Após aplicar a nova senha você será notificado sobre a inclusão de um novo plugin. Essa notificação é exibida, pois não instalamos o plugin do Delphi pelo Marketplace do SonarQube.


Nesse momento seu SonarQube já estará em operação (Sucesso!!!).

Agora vamos apenas certificarmos que o nosso plugin foi instalado corretamente. Acesse o menu Rules e no submenu Language pesquise por Delphi, deverá exibir as 43 regras implementadas pelo plugin da Embarcadero.


Instalando o SonarScanner CLI

Para finalizarmos essa etapa de instalações, devemos instalar o SonarScanner CLI. É um utilitário do SonarQube. Como o próprio nome diz, ele realizará um scanner do nosso código-fonte e enviará as métricas para o SonarQube.

Para instalar, basta baixar o SonarScanner e descompactar em "C:\Utilitarios\sonarscanner", depois disso adicionar a pasta "C:\Utilitarios\sonarscanner\bin" no path do windows.


Para termos a certeza que o Scanner foi configurado corretamente, basta digitarmos no cmd "sonar-scanner -h", irá exibir o help de comandos da ferramenta.


Gravei um vídeo no meu canal com o passo a passo completo, caso tenham dúvidas.
Comentem e compartilhe ficarei feliz em ouvir vocês.

No próximo artigo vamos configurar um projeto e verificar na prática como funciona a cobertura do SonarQube.


Links

Java 17
SonarQube
Plugin SonarDelphi
SonarScanner

segunda-feira, 8 de janeiro de 2024

Como Configurar o DelphiCodeCoverage

 


No post anterior, expliquei o que é e para que serve a ferramenta SonarQube. Porém, antes de cairmos de cabeça em sua instalação e configuração, devemos falar um pouco sobre o DelphiCodeCoverage

DelphiCodeCoverage

O DelphiCodeCoverage é uma ferramenta capaz de analisar o código-fonte e montar métricas sobre cobertura de testes.

Ele trabalha juntamente com o framework DUnitX que já vem nativo nas últimas versões do Delphi. Então para quem já possui testes implementados, basta apenas configurar essa ferramenta e já começar a medir a cobertura de teste do seu projeto.

O que é Cobertura de Testes?

Basicamente, a cobertura de testes é o percentual de linhas que foram "percorridas" por meio de testes unitários. Ou seja, se eu tenho um método de 5 linhas, para termos uma cobertura 100%, o nosso teste unitário deverá percorrer essas 5 linhas e sem falhar.

A ferramenta exibe um relatório geral, listando as classes do seu projeto, assim como as linhas cobertas, linhas descobertas e o percentual de cobertura.
Nesse relatório ainda é possível navegar pelas classes e descobrir quais linhas ainda faltam ser testadas.





O DelphiCodeCoverage possui diversos parâmetros de entrada para poder configurar sua execução de acordo com cada necessidade. No vídeo a seguir, mostro apenas uma das configurações.

DelphiCodeCoverage e SonarQube

Uma vez possuindo as métricas de cobertura de teste, é o momento de enviar as informações ao SonarQube. Como foi mencionado no post anterior, o próprio SonarQube possui o recurso de CodeCoverage e é a partir do resultado extraído do DelphiCodeCoverage que enviaremos tais informações. Porém, para não deixar esse post complexo, estarei explicando em um próximo artigo.

Passo a Passo

  • Habilitar o map do projeto de testes
    Opções do Projeto > Delphi Compiler > Linking > Map File: Detailed
  • Habilitar as informações de Debug
    Opções do Projeto > Delphi Compiler > Linking > Debug Information: True
  • Configurar o arquivo .bat
    (exemplo)
    @echo off
    CodeCoverage.exe ^
      -e ..\bin\CalculadoraTests.exe ^
      -m ..\bin\CalculadoraTests.map ^
      -dproj ..\Calculadora.dproj ^
      -od CodeCoverage ^
      -emma ^
      -xml ^
      -html ^
      -xmllines ^
      -v
    timeout /t -1
  • Adicionar as units no projeto de testes


Links:
DelphiCodeCoverage
Exemplo Prático
Sobre SonarQube

sábado, 6 de janeiro de 2024

SonarQube mais que um amigo um companheiro para o seu código


  No mundo da programação, saber escrever um código limpo já se tornou algo obrigatório.
  Hoje em dia para garantir vida longa ao seu software e facilitar a manutenibilidade devemos seguir boas práticas de Clean Code.
  Uma das ferramentas bastante utilizada nas empresas é o SonarQube. 

SonarQube  

  SonarQube é uma ferramenta que permite que sua equipe de desenvolvimento entregue e atenda os altos padrões de qualidade do código.
  A ferramenta possui as seguintes características:

  • Mais de 30 linguagens, estruturas e plataformas IaC (Infraestrutura como Código)
    Obs.: No dia dessa postagem o Delphi não vinha como uma linguagem embutidas.
  • Integração com plataformas DevOps
  • Go/No-Go com Quality Gate (bloqueia merges no repositório se não atender o padrão de qualidade estabelecido)
  • Alta operabilidade
  • Análise super-rápida
  • Regras críticas de segurança para linguagens vitais
  • Configurações compartilhadas e unificadas
  • Integração Sonarlint IDE

  O SonarQube fornece uma edição Community, ou seja, free, porém ela tem algumas limitações, como segue a imagem a seguir.


  Uma das desvantagens do SonarQube seria em relação à infraestrutura que fica a cargo da empresa gerenciar, diferentemente do que acontece com o SonarCloud
  Embora existam algumas desvantagens, a versão Community ajuda muito para quem está começando a analisar seu projeto.

SonarCloud

  É uma versão totalmente baseada nas nuvens para facilitar as integrações com as diversas ferramentas de DevOps do mercado, tais como Github, GitLab, Bitbucket, Azure e entre outras.
  Com o SonarCloud a empresa não precisa se preocupar com a infraestrutura.
  A única desvantagem dessa versão seria em relação ao plano free que até o dia dessa postagem só permitia analisar projetos públicos, forçando as empresas a adquirirem versões pagas.   



Sonarlint

  É um plugin que você pode instalar na sua IDE de desenvolvimento para detectar e corrigir os problemas do seu código.
  Com o Sonarlint você tem o feedback quase que instantâneo de como seu código está sendo escrito, não eliminando, mas antecipando partes da análise completa do seu projeto.  

Cobertura de Código

  É uma métrica que avalia o código-fonte a partir de testes automatizados.
  Indica quais partes do seu código foi testado (cobertos) e os que não foram (descobertos).
  Quanto maior for a porcentagem de cobertura, mais confiável seu software será.


Bugs e Vulnerabilidades,  Code Smells e Duplicações

  Bugs e Vulnerabilidades é uma sessão reservada para apontar as falhas de segurança do seu código, assim como bugs encontrados.
  Code Smells é um termo cunhado por Kent Beck, que quer dizer que algo no seu código "não está cheirando bem", é nessa sessão que descobrimos as famosas "gambiarras" no código.
  Em Duplicações serão listados os trechos e a porcentagem de código duplicado no seu projeto, ponto importante para pensarmos e termos práticas de refatorys.


  No próximo artigo falaremos sobre o plugin do Delphi para utilizar no SonarQube. Então não perca a oportunidade de me acompanhar nas redes sociais.  


Postagem em Destaque

Configurando o Projeto Delphi para o SonarQube

  No post anterior expliquei como instalar e configurar o SonarQube com o plugin do Delphi . Neste post vamos configurar nosso projeto Del...

As mais visitadas