Intel hat den ControlFlag-Systemcode für maschinelles Lernen geöffnet, um Fehler im Code zu identifizieren

Intel hat Entwicklungen im Zusammenhang mit dem Forschungsprojekt ControlFlag entdeckt, das darauf abzielt, ein maschinelles Lernsystem zur Verbesserung der Codequalität zu entwickeln. Das vom Projekt erstellte Toolkit ermöglicht es, basierend auf einem Modell, das auf einer großen Menge vorhandenem Code trainiert wurde, verschiedene Fehler und Anomalien in Quelltexten zu erkennen, die in Hochsprachen wie C/C++ geschrieben sind. Das System eignet sich zur Identifizierung verschiedener Arten von Problemen im Code, von der Erkennung von Tippfehlern und falschen Typkombinationen bis hin zur Erkennung von fehlenden NULL-Prüfungen in Zeigern und Speicherproblemen. Der ControlFlag-Code ist in C++ geschrieben und steht unter der MIT-Lizenz als Open Source.

Das System ist selbstlernend, indem es ein statistisches Modell des vorhandenen Code-Arrays offener Projekte erstellt, die in GitHub und ähnlichen öffentlichen Repositories veröffentlicht werden. In der Lernphase ermittelt das System typische Muster zum Aufbau von Strukturen im Code und erstellt einen syntaktischen Baum aus Verknüpfungen zwischen diesen Mustern, der den Codeausführungsfluss im Programm widerspiegelt. Als Ergebnis entsteht ein Referenzentscheidungsbaum, der die Erfahrungen aus der Entwicklung aller analysierten Quelltexte vereint.

Der getestete Code durchläuft einen ähnlichen Prozess zur Identifizierung von Mustern, die anhand eines Referenzentscheidungsbaums überprüft werden. Große Abweichungen zu benachbarten Zweigen weisen auf eine Anomalie in der überprüften Vorlage hin. Das System ermöglicht es außerdem, nicht nur einen Fehler in der Vorlage zu erkennen, sondern auch eine Korrektur vorzuschlagen. Beispielsweise wurde im OpenSSL-Code die Konstruktion „(s1 == NULL) ∧ (s2 == NULL)“ gefunden, die im Syntaxbaum nur 8 Mal vorkam, während der nächste Zweig mit dem Wert „(s1 == NULL) || (s2 == NULL)“ kam etwa 7 Mal vor. Das System hat außerdem eine Anomalie „(s1 == NULL) |“ festgestellt (s2 == NULL)“, der 32 Mal im Baum vorkam.

Intel hat den ControlFlag-Systemcode für maschinelles Lernen geöffnet, um Fehler im Code zu identifizieren

Beim Parsen des Codeausschnitts „if (x = 7) y = x;“ Das System hat festgestellt, dass die Konstruktion „Variable == Zahl“ normalerweise in der „Wenn“-Anweisung verwendet wird, um numerische Werte zu vergleichen. Daher ist die Angabe „Variable = Zahl“ im „Wenn“-Ausdruck mit hoher Wahrscheinlichkeit darauf zurückzuführen ein Tippfehler. Herkömmliche statische Analysatoren würden einen solchen Fehler erkennen, aber im Gegensatz zu ihnen verwendet ControlFlag keine vorgefertigten Regeln, in denen es schwierig ist, alle möglichen Optionen vorherzusehen, sondern basiert auf den Statistiken der Verwendung aller Arten von Konstrukten in einer großen Anzahl von Projekten .

Als Experiment wurde bei der Verwendung von ControlFlag im Quellcode des cURL-Dienstprogramms, das oft als Beispiel für qualitativ hochwertigen und verifizierten Code angeführt wird, ein von statischen Analysatoren unbemerkter Fehler bei der Verwendung des Strukturelements „s->keepon“ entdeckt. welches einen numerischen Typ hatte, aber mit dem booleschen Wert TRUE verglichen wurde. Im OpenSSL-Code gab es neben dem oben genannten Problem mit „(s1 == NULL) ∧ (s2 == NULL)“ auch Anomalien in den Ausdrücken „(-2 == rv)“ (das Minus war ein Tippfehler). ) und „BIO_puts(bp, :“)

Source: opennet.ru

Kommentar hinzufügen