L'analisi statica è il processo di analisi di un software senza eseguirlo. Questo è molto buono e consigliato, ma devi tenere presente che
- diversi strumenti di analisi statica hanno diverse comprensione del codice che stanno studiando, quindi possono segnalare (o non segnalare) problemi diversi. Uno strumento può fornire un report pulito e l'altro potrebbe lamentarsi di un milione di cose.
- uno strumento dinamico (per citare un esempio, pensare a valgrind) può trovare molti altri problemi, al prezzo di un grave onere per il consumo delle risorse (tempo, utilizzo della memoria). Questo è così perché di solito si esegue una versione strumentata del software. Nota che, essendo in qualche modo strumentato (sostituisci il tuo malloc con un malloc di debug) non è esattamente identico al tuo software (come puoi vedere dai tempi di esecuzione)
Entrambi questi approcci risentono della mancanza di contesto: non sanno cosa dovrebbe raggiungere l'obiettivo.
La revisione del codice viene eseguita da un altro codificatore, che presumibilmente lo conosce e può controllare
- se il codice è corretto
- se il software è semanticamente corretto.
È molto più costoso e ha un grado variabile di ripetibilità, ma è di grande aiuto.
Come sempre, non c'è un singolo proiettile d'argento che risolverà tutti i bug ed eviterà tutti i problemi.
L'applicazione - il più possibile data il luogo, il codice, il tempo, le tre forme di controllo (statico, dinamico, più occhi (e cervello) che effettivamente guardano il codice) è raccomandato.
ps: devo notare che di solito è molto meglio applicare gli strumenti da zero. La conversione di un sistema legacy è un'esperienza molto meno piacevole, a causa dei falsi positivi. Se inizi da zero e miri sempre a mantenere pulito lo strumento di analisi, probabilmente eviterai molti problemi.
pps: come per gli strumenti, dipende dalla lingua. Nel mondo C e C ++ puoi iniziare guardando Visual Studio stesso, che contiene uno strumento di analisi statica incorporato. Un elenco relativamente completo può essere trovato su Wikipedia.
ppps: l'analisi statica è più adatta ai linguaggi statici, come C o C ++. Per Python può essere davvero difficile dire se un nome che fa riferimento a un elenco in un punto farà riferimento a un elenco per il resto del programma, a causa delle sue proprietà dinamiche. Ciò non significa che non si possa fare nulla, in quanto uno sforzo JIT come PyPy mostra.