Pular para o conteúdo principal

Sonarqube e Métricas de qualidade de código

Sonarqube

  • Ferramenta de análise estática de código.
  • Avalia qualidade, segurança, legibilidade, cobertura de testes, duplicidade, entre outros.
  • Pode ser integrada ao pipeline de CI/CD para barrar código com falhas.
  • Utiliza "Quality Gates" para definir regras e limites de aprovação.

Métricas de Qualidade

  • Complexidade ciclomática: mede os caminhos lógicos possíveis de um método ou função.
    Fórmula: Complexidade = Número de decisões + 1 Ex: código com 3 if -> Complexidade = 3 + 1 = 4

  • Complexidade cognitiva: mede a dificuldade de leitura e entendimento do código.

  • Cobertura de testes (Test Coverage): percentual do código testado automaticamente.

  • Duplicação de código (Code Duplication): trechos repetidos no projeto.

  • Manutenibilidade (Maintainability Index): facilidade de manter e modificar o código.

  • Vulnerabilidades e bugs: problemas de lógica ou segurança detectados.

  • Code Smells: más práticas que não são bugs, mas prejudicam a legibilidade/manutenção.


Complexity

Complexidade Ciclomática

  • Mede quantos caminhos de execução existem dentro de um trecho de código.
  • Quanto maior a complexidade, maior a dificuldade de testar e manter o código.

Exemplo simples:

def verifica_idade(idade):
if idade < 18:
return "Menor de idade"
else:
return "Maior de idade"

Esse código tem dois caminhos possíveis: if e else → complexidade = 2.

O else não é uma decisão — ele é um desvio obrigatório quando a condição do if é falsa.
A complexidade ciclomática contabiliza apenas decisões que resultam em bifurcação de caminho.

No Exemplo acima temos apenas 1 if, uma decisão. Então fica uma decisão + 1 = 2.


Complexidade Cognitiva

  • Mede o quanto o código exige de raciocínio para ser entendido.
  • Leva em conta aninhamentos, condições encadeadas, switchs, entre outros.

Exemplo simples:

def processa(dados):
for dado in dados:
if dado.tipo == "A":
if dado.valor > 10:
processar_a(dado)
elif dado.tipo == "B":
processar_b(dado)

Apesar de ter poucos caminhos, há múltiplos níveis de aninhamento → complexidade cognitiva mais alta.


🔧 Classificações de Issues no SonarQube

🟡 False Positive

  • Quando a ferramenta aponta um problema que, na verdade, não é um erro real.

🔴 Won’t Fix

  • Quando o problema identificado existe, mas o time decide não corrigir.

  • Pode ser usado quando:

    • A regra não se aplica àquele contexto.
    • Corrigir traria mais prejuízo do que benefício.
    • Foi uma avaliação equivocada da ferramenta.

Refactoring: É um processo principalmente focado em melhorar a legibilidade, manutenibilidade e estrutura do código sem alterar seu comportamento para o usuário final.


Questões Cebraspe

  • "No SonarQube, a complexidade mede a quantidade de caminhos possíveis na execução do código." → CERTO

  • "Uma questão levantada pela ferramenta SonarQube pode ser classificada como 'won’t fix' se essa questão resultar de uma avaliação equivocada feita pela ferramenta." → Errado