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