Megjelent a ControlFlag 1.0, a C kód hibáinak azonosítására szolgáló eszköz

Az Intel közzétette a ControlFlag 1.0 eszköz első nagyobb kiadását, amely lehetővé teszi a forráskód hibáinak és anomáliáinak azonosítását egy nagy mennyiségű meglévő kódra kiképzett gépi tanulási rendszer segítségével. A hagyományos statikus elemzőkkel ellentétben a ControlFlag nem alkalmaz kész szabályokat, amelyekben nehéz minden lehetséges opciót megadni, hanem a különféle nyelvi konstrukciók használatára vonatkozó statisztikákon alapul számos meglévő projektben. A ControlFlag kód C++ nyelven íródott, és nyílt forráskódú az MIT licenc alatt.

A rendszer képzése a GitHubon és hasonló nyilvános tárolókban közzétett nyílt forráskódú projektek meglévő kódtömbjének statisztikai modelljének felépítésével történik. A betanítási szakaszban a rendszer tipikus mintákat határoz meg a struktúrák felépítéséhez a kódban, és szintaktikai fát épít fel e minták között, tükrözve a programban a kódvégrehajtás folyamatát. Ennek eredményeként egy referencia-döntési fa jön létre, amely egyesíti az összes elemzett forráskód fejlesztési tapasztalatait. A vizsgált kód hasonló folyamaton megy keresztül a minták azonosítására, amelyeket a referencia-döntési fával összehasonlítanak. A szomszédos ágaktól való nagy eltérések anomáliát jeleznek az ellenőrzött mintában.

Megjelent a ControlFlag 1.0, a C kód hibáinak azonosítására szolgáló eszköz

A ControlFlag képességeinek példájaként a fejlesztők elemezték az OpenSSL és cURL projektek forráskódjait:

  • Rendellenes konstrukciók „(s1 == NULL) ∧ (s2 == NULL)” és „(s1 == NULL) | (s2 == NULL)" , amelyek nem egyeznek az általánosan használt mintával "(s1 == NULL) || (s2 == NULL)". A kód anomáliákat is azonosított a „(-2 == rv)” (a mínusz elírás volt) és a „BIO_puts(bp, „:”) <= 0)” kifejezésekben (a sikeres befejezés ellenőrzésével összefüggésben függvénynek „== 0”-nak kellett volna lennie).
  • A cURL-ben olyan hibát fedeztek fel, amelyet a statikus elemzők nem észleltek az „s->keepon” szerkezeti elem használatakor, amelynek numerikus típusa volt, de összehasonlították a TRUE logikai értékkel.

A ControlFlag 1.0 verzió szolgáltatásai között szerepel a C nyelv szabványos sablonjainak teljes támogatása, valamint a feltételes „if” kifejezések anomáliáinak észlelése. Például az „if (x = 7) y = x;” kódrészlet elemzésekor A rendszer megállapítja, hogy az „if” utasítás általában a „változó == szám” konstrukciót használja a numerikus értékek összehasonlítására, így nagy valószínűséggel az „if” kifejezésben szereplő „változó = szám” elírást okoz. A készlet tartalmaz egy szkriptet, amely lehetővé teszi a meglévő C nyelvű tárolók letöltését a GitHubon, és ezek felhasználását a modell felépítéséhez. Kész modellek is rendelkezésre állnak, amelyek lehetővé teszik a kód azonnali ellenőrzését.

Forrás: opennet.ru

Hozzászólás