Vrystelling van ControlFlag 1.0, 'n instrument om foute in C-kode te identifiseer

Intel het die eerste groot vrystelling van die ControlFlag 1.0-nutsding gepubliseer, wat jou toelaat om foute en anomalieë in bronkode te identifiseer deur gebruik te maak van 'n masjienleerstelsel wat op 'n groot hoeveelheid bestaande kode opgelei is. Anders as tradisionele statiese ontleders pas ControlFlag nie klaargemaakte reëls toe waarin dit moeilik is om vir alle moontlike opsies voorsiening te maak nie, maar is gebaseer op statistieke oor die gebruik van verskeie taalkonstrukte in 'n groot aantal bestaande projekte. Die ControlFlag-kode is in C++ geskryf en is oopbron onder die MIT-lisensie.

Die stelsel word opgelei deur 'n statistiese model te bou van die bestaande kodereeks van oopbronprojekte wat in GitHub en soortgelyke openbare bewaarplekke gepubliseer is. Op die opleidingstadium bepaal die stelsel tipiese patrone vir die konstruksie van strukture in die kode en bou 'n sintaktiese boom van verbindings tussen hierdie patrone, wat die vloei van kode-uitvoering in die program weerspieël. As gevolg hiervan word 'n verwysingsbesluitnemingsboom gevorm wat die ontwikkelingservaring van alle geanaliseerde bronkodes kombineer. Die kode wat hersien word, ondergaan 'n soortgelyke proses om patrone te identifiseer wat teen 'n verwysingsbesluitboom gekontroleer word. Groot verskille met naburige takke dui op die teenwoordigheid van 'n anomalie in die patroon wat nagegaan word.

Vrystelling van ControlFlag 1.0, 'n instrument om foute in C-kode te identifiseer

As 'n voorbeeld van ControlFlag se vermoëns, het die ontwikkelaars die bronkodes van die OpenSSL- en cURL-projekte ontleed:

  • Anomale konstrukte “(s1 == NULL) ∧ (s2 == NULL)” en “(s1 == NULL) | (s2 == NULL)" , wat nie ooreenstem met die algemeen gebruikte patroon nie "(s1 == NULL) || (s2 == NULL)". Die kode het ook anomalieë in die uitdrukkings “(-2 == rv)” (die minus was 'n tikfout) en “BIO_puts(bp, “:”) <= 0)” geïdentifiseer (in die konteks van die kontrolering van die suksesvolle voltooiing van die funksie moes dit “== 0” gewees het).
  • In cURL is 'n fout ontdek wat nie deur statiese ontleders opgespoor is wanneer die struktuurelement "s->keepon" gebruik is nie, wat 'n numeriese tipe gehad het, maar met die Boolese waarde WAAR vergelyk is.

Onder die kenmerke van die ControlFlag 1.0-weergawe is daar volle ondersteuning vir standaard sjablone vir die C-taal en die vermoë om anomalieë in voorwaardelike "as"-uitdrukkings op te spoor. Byvoorbeeld, wanneer die kodefragment "as (x = 7) y = x;" ontleed word Die stelsel sal bepaal dat die "as"-stelling gewoonlik die "veranderlike == getal"-konstruksie gebruik om numeriese waardes te vergelyk, so dit is hoogs waarskynlik dat die "veranderlike = getal" in die "as"-uitdrukking deur 'n tikfout veroorsaak word. Die stel bevat 'n skrif waarmee u bestaande C-taalbewaarplekke op GitHub kan aflaai en dit gebruik om die model te bou. Klaargemaakte modelle is ook beskikbaar, sodat jy dadelik die kode kan nagaan.

Bron: opennet.ru

Voeg 'n opmerking