Vydanie ControlFlag 1.0, nástroja na identifikáciu chýb v kóde C

Spoločnosť Intel zverejnila prvé veľké vydanie nástroja ControlFlag 1.0, ktorý umožňuje identifikovať chyby a anomálie v zdrojovom kóde pomocou systému strojového učenia trénovaného na veľkom množstve existujúceho kódu. Na rozdiel od tradičných statických analyzátorov ControlFlag neuplatňuje hotové pravidlá, v ktorých je ťažké poskytnúť všetky možné možnosti, ale je založený na štatistikách o použití rôznych jazykových konštruktov vo veľkom počte existujúcich projektov. Kód ControlFlag je napísaný v C++ a je otvorený pod licenciou MIT.

Systém je trénovaný vytvorením štatistického modelu existujúceho kódového poľa open-source projektov publikovaných v GitHub a podobných verejných úložiskách. Vo fáze trénovania systém určuje typické vzory na vytváranie štruktúr v kóde a vytvára syntaktický strom spojení medzi týmito vzormi, ktorý odráža tok vykonávania kódu v programe. Výsledkom je vytvorenie referenčného rozhodovacieho stromu, ktorý kombinuje skúsenosti s vývojom všetkých analyzovaných zdrojových kódov. Skúmaný kód prechádza podobným procesom identifikácie vzorov, ktoré sa kontrolujú podľa referenčného rozhodovacieho stromu. Veľké rozdiely so susednými vetvami naznačujú prítomnosť anomálie v kontrolovanom vzore.

Vydanie ControlFlag 1.0, nástroja na identifikáciu chýb v kóde C

Ako príklad schopností ControlFlag vývojári analyzovali zdrojové kódy projektov OpenSSL a cURL:

  • Anomálne konštrukcie „(s1 == NULL) ∧ (s2 == NULL)“ a „(s1 == NULL) | (s2 == NULL)" , ktoré sa nezhodujú s bežne používaným vzorom "(s1 == NULL) || (s2 == NULL)". Kód tiež identifikoval anomálie vo výrazoch „(-2 == rv)“ (mínus bol preklep) a „BIO_puts(bp, „:“) <= 0)“ (v kontexte kontroly úspešného dokončenia funkcia mala byť "== 0").
  • V cURL bola zistená chyba, ktorú statické analyzátory nezistili pri použití prvku štruktúry „s->keepon“, ktorý mal číselný typ, ale bola porovnaná s boolovskou hodnotou TRUE.

Medzi funkcie verzie ControlFlag 1.0 patrí plná podpora štandardných šablón pre jazyk C a schopnosť odhaliť anomálie v podmienených výrazoch „if“. Napríklad pri analýze fragmentu kódu „ak (x = 7) y = x;“ Systém určí, že príkaz „if“ zvyčajne používa konštrukciu „premenná == číslo“ na porovnanie číselných hodnôt, takže je vysoko pravdepodobné, že výraz „premenná = číslo“ vo výraze „if“ je spôsobený preklepom. Súprava obsahuje skript, ktorý vám umožňuje stiahnuť existujúce úložiská jazyka C na GitHub a použiť ich na zostavenie modelu. K dispozícii sú aj hotové modely, ktoré vám umožnia okamžite začať kontrolovať kód.

Zdroj: opennet.ru

Pridať komentár