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.
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.
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.
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:
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.
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 SonarScannere 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.
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
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.