Veröffentlichung von ControlFlag 1.0, einem Tool zur Identifizierung von Fehlern im C-Code

Intel hat die erste Hauptversion des ControlFlag 1.0-Tools veröffentlicht, mit dem Sie mithilfe eines maschinellen Lernsystems, das auf einer großen Menge vorhandenen Codes trainiert wurde, Fehler und Anomalien im Quellcode identifizieren können. Im Gegensatz zu herkömmlichen statischen Analysatoren wendet ControlFlag keine vorgefertigten Regeln an, bei denen es schwierig ist, alle möglichen Optionen bereitzustellen, sondern basiert auf Statistiken über die Verwendung verschiedener Sprachkonstrukte in einer Vielzahl bestehender Projekte. Der ControlFlag-Code ist in C++ geschrieben und steht unter der MIT-Lizenz als Open Source.

Das System wird trainiert, indem ein statistisches Modell des vorhandenen Code-Arrays von Open-Source-Projekten erstellt wird, die in GitHub und ähnlichen öffentlichen Repositories veröffentlicht werden. In der Trainingsphase ermittelt das System typische Muster für den Aufbau von Strukturen im Code und erstellt einen syntaktischen Baum von Verbindungen zwischen diesen Mustern, der den Ablauf der Codeausführung im Programm widerspiegelt. Als Ergebnis entsteht ein Referenz-Entscheidungsbaum, der die Entwicklungserfahrungen aller analysierten Quellcodes vereint. Der überprüfte Code durchläuft einen ähnlichen Prozess zur Identifizierung von Mustern, die anhand eines Referenzentscheidungsbaums überprüft werden. Große Abweichungen von benachbarten Zweigen weisen auf eine Anomalie im überprüften Muster hin.

Veröffentlichung von ControlFlag 1.0, einem Tool zur Identifizierung von Fehlern im C-Code

Als Beispiel für die Fähigkeiten von ControlFlag analysierten die Entwickler die Quellcodes der OpenSSL- und cURL-Projekte:

  • Anomale Konstrukte „(s1 == NULL) ∧ (s2 == NULL)“ und „(s1 == NULL) | (s2 == NULL)“ , die nicht mit dem häufig verwendeten Muster „(s1 == NULL) ||“ übereinstimmen (s2 == NULL)". Der Code identifizierte auch Anomalien in den Ausdrücken „(-2 == rv)“ (das Minus war ein Tippfehler) und „BIO_puts(bp, „:“) <= 0)“ (im Zusammenhang mit der Überprüfung des erfolgreichen Abschlusses). Funktion hätte es „== 0“ sein sollen.
  • In cURL wurde ein Fehler entdeckt, der von statischen Analysatoren nicht erkannt wurde, wenn das Strukturelement „s->keepon“ verwendet wurde, das einen numerischen Typ hatte, aber mit dem booleschen Wert TRUE verglichen wurde.

Zu den Funktionen der ControlFlag 1.0-Version gehören die vollständige Unterstützung von Standardvorlagen für die C-Sprache und die Möglichkeit, Anomalien in bedingten „Wenn“-Ausdrücken zu erkennen. Beispielsweise bei der Analyse des Codefragments „if (x = 7) y = x;“ Das System stellt fest, dass die „if“-Anweisung normalerweise die Konstruktion „Variable == Zahl“ verwendet, um numerische Werte zu vergleichen. Daher ist es sehr wahrscheinlich, dass „Variable = Zahl“ im „if“-Ausdruck durch einen Tippfehler verursacht wurde. Das Kit enthält ein Skript, mit dem Sie vorhandene C-Sprach-Repositorys auf GitHub herunterladen und zum Erstellen des Modells verwenden können. Es stehen auch fertige Modelle zur Verfügung, sodass Sie sofort mit der Überprüfung des Codes beginnen können.

Source: opennet.ru

Kommentar hinzufügen