Vydání ControlFlag 1.0, nástroje pro identifikaci chyb v C kódu

Společnost Intel zveřejnila první velké vydání nástroje ControlFlag 1.0, který umožňuje identifikovat chyby a anomálie ve zdrojovém kódu pomocí systému strojového učení trénovaného na velkém množství existujícího kódu. Na rozdíl od tradičních statických analyzátorů ControlFlag neuplatňuje hotová pravidla, ve kterých je obtížné poskytnout všechny možné možnosti, ale je založen na statistikách o použití různých jazykových konstruktů ve velkém počtu existujících projektů. Kód ControlFlag je napsán v C++ a je open source pod licencí MIT.

Systém je trénován vytvořením statistického modelu stávajícího pole kódů open-source projektů publikovaných na GitHubu a podobných veřejných úložištích. Ve fázi školení systém určuje typické vzory pro konstrukci struktur v kódu a vytváří syntaktický strom spojení mezi těmito vzory, odrážející tok provádění kódu v programu. Výsledkem je vytvoření referenčního rozhodovacího stromu, který kombinuje vývojové zkušenosti všech analyzovaných zdrojových kódů. Kontrolovaný kód prochází podobným procesem identifikace vzorů, které jsou kontrolovány podle referenčního rozhodovacího stromu. Velké nesrovnalosti se sousedními větvemi naznačují přítomnost anomálie v kontrolovaném vzoru.

Vydání ControlFlag 1.0, nástroje pro identifikaci chyb v C kódu

Jako příklad schopností ControlFlag vývojáři analyzovali zdrojové kódy projektů OpenSSL a cURL:

  • Anomální konstrukce „(s1 == NULL) ∧ (s2 == NULL)“ a „(s1 == NULL) | (s2 == NULL)" , které neodpovídají běžně používanému vzoru "(s1 == NULL) || (s2 == NULL)". Kód také identifikoval anomálie ve výrazech „(-2 == rv)“ (mínus byl překlep) a „BIO_puts(bp, „:“) <= 0)“ (v kontextu kontroly úspěšného dokončení funkce by měla být "== 0").
  • V cURL byla objevena chyba, která nebyla detekována statickými analyzátory při použití prvku struktury „s->keepon“, který měl číselný typ, ale byla porovnána s booleovskou hodnotou TRUE.

Mezi funkcemi verze ControlFlag 1.0 je plná podpora standardních šablon pro jazyk C a schopnost detekovat anomálie v podmíněných výrazech „if“. Například při analýze fragmentu kódu „if (x = 7) y = x;“ Systém určí, že příkaz „if“ obvykle používá konstrukci „proměnná == číslo“ k porovnání číselných hodnot, takže je vysoce pravděpodobné, že „proměnná = číslo“ ve výrazu „if“ je způsobeno překlepem. Sada obsahuje skript, který vám umožní stáhnout existující repozitáře jazyka C na GitHubu a použít je k sestavení modelu. K dispozici jsou také hotové modely, které vám umožní okamžitě začít kontrolovat kód.

Zdroj: opennet.ru

Přidat komentář