L'analisi statica, chiamata anche analisi statica del codice, è un metodo di debug di un programma per computer che viene eseguito esaminando il codice senza eseguire il programma. Il processo fornisce una comprensione della struttura del codice e può aiutare a garantire che il codice aderisca agli standard del settore. L'analisi statica viene utilizzata nell'ingegneria del software dai team di sviluppo del software e di garanzia della qualità. Gli strumenti automatizzati possono assistere programmatori e sviluppatori nell'esecuzione di analisi statiche. Il software eseguirà la scansione di tutto il codice in un progetto per verificare la presenza di vulnerabilità durante la convalida del codice.
L'analisi statica è generalmente efficace per trovare problemi di codifica come:
- Errori di programmazione
- Codifica delle violazioni degli standard
- Valori indefiniti
- Errori della sintassi
- Falle di sicurezza
Il processo di analisi statica è utile anche per risolvere i punti deboli del codice sorgente che potrebbero portare all'overflow del buffer, una vulnerabilità software comune.
Come viene eseguita l'analisi statica?
Il processo di analisi statica è relativamente semplice, purché automatizzato. In genere, l'analisi statica viene eseguita prima del test del software nelle fasi iniziali dello sviluppo. Nella pratica di sviluppo DevOps, avverrà nelle fasi di creazione.
Una volta scritto il codice, è necessario eseguire un analizzatore di codice statico per esaminare il codice. Verificherà le regole di codifica definite dagli standard o dalle regole predefinite personalizzate. Una volta che il codice è stato eseguito attraverso l'analizzatore di codice statico, l'analizzatore avrà identificato se il codice è conforme o meno alle regole impostate. A volte è possibile che il software contrassegni dei falsi positivi, quindi è importante che qualcuno li esamini e li ignori. Una volta eliminati i falsi positivi, gli sviluppatori possono iniziare a correggere eventuali errori apparenti, generalmente a partire da quelli più critici. Una volta risolti i problemi di codice, quest'ultimo può passare al test tramite l'esecuzione.
Senza strumenti di test del codice, l'analisi statica richiederà molto lavoro, poiché gli esseri umani dovranno rivedere il codice e capire come si comporterà negli ambienti di esecuzione (runtime). Pertanto, è una buona idea trovare uno strumento che automatizzi il processo. Eliminare tutti i processi tediosi per la loro lunghezza renderà l'ambiente di lavoro più efficiente.
Tipi di analisi statica
Esistono diversi metodi di analisi statica che un'organizzazione potrebbe utilizzare, tra cui:
- Analisi di controllo: si concentra sul flusso di controllo in una struttura di chiamata. Ad esempio, un flusso di controllo potrebbe essere un processo, una funzione, un metodo o una subroutine.
- Analisi dei dati: assicura che i dati definiti vengano utilizzati correttamente, assicurandosi anche che gli oggetti dei dati funzionino correttamente.
- Analisi guasti / errori: analizza guasti e errori nei componenti del modello.
- Analisi dell'interfaccia: verifica le simulazioni per controllare il codice e assicurare che l'interfaccia si adatti al modello e alla simulazione.
In un senso più ampio, con una categorizzazione meno ufficiale, l'analisi statica può essere suddivisa in categorie formali, estetiche, di progettazione, controllo degli errori e categorie predittive. Significato formale se il codice è corretto; significato estetico se il codice si sincronizza con gli standard di stile; proprietà di progetto che indicano il livello di complessità; controllo degli errori che cerca violazioni del codice; e predicibilità, che stabilisce come si comporterà il codice una volta eseguito.
Questa immagine mostra alcuni degli obiettivi dell'analisi statica.
Vantaggi e svantaggi dell'analisi statica
I vantaggi dell'utilizzo dell'analisi statica includono:
- Si può valutare tutto il codice in un'applicazione, aumentando la qualità del codice.
- Fornisce velocità nell'utilizzo di strumenti automatizzati rispetto alla revisione manuale del codice
- Associato ai normali test, il test statico consente una maggiore profondità nel codice di debug.
- Gli strumenti automatizzati sono meno soggetti a errori umani.
- Aumenterà la probabilità di trovare vulnerabilità nel codice, aumentando la sicurezza del web o delle applicazioni.
- Può essere eseguito in un ambiente di sviluppo offline.
Tuttavia, l'analisi statica presenta alcuni inconvenienti. Ad esempio, i programmatori dovrebbero essere consapevoli di quanto segue:
- È possibile rilevare falsi positivi.
- Se c'è un errore nel codice, uno strumento potrebbe non rilevarlo.
- Non tutte le regole di codifica possono essere sempre seguite, come le regole che richiedono documentazione esterna.
- L'analisi statica può richiedere più tempo rispetto a metodi comparabili.
- L'analisi statica non è in grado di rilevare come verrà eseguita una funzione.
- Potrebbe non essere possibile analizzare le librerie di sistema di terze parti.
Verifica statica vs. verifica dinamica
Il vantaggio principale dell'analisi statica è il fatto che può rivelare errori che non si manifestano fino a quando non si verifica un disastro che avverrà dopo settimane, mesi o anni dopo il rilascio. Tuttavia, l'analisi statica è solo un primo passo in un regime completo di controllo della qualità del software. Dopo che è stata eseguita l'analisi statica, l'analisi dinamica viene spesso eseguita nel tentativo di scoprire difetti o vulnerabilità sottili. Nella terminologia informatica, statico significa fisso, mentre dinamico significa capace di azione e / o cambiamento. L'analisi dinamica prevede il test e la valutazione di un programma basato sull'esecuzione. L'analisi statica e quella dinamica, messe insieme, sono a volte indicate come test della scatola di vetro.
Strumenti e fornitori di analisi statica
Ci sono molti strumenti di verifica statica, quindi potrebbe non essere facile scegliere quelli più idonei. Gli strumenti software funzioneranno a una varietà di livelli. Gli strumenti a livello di unità esaminano programmi o subroutine. Gli strumenti a livello di tecnologia testeranno tra i programmi unitari e una visione del programma generale. Gli strumenti a livello di sistema analizzeranno le interazioni tra i programmi delle unità. E gli strumenti a livello di obiettivi si concentreranno su termini, regole e processi a livello di obiettivi. Prima di utilizzare uno strumento, i programmatori dovrebbero anche assicurarsi che lo strumento supporti il linguaggio di programmazione che stanno utilizzando e gli standard che desiderano rispettare.
Embold è un esempio di strumento di analisi statica che afferma di essere una piattaforma di analisi software intelligente. Lo strumento può assegnare automaticamente la priorità ai problemi con il codice e fornirne una chiara visualizzazione. Lo strumento verificherà anche la correttezza e l'accuratezza dei modelli di progettazione utilizzati nel codice.
Kiuwan è un altro esempio di analizzatore statico. È una grande piattaforma che si concentra sull'implementazione dell'analisi statica in un ambiente DevOps. Presenta fino a 4,000 regole aggiornate basate su circa 25 standard di sicurezza. Si integra bene anche con Jenkins.
PyCharm è un altro strumento di esempio creato per gli sviluppatori che lavorano in Python con basi di codice di grandi dimensioni. Lo strumento offre navigazione nel codice, refactoring automatico e una serie di altri strumenti di debugging.