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.
Mais um ano se passou e como praxe, não poderia deixar de registrar uma retrospectiva de como foi o Ano de 2023. Se você perdeu algum evento, não se preocupe estarei deixando os links neste post para que você possa desfrutar do conteúdo nas suas férias.
O ano de 2023 começou com a minha participação no canal do Landerson Gomes para falarmos sobre o projeto Devs2Blu à qual eu participei. Nele comentei como foi o programa de capacitação que ajudei a formar 20 alunos na linguagem Delphi.
No mês de abril fui convidado pela Jéssica Nathany do projeto Café Debug para batermos um papo sobre o Delphi e suas últimas versões.
Em maio tivemos uma dobradinha de palestras, começando pelo Intensive Delphi da Academia do Código, falando sobre o componente AWS4Delphi e também uma palestra bem bacana aos alunos de Análise e Desenvolvimento de Sistemas do UniSenai Santa Catarina - Campus Blumenau para falarmos sobre o Delphi.
Em agosto em conjunto com a Academia do Código promovemos um workshop sobre Delphi e Angular, mostrando na prática a combinação perfeita usando as duas stacks.
Em setembro foi a vez de participar do Papo ACBR - também levando o tema Delphi e Angular.
Em outubro tive o prazer de participar do Embarcadero Conference em São Paulo, lugar de muito network e aprendizado, pois são palestras sensacionais.
Desejo à todos um ótimo final de Ano e que venha 2024 com muitos desafios e aprendizagem.
Iniciando um Projeto Delphi para utilização das práticas de CI/CD
Ao iniciar um projeto atualmente, apenas um "File -> New Project" já não é mais o suficiente.
Devemos pensar em toda a esteira de desenvolvimento do projeto, contemplando sua escalabilidade, produtividade, manutenibilidade e entre outros fatores.
Nesse post estarei explicando algumas ferramentas essenciais para iniciarmos o nosso projeto.
Bora Lá?
Repositório
Para o repositório de código existem diversas plataformas, nesse caso utilizaremos o GitLab. Ela possui desde o plano free até planos pagos com mais recursos.
Para projetos e equipes reduzidas o plano free já atende, inclusive com opções de Continuous Integration e Continuous Delivery.
Para controlarmos os branchs locais e facilitar o nosso desenvolvimento, seja no momento do commit ou mesmo na visualização das alterações, utilizaremos o SourceTree.
É uma ferramenta gráfica que utiliza os comandos do Git. Com ela conseguimos fazer Commit, Pull, CherryPick, Merge e entre outras operações.
Embora o SourceTree seja uma ferramenta completa, eu costumo utilizar juntamente com ela o WinMerge para comparação de arquivos e o TortoiseMerge para resolução de conflitos.
Agora que já sabemos as ferramentas que utilizaremos, que tal irmos para uma demonstração prática? Nessa demonstração iremos criar nosso branch no GitLab e configurar nosso projeto localmente, tudo isso pensando em um fluxo para facilitar os processos de CI/CD.
O que achou? Comente as ferramentas que você utiliza e o que elas te proporciona na sua produtividade.
No mundo da tecnologia as mudanças, sejam elas melhorias e/ou correções de bugs são muito constantes no nosso dia a dia e é natural depararmos com o cenário descrito na imagem desse post.
Algumas empresas ainda sentem dificuldades em controlar as versões do seu software. Utilizando boas práticas de CI/CD juntamente com o Versionamento Semântico conseguimos sanar tais dificuldades.
O que é um Versionamento Semântico.
Todo software desenvolvido possui (normalmente no menu sobre) a versão instalada. Você por acaso já se perguntou o significado de cada número que o compõe?
Pois é, existe um padrão e o nome dele é Versionamento Semântico.
Nesse tipo de versionamento definimos cada numeração conforme o que está sendo entregue no software.
Major: Quebra de compatibilidade, quebra no contrato da API, alterações no banco de dados ou alterações muito complexas.
Minor: Alterações mais simples que não quebrem a compatibilidade.
Patch: Correções de bugs que não venha quebrar a compatibilidade.
Pré Release: Versões candidatas que podem, ou não, quebrar compatibilidade (futuramente podem incrementar o Major ou Minor)
Agora que vimos o significado de cada número que compõe uma versão, que tal irmos para um exemplo prático? Neste exemplo estamos utilizando como base uma versão 1.1.0.
1.0.0 (versão inicial) - 01/06/2023
1.1.0 (versão com melhorias) - 01/10/2023
1.1.1 (versão com correções de bugs) - 15/12/2023
1.1.2 (versão com correções de bugs) - 30/12/2023
Como você pode ver, não é um bicho de sete cabeças e nem uma combinação binária kkkk. Todo software possui uma versão inicial, posteriormente essa versão vai recebendo incrementos seja de melhorias e/ou bugs e utilizando o versionamento semântico, conseguimos garantir esse controle.
Tá Armandinho, agora que eu sei formar esse controle de versionamento, como que vou lembrar o que foi liberado em cada uma delas. É nesse ponto que falaremos sobre os Changes Logs.
O que é um Change Log
Change Log é um arquivo onde nós desenvolvedores mantemos o controle de todas as versões liberadas e o que foi liberada em cada uma com suas respectivas datas.
Não adianta termos um fluxo de liberação e numeração das versões se não anotarmos e registrarmos as versões liberadas e o que foi liberada em cada versão, não concorda?
Abaixo segue a imagem de exemplo de um changelog.
E, na Prática
Agora que já conhecemos um pouco da teoria, que tal termos uma visão um pouco mais clara de como devemos seguir no desenvolvimento?
Elaborei um fluxo onde você pode seguir caso sua empresa esteja começando a usar o versionamento. Lembrando que isso não é escrito em pedras e você pode adaptar conforme a necessidade da sua empresa.
No vídeo abaixo explico de forma detalhada como funciona esse processo.
O que achou, bora começar a controlar a versão do seu software?
Deixe seu comentário, ficarei feliz em saber o que achou.