Blog Formação DEV

SonarQube

Neste artigo, exploramos o SonarQube, uma poderosa ferramenta de análise estática de código. Abordamos como utilizá-lo para identificar bugs, vulnerabilidades e problemas de qualidade em projetos, demonstrando sua importância no desenvolvimento de software limpo e sustentável.
SonarQube
Texto de: Lucas Galdino

Introdução

O SonarQube é uma ferramenta open source projetada para inspeção contínua da qualidade de código. Ele detecta problemas como bugs, vulnerabilidades de segurança, code smells e duplicações em várias linguagens de programação diferentes, incluindo Java, JavaScript, Python, C#, dentre outras. Mesmo tendo modalidades pagas, a versão Community do SonarQube é gratuita e open source, sendo ideal para desenvolvedores e equipes que desejam manter um padrão de qualidade de código sem custos com licenciamento.

Como funciona

O SonarQube é uma ferramenta de SAST, ou seja, ele realiza análises estáticas do código. Isso significa que ele examina o código sem executá-lo, com o objetivo de identificar problemas estruturais ou potenciais falhas de lógica e segurança.

Componentes principais:

  • Scanner: Ferramenta que envia o código para análise.
  • Servidor SonarQube: Onde as análises são processadas e os resultados são armazenados e visualizados.
  • Banco de dados: Armazena histórico, métricas, e resultados das análises.

Fluxo de funcionamento:

  1. O código é enviado ao SonarQube via scanner (pode ser feito localmente ou integrado em pipelines CI/CD).
  2. O servidor processa o código e gera um relatório com métricas e alertas.
  3. Os desenvolvedores acessam a interface web para examinar os resultados e planejar melhorias.

Instalando

Temos duas instalações diferentes a se fazer. O SonarQube na sua interface gráfica, por meio da versão web, e também o SonarScanner.

Começando pelo Scanner, é possível fazer o download do instalador a partir da página oficial da ferramenta: https://docs.sonarsource.com/sonarqube-server/9.6/analyzing-source-code/scanners/sonarscanner/. Basta fazer o download da versão para seu sistema operacional e executar o instalador. É possível também fazer essa instalação via Docker, que também é uma das opções exibidas na página oficial.

Para testar a instalação dessa versão basta utilizar o comando "sonar-scanner —version” no seu terminal.

A segunda instalação se trata da versão web do SonarQube. A maneira mais prática e rápida de instalar essa versão do SonarQube é utilizando Docker, especialmente útil para testes locais e desenvolvimento. O único requisito para isso é ter o Docker instalado e funcionando na máquina.

Para iniciar a instalação é interessante criar uma pasta base para a instalação e iniciar todos os passos a partir dela. Então, com a pasta “sonarqube” criada podemos criar dentro dela um arquivo “docker-compose.yml” com o seguinte conteúdo:

services:
  sonarqube:
    image: sonarqube:community
    container_name: sonarqube
    ports:
      - "9000:9000"
    environment:
      - SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonarqube
      - SONAR_JDBC_USERNAME=sonar
      - SONAR_JDBC_PASSWORD=sonar
    depends_on:
      - db

  db:
    image: postgres:13
    container_name: sonarqube-db
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
      - POSTGRES_DB=sonarqube
    volumes:
      - sonarqube_data:/var/lib/postgresql/data

volumes:
  sonarqube_data: 

Com o arquivo criado, basta iniciar os containers com o comando:

docker-compose up -d 

Utilizando

O SonarQube pode ser utilizado de diversas formas, como podemos notar por meio da página inicial na sua versão web. É possível conectar projetos diretamente à interface web por meio de chaves de API e outras informações ou até utilizar a ferramenta em projetos locais.

Vamos fazer um rápido teste utilizando um projeto local recém-criado baseado em NextJS. Para fazer o teste o passo a passo é simples.

Na tela inicial da interface web basta clicar na opção "Create a local project”. Ao clicar, basta entrar com informações básicas sobre o projeto, como nome e "branch” principal, que por padrão é a "main” mesmo.

Após isso podemos definir uma configuração padrão para o projeto, vamos escolher as configurações globais mesmo.

Com isso feito, temos agora a tela principal do projeto recém-criado dentro da interface do SonarQube. O próximo passo é fazer um scan do código local por meio da opção "Locally” dessa tela.

Ao selecionar a opção “Localy” vamos primeiro ter que criar um token para poder fazer a interação entre o scan e o projeto dentro da interface web acontecer de fato. Em resumo, basta clicar no botão "Generate” para criar o token.

Com o token criado, basta clicar em "Continue” e ir para o próximo passo, onde escolhemos o tipo de código que será analisado. Aqui, como estou utilizando um projeto NextJS, escolherei a opção "JS/TS & Web”.

Selecionando a opção já teremos as instruções para realizar o scan, com o passo a passo descrito desde a instalação do Scanner.

Com as instruções e código na mão, agora é necessário entrar no terminal, apontar o mesmo para a pasta que contém o projeto a ser analisado e utilizar o comando instruído pelo SonarQube.

A partir daqui, vale uma ressalva: em alguns casos, o comando para realizar o scan pode mudar de "sonar" para "sonar-scanner", dependendo da forma como foi feita a instalação do Scanner na sua máquina. Outra diferença é que para projetos em NextJS é necessário adicionar alguns trechos a mais no comando utilizado para o Scan.

No caso do meu teste que foi feito em um projeto NextJS o comando a ser utilizado foi o seguinte:

sonar-scanner \
  -Dsonar.projectKey=app-teste \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://localhost:9000 \
  -Dsonar.token=sqp_ed7d360d2dd5bd478784486b35f5f050dbc1e16e 

E o resultado no terminal foi o seguinte:

E ao retornar para a tela do SonarQube na sua interface web já é possível notar mudanças nas informações exibidas:

O código base de um projeto recém criado é bem limpo e passou perfeitamente pelo teste. Mas agora irei copiar e colar um dos arquivos principais do projeto e refazer o teste com o mesmo comando para ver as mudanças no resultado.

Podemos notar que mudou bastante e que agora o projeto falhou no teste, apontando, por exemplo, muita duplicação dentro do código.

Conclusão

Como podemos ver, concluir um projeto com qualidade vai além de escrever código funcional, é garantir que ele seja limpo, seguro e sustentável. O SonarQube, mesmo em sua edição Community, oferece uma base sólida para manter a excelência técnica no desenvolvimento. Incorporá-lo ao seu fluxo de trabalho pode ser um passo essencial para prevenir falhas, reduzir dívidas técnicas e promover boas práticas na equipe.

Sobre o autor
Cod3r

Cod3r

Com mais de 400 mil alunos, a Cod3r é uma das principais escolas de tecnologia do País. Um de seus produtos mais importantes é a Formação DEV, com objetivo de preparar os profissionais para o mercado.

Ótimo! Inscreveu-se com sucesso.

Bem-vindo de volta! Registou-se com sucesso.

Assinou com sucesso o Blog Formação DEV .

Sucesso! Verifique o seu e-mail para obter o link mágico para se inscrever.

As suas informações de pagamento foram atualizadas.

Seu pagamento não foi atualizado.