Filosofia: "La revisione manuale è costosa; automatizza tutto ciò che è deterministico."
::: info DEFINIZIONE
L'analisi statica esamina il codice sorgente senza eseguirlo. È in grado di identificare bug potenziali, memory leak, vulnerabilità di sicurezza e violazioni delle "best practices" analizzando i pattern sintattici e i grafi di controllo.
:::
Python è un linguaggio dinamico, il che rende l'analisi statica fondamentale per catturare errori che altrimenti si manifesterebbero solo a runtime.
Specializzato nel trovare vulnerabilità di sicurezza comuni (es. uso di eval, hardcoded passwords, configurazioni subprocess insicure).
pip install bandit && bandit -r ./srcVerifica la coerenza dei tipi. Fondamentale perché l'IA spesso genera codice con tipi ambigui o incoerenti.
pip install mypy && mypy ./srcRuff è lo standard moderno: estremamente veloce (scritto in Rust), sostituisce Flake8 e Pylint.
pip install ruff && ruff check .In C++, l'analisi statica è una questione di sopravvivenza per prevenire crash di memoria e undefined behavior.
Lo standard per il mondo embedded e bare-metal. Trova memory leak, mismatch di allocazione e variabili non inizializzate.
cppcheck --enable=all --std=c++20 ./srcUn "linter" basato sul compilatore Clang. Non solo trova bug, ma suggerisce come aggiornare il codice agli standard più recenti (es. trasformare puntatori raw in std::unique_ptr).
clang-tidy main.cpp -- -std=c++20Per evitare di dimenticare l'analisi, utilizziamo il framework pre-commit. Esso esegue automaticamente i tool scelti ogni volta che provi a fare un git commit.
Crea un file .pre-commit-config.yaml nella root del progetto:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.0
hooks:
- id: ruff
args: [ --fix ]
- repo: https://github.com/PyCQA/bandit
rev: 1.7.5
hooks:
- id: bandit
args: ["-r", "-lll"]
- repo: local
hooks:
- id: cppcheck
name: cppcheck
entry: cppcheck
language: system
args: ["--enable=warning,performance,portability", "--std=c++20"]
files: \.(cpp|h|hpp)$
Per un feedback istantaneo mentre lavori con Copilot o Claude:
"editor.formatOnSave": true.::: warning LIMITAZIONI
I tool SAST sono eccellenti per trovare il "cosa" (sintassi, sicurezza), ma sono ciechi al "perché" (logica di business).
Tags: #DevOps #StaticAnalysis #Python #CPP #CodeQuality #Automation*