Rilascio di ControlFlag 1.0, uno strumento per identificare errori nel codice C

Intel ha pubblicato la prima major release dello strumento ControlFlag 1.0, che consente di identificare errori e anomalie nel codice sorgente utilizzando un sistema di machine learning addestrato su una grande quantità di codice esistente. A differenza dei tradizionali analizzatori statici, ControlFlag non applica regole già pronte, in cui è difficile prevedere tutte le opzioni possibili, ma si basa su statistiche sull'uso di vari costrutti linguistici in un gran numero di progetti esistenti. Il codice ControlFlag è scritto in C++ ed è open source con licenza MIT.

Il sistema viene addestrato costruendo un modello statistico dell'array di codice esistente di progetti open source pubblicati su GitHub e archivi pubblici simili. Nella fase di addestramento, il sistema determina modelli tipici per la costruzione di strutture nel codice e costruisce un albero sintattico di connessioni tra questi modelli, riflettendo il flusso di esecuzione del codice nel programma. Di conseguenza, si forma un albero decisionale di riferimento che unisce l'esperienza di sviluppo di tutti i codici sorgente analizzati. Il codice in esame viene sottoposto a un processo simile di identificazione di modelli che vengono confrontati con un albero decisionale di riferimento. Grandi discrepanze con i rami vicini indicano la presenza di un'anomalia nel modello in esame.

Rilascio di ControlFlag 1.0, uno strumento per identificare errori nel codice C

Come esempio delle capacità di ControlFlag, gli sviluppatori hanno analizzato i codici sorgente dei progetti OpenSSL e cURL:

  • Costrutti anomali “(s1 == NULL) ∧ (s2 == NULL)” e “(s1 == NULL) | (s2 == NULL)" , che non corrispondono al modello comunemente utilizzato "(s1 == NULL) || (s2 == NULL)". Il codice ha inoltre individuato anomalie nelle espressioni “(-2 == rv)” (il segno meno era un errore di battitura) e “BIO_puts(bp, “:”) <= 0)” (nell'ambito della verifica del buon esito del funzione avrebbe dovuto essere "== 0").
  • In cURL è stato scoperto un errore che non è stato rilevato dagli analizzatori statici durante l'utilizzo dell'elemento di struttura “s->keepon”, che aveva un tipo numerico, ma è stato confrontato con il valore booleano TRUE.

Tra le caratteristiche della versione ControlFlag 1.0 c'è il pieno supporto dei modelli standard per il linguaggio C e la capacità di rilevare anomalie nelle espressioni condizionali “if”. Ad esempio, quando si analizza il frammento di codice “if (x = 7) y = x;” Il sistema determinerà che l'istruzione "if" di solito utilizza la costruzione "variabile == numero" per confrontare valori numerici, quindi è molto probabile che la "variabile = numero" nell'espressione "if" sia causata da un errore di battitura. Il kit include uno script che consente di scaricare i repository del linguaggio C esistenti su GitHub e utilizzarli per creare il modello. Sono disponibili anche modelli già pronti, che ti consentono di iniziare immediatamente a controllare il codice.

Fonte: opennet.ru

Aggiungi un commento