Společnost Intel zveřejnila první významné vydání nástroje ControlFlag 1.0, který umožňuje odhalovat chyby a anomálie v zdrojových kódech pomocí systému strojového učení, trénovaného na velkém objemu existujícího kódu. Na rozdíl od tradičních statických analyzátorů, ControlFlag nepoužívá hotová pravidla, ve kterých je obtížné předvídat všechny možné varianty, ale vychází ze statistik používání různých jazykových konstrukcí v mnoha existujících projektech. Kód ControlFlag je napsán v jazyce C++ a je otevřený pod licencí MIT.
Systém se učí pomocí vytváření statistického modelu stávajícího souboru kódu otevřených projektů publikovaných na GitHubu a podobných veřejných repozitářích. Během fáze učení systém identifikuje typické vzory konstrukcí v kódu a vytváří syntaktický strom vazeb mezi těmito vzory, odrážející tok provádění kódu v programu. Výsledkem je standardní rozhodovací strom, který spojuje zkušenosti vývoje všech analyzovaných zdrojových textů. Pro kontrolovaný kód se provádí podobný proces určení vzorů, které jsou porovnávány se standardním rozhodovacím stromem. Velké odchylky od sousedních větví naznačují přítomnost anomálie v kontrolovaném vzoru.

Jako příklad možností ControlFlag prováděli vývojáři analýzu zdrojových textů projektů OpenSSL a cURL:
- V OpenSSL byly odhaleny anomální konstrukce „(s1 == NULL) ∧ (s2 == NULL)“ a „(s1 == NULL) | (s2 == NULL)“, které neodpovídaly běžně používanému vzoru „(s1 == NULL) || (s2 == NULL)“. V kódu byly také odhaleny anomálie ve výrazech „(-2 == rv)“ (minus byl překlep) a „BIO_puts(bp, „:“) <= 0)“ (v kontextu kontrolování úspěšného dokončení funkce mělo být „== 0“).
- V cURL byla odhalena přehlédnutá statickými analyzátory chyba při použití prvku struktury „s->keepon“, který měl číselný typ, ale byl porovnáván s logickou hodnotou TRUE.
Mezi vlastnostmi verze ControlFlag 1.0 se vyznačuje plná podpora standardních šablon pro jazyk C a schopnost identifikovat anomálie v podmínkových výrazech "if". Například při analýze úryvku kódu "if (x = 7) y = x;" systém určí, že se obvykle v příkazu "if" k porovnání číselných hodnot používá konstrukce "proměnná == číslo", a tudíž je s vysokou pravděpodobností uvedení "proměnná = číslo" v výrazu "if" důsledkem překlepu. V balení je k dispozici scénář, který umožňuje načíst existující repozitáře na GitHubu v jazyce C a použít je pro konstrukci modelu. Také jsou k dispozici již hotové modely, které umožňují ihned začít s kontrolou kódu.
Zdroj: opennet.ru
