Wydanie ControlFlag 1.0, narzędzia do wykrywania błędów w kodzie w języku C

Firma Intel opublikowała pierwszą znaczącą wersję narzędzia ControlFlag 1.0, które umożliwia wykrywanie błędów i anomalii w kodzie źródłowym, wykorzystując system uczenia maszynowego przeszkolony na dużej ilości istniejącego kodu. W przeciwieństwie do tradycyjnych analizatorów statycznych, ControlFlag nie stosuje gotowych reguł, w których trudno przewidzieć wszystkie możliwe przypadki, ale opiera się na statystyce użycia różnych konstrukcji językowych w wielu istniejących projektach. Kod ControlFlag został napisany w języku C++ i jest udostępniany na licencji MIT.

System uczy się poprzez budowanie modelu statystycznego istniejącego zbioru kodu z otwartych projektów opublikowanych na GitHub i podobnych publicznych repozytoriach. Na etapie uczenia system identyfikuje typowe wzorce budowy konstrukcji w kodzie i tworzy drzewo składniowe relacji między tymi wzorcami, odzwierciedlające przepływ wykonania kodu w programie. W rezultacie formuje się wzorcowe drzewo podejmowania decyzji, łączące doświadczenia programistyczne wszystkich analizowanych kodów źródłowych. Dla kontrolowanego kodu przeprowadzany jest podobny proces identyfikacji wzorców, które są porównywane z wzorcowym drzewem podejmowania decyzji. Duże rozbieżności w porównaniu z sąsiednimi gałęziami świadczą o obecności anomalii w kontrolowanym wzorcu.

Wydanie ControlFlag 1.0, narzędzia do wykrywania błędów w kodzie w języku C

Na przykładzie możliwości ControlFlag, deweloperzy przeprowadzili analizę kodów źródłowych projektów OpenSSL i cURL:

  • W OpenSSL zidentyfikowano anormalne konstrukcje „(s1 == NULL) ∧ (s2 == NULL)” oraz „(s1 == NULL) | (s2 == NULL)”, które nie odpowiadają zwykle stosowanemu wzorcowi „(s1 == NULL) || (s2 == NULL)”. W kodzie zidentyfikowano także anomalie w wyrażeniach „(-2 == rv)” (minus był literówką) oraz „BIO_puts(bp, „:”) <= 0)” (w kontekście sprawdzania udanego zakończenia funkcji powinno być „== 0”).
  • W cURL zidentyfikowano niezauważony przez analizatory statyczne błąd podczas używania elementu struktury „s->keepon”, który miał typ numeryczny, ale był porównywany z wartością logiczną TRUE.

Wersja ControlFlag 1.0 charakteryzuje się pełnym wsparciem dla typowych szablonów w języku C oraz zdolnością wykrywania anomalii w wyrażeniach warunkowych „if”. Na przykład, podczas analizy fragmentu kodu „if (x = 7) y = x;” system zidentyfikuje, że w operatorze „if” do porównywania wartości liczbowych zwykle stosuje się konstrukcję „zmienna == liczba”, dlatego z dużym prawdopodobieństwem sformułowanie „zmienna = liczba” w wyrażeniu „if” jest wynikiem literówki. Dołączony jest skrypt umożliwiający pobranie istniejących repozytoriów w języku C z GitHub i wykorzystanie ich do budowy modelu. Dostępne są również gotowe modele, które pozwalają od razu przystąpić do weryfikacji kodu.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster