Intel ha pubblicato la prima versione significativa dello strumento ControlFlag 1.0, che consente di individuare errori e anomalie nei testi sorgente, utilizzando un sistema di apprendimento automatico addestrato su un ampio volume di codice esistente. A differenza dei tradizionali analizzatori statici, ControlFlag non applica regole predefinite, nelle quali è difficile prevedere tutte le possibilità, ma si basa su statistiche relative all'uso di varie strutture linguistiche in un gran numero di progetti esistenti. Il codice di ControlFlag è scritto in C++ ed è rilasciato sotto licenza MIT.
Il sistema si allena costruendo un modello statistico del codice esistente dei progetti open source pubblicati su GitHub e su simili repository pubblici. Nella fase di addestramento, il sistema identifica schemi tipici di costruzione delle strutture nel codice e costruisce un albero sintattico delle relazioni tra questi schemi, riflettendo il flusso di esecuzione del codice nel programma. Alla fine, viene formato un albero di decisione standard che integra l'esperienza di sviluppo di tutti i testi sorgente analizzati. Per il codice verificato viene eseguito un processo simile di identificazione degli schemi, che vengono confrontati con l'albero di decisione standard. Grandi discrepanze con rami adiacenti indicano la presenza di un'anomalia nello schema verificato.

Come esempio delle funzionalità di ControlFlag, gli sviluppatori hanno condotto un'analisi dei codici sorgente dei progetti OpenSSL e cURL:
- In OpenSSL sono state riscontrate costruzioni anomale «(s1 == NULL) ∧ (s2 == NULL)» e «(s1 == NULL) | (s2 == NULL)», che non corrispondono al modello comunemente usato «(s1 == NULL) || (s2 == NULL)». Inoltre, nel codice sono state rilevate anomalie nelle espressioni «(-2 == rv)» (il meno era un errore di battitura) e «BIO_puts(bp, «:») <= 0)» (nel contesto della verifica del successo della funzione doveva esserci «== 0»).
- In cURL è stata identificata un'errore non rilevato dagli analizzatori statici nell'utilizzo dell'elemento di struttura «s->keepon», che aveva un tipo numerico ma veniva confrontato con un valore booleano TRUE.
Tra le caratteristiche della versione ControlFlag 1.0 si segnala il supporto completo per i modelli standard del linguaggio C e la possibilità di rilevare anomalie nelle espressioni condizionali «if». Ad esempio, analizzando il frammento di codice «if (x = 7) y = x;», il sistema riconoscerà che di solito nell'operatore «if» per confrontare valori numerici si utilizza la costruzione «variabile == numero», pertanto è probabile che l'uso di «variabile = numero» nell'espressione «if» sia dovuto a un errore di battitura. È incluso uno script che consente di caricare i repository esistenti su GitHub in linguaggio C e di utilizzarli per costruire il modello. Sono disponibili anche modelli già pronti che permettono di avviare immediatamente il controllo del codice.
Fonte: opennet.ru
