Intel hat den Quellcode des Machine-Learning-Systems ControlFlag zur Fehlererkennung im Code veröffentlicht.

Das Unternehmen Intel hat Fortschritte im Rahmen des Forschungsprojekts ControlFlag gemacht, das sich darauf konzentriert, ein System für maschinelles Lernen zur Verbesserung der Codequalität zu entwickeln. Die vom Projekt bereitgestellten Werkzeuge ermöglichen es, anhand eines Modells, das auf einem umfangreichen Pool von vorhandenem Code trainiert wurde, verschiedene Fehler und Anomalien in Quelltexten zu identifizieren, die in hochgradigen Programmiersprachen wie C/C++ verfasst sind. Das System ist geeignet, unterschiedliche Arten von Problemen im Code zu erkennen, von der Identifizierung von Tippfehlern und falschen Typenkombinationen bis hin zur Erkennung fehlender Überprüfungen des NULL-Wertes in Zeigern und Problemen im Umgang mit dem Speicher. Der Code von ControlFlag ist in C++ geschrieben und unter der MIT-Lizenz open source.

Das System lernt selbstständig, indem es ein statistisches Modell des vorhandenen Codes aus offenen Projekten erstellt, die in GitHub und ähnlichen öffentlichen Repositories veröffentlicht sind. In der Lernphase identifiziert das System typische Muster in der Code-Struktur und erstellt einen Syntaxbaum, der die Beziehungen zwischen diesen Mustern abbildet und den Ablauf des Codes im Programm widerspiegelt. Schließlich entsteht ein Referenzbaum für Entscheidungsfindung, der die Entwicklungserfahrung aller analysierten Quelltexte vereint.

Für den überprüften Code erfolgt ein ähnlicher Prozess zur Mustererkennung, die mit dem Referenzentscheidungsbaum abgeglichen wird. Große Abweichungen zu benachbarten Zweigen weisen auf eine Anomalie im überprüften Muster hin. Das System ermöglicht es nicht nur, einen Fehler im Muster zu identifizieren, sondern auch einen Vorschlag zur Korrektur zu bieten. Zum Beispiel wurde im OpenSSL-Code eine Konstruktion „(s1 == NULL) ∧ (s2 == NULL)“ entdeckt, die im syntaktischen Baum nur 8 Mal vorkam, während der näheste Ast mit dem Wert „(s1 == NULL) || (s2 == NULL)“ etwa 7.000 Mal vorkam. Das System identifizierte zudem die Anomalie „(s1 == NULL) | (s2 == NULL)“, die im Baum 32 Mal vorkam.

Intel hat den Quellcode des Machine-Learning-Systems ControlFlag zur Fehlererkennung im Code veröffentlicht.

Bei der Analyse des Code-Ausschnitts „if (x = 7) y = x;“ hat das System festgestellt, dass normalerweise in der „if“-Anweisung zum Vergleich von numerischen Werten die Konstruktion „variable == zahl“ verwendet wird. Daher ist es mit hoher Wahrscheinlichkeit so, dass die Angabe „variable = zahl“ im Ausdruck „if“ durch einen Tippfehler verursacht wurde. Solch einen Fehler hätten auch traditionelle statische Analysatoren erkannt, aber im Gegensatz zu diesen verwendet ControlFlag keine festen Regeln, in denen es schwierig ist, alle möglichen Varianten zu berücksichtigen. Stattdessen stützt es sich auf die Statistik der Verwendung verschiedener Konstruktionen in einer Vielzahl von Projekten.

Im Rahmen eines Experiments hat ControlFlag im Quellcode des cURL-Tools, das häufig als Beispiel für hochwertigen und geprüften Code angeführt wird, einen von statischen Analysatoren unentdeckten Fehler bei der Verwendung des Struktur-Elements „s->keepon“ aufgedeckt, das einen numerischen Typ hatte, jedoch mit dem booleschen Wert TRUE verglichen wurde. Im OpenSSL-Code wurden neben dem oben erwähnten Problem mit „(s1 == NULL) ∧ (s2 == NULL)“ auch Anomalien in den Ausdrücken „(-2 == rv)“ (das Minus war ein Tippfehler) und „BIO_puts(bp, „:“)“ festgestellt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster