Das Unternehmen Intel hat die erste bedeutende Version des Tools ControlFlag 1.0 veröffentlicht, das Fehler und Anomalien in Quelltexten identifizieren kann, indem es ein auf einem großen Volumen bestehender Codes trainiertes Machine Learning-System verwendet. Im Gegensatz zu traditionellen statischen Analysewerkzeugen verwendet ControlFlag keine festen Regeln, die oft nicht alle möglichen Varianten abdecken können, sondern basiert auf der Statistik der Verwendung verschiedener Sprachkonstruktionen in einer Vielzahl bestehender Projekte. Der Code von ControlFlag ist in C++ geschrieben und unter der MIT-Lizenz veröffentlicht.
Das System lernt, indem es ein statistisches Modell des bestehenden Quellcodes offener Projekte, die auf GitHub und ähnlichen öffentlichen Repositories veröffentlicht sind, erstellt. In der Trainingsphase identifiziert das System typische Muster in der Konstruktion des Codes und erstellt einen Syntaxbaum, der die Beziehungen zwischen diesen Mustern darstellt und den Fluss der Programmausführung widerspiegelt. In der Folge wird ein Referenzbaum für Entscheidungen gebildet, der die Entwicklungserfahrungen aller analysierten Quelltexte zusammenführt. Für den zu überprüfenden Code wird ein ähnlicher Prozess zur Identifizierung von Mustern durchgeführt, die mit dem Referenzbaum für Entscheidungen abgeglichen werden. Große Abweichungen von benachbarten Ästen deuten auf Anomalien im überprüften Muster hin.

Als Beispiel für die Möglichkeiten von ControlFlag wurde eine Analyse der Quelltexte der Projekte OpenSSL und cURL durchgeführt:
- In OpenSSL wurden anomale Konstruktionen wie „(s1 == NULL) ∧ (s2 == NULL)“ und „(s1 == NULL) | (s2 == NULL)“ festgestellt, die nicht dem üblicherweise verwendeten Muster „(s1 == NULL) || (s2 == NULL)“ entsprechen. Im Code wurden außerdem Anomalien in den Ausdrücken „(-2 == rv)“ (das Minus war ein Schreibfehler) und „BIO_puts(bp, „:“) <= 0)“ (im Kontext der Überprüfung des erfolgreichen Abschlusses der Funktion hätte es „== 0“ sein müssen) gefunden.
- In cURL wurde ein Fehler festgestellt, der von statischen Analysewerkzeugen übersehen wurde, als das Strukturelement „s->keepon“ verwendet wurde, das einen numerischen Typ hatte, aber mit dem booleschen Wert TRUE verglichen wurde.
Die Version ControlFlag 1.0 bietet umfassende Unterstützung für typische Vorlagen in der Programmiersprache C und die Möglichkeit, Anomalien in bedingten Ausdrücken 'if' zu erkennen. Zum Beispiel wird das System beim Analysieren des Code-Fragments 'if (x = 7) y = x;' feststellen, dass normalerweise im 'if'-Operator der Vergleich von numerischen Werten die Konstruktion 'variable == zahl' verwendet, sodass die Angabe 'variable = zahl' im Ausdruck 'if' sehr wahrscheinlich auf einen Tippfehler zurückzuführen ist. Ein Skript zum Herunterladen der auf GitHub verfügbaren C-Codestücke und deren Verwendung zum Modellaufbau wird mitgeliefert. Außerdem stehen bereits fertige Modelle zur Verfügung, mit denen Sie sofort mit der Codeüberprüfung beginnen können.
Quelle: opennet.ru
