L'analisi statica è il processo di analisi di un software senza eseguirlo. Questo è molto buono e raccomandato, ma devi tenerlo a mente
- diversi strumenti di analisi statica hanno una diversa comprensione del codice che stanno studiando, quindi possono segnalare (o non segnalare) problemi diversi. Uno strumento può fornire un rapporto chiaro e l'altro può lamentarsi di un milione di cose.
- uno strumento dinamico (per citare un esempio, pensiamo a valgrind) può trovare molti altri problemi, al prezzo di un grave onere per il consumo di risorse (tempo, utilizzo della memoria). Questo perché di solito si esegue una versione strumentata del software. Nota che, essendo strumentato in qualche modo (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 soffrono della mancanza di contesto: non sanno cosa dovrebbe raggiungere il SW.
La revisione del codice viene eseguita da un altro programmatore, che presumibilmente lo conosce e può controllare
- se il codice è corretto
- se il software è semanticamente corretto.
È molto più costoso e ha un diverso grado di ripetibilità, ma è di grande aiuto.
Come sempre, non esiste un solo proiettile d'argento che risolverà tutti i bug ed eviterà tutti i problemi. Si applica - per quanto possibile, dato il luogo, il codice, l'ora, le tre forme di controllo (statico, dinamico, più occhi (e cervelli) effettivamente guardando 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 di falsi positivi. Se inizi da zero e miri sempre a mantenere pulito lo strumento di analisi, probabilmente eviterai molti problemi.
pps: per quanto riguarda 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 è disponibile 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 si riferisce 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, come dimostra uno sforzo della JIT come PyPy .