Izdanje ControlFlag 1.0, alata za identifikaciju grešaka u C kodu

Intel je objavio prvo veliko izdanje alata ControlFlag 1.0, koji vam omogućava da identifikujete greške i anomalije u izvornom kodu koristeći sistem mašinskog učenja obučenog na velikoj količini postojećeg koda. Za razliku od tradicionalnih statičkih analizatora, ControlFlag ne primjenjuje gotova pravila, u kojima je teško predvidjeti sve moguće opcije, već se bazira na statistici upotrebe različitih jezičkih konstrukcija u velikom broju postojećih projekata. ControlFlag kod je napisan u C++ i otvorenog koda pod MIT licencom.

Sistem je obučen izgradnjom statističkog modela postojećeg niza kodova projekata otvorenog koda objavljenih na GitHubu i sličnim javnim repozitorijumima. U fazi obuke, sistem određuje tipične obrasce za konstruisanje struktura u kodu i gradi sintaksičko stablo veza između ovih obrazaca, odražavajući tok izvršenja koda u programu. Kao rezultat, formira se referentno stablo odlučivanja koje kombinuje razvojno iskustvo svih analiziranih izvornih kodova. Kod koji se revidira prolazi kroz sličan proces identifikacije obrazaca koji se provjeravaju u odnosu na referentno stablo odlučivanja. Velika neslaganja sa susjednim granama ukazuju na prisustvo anomalije u uzorku koji se provjerava.

Izdanje ControlFlag 1.0, alata za identifikaciju grešaka u C kodu

Kao primjer mogućnosti ControlFlag-a, programeri su analizirali izvorne kodove OpenSSL i cURL projekata:

  • Anomalne konstrukcije “(s1 == NULL) ∧ (s2 == NULL)” i “(s1 == NULL) | (s2 == NULL)" , koji se ne podudaraju sa uobičajenim uzorkom "(s1 == NULL) || (s2 == NULL)". Kod je takođe identifikovao anomalije u izrazima “(-2 == rv)” (minus je bila greška u kucanju) i “BIO_puts(bp, “:”) <= 0)” (u kontekstu provere uspešnog završetka funkcija je trebala biti “== 0").
  • U cURL-u je otkrivena greška koju nisu detektovali statički analizatori pri korištenju elementa strukture “s->keepon”, koji je imao numerički tip, ali je upoređen sa booleanskom vrijednošću TRUE.

Među karakteristikama verzije ControlFlag 1.0, postoji puna podrška za standardne šablone za jezik C i mogućnost otkrivanja anomalija u uslovnim izrazima „ako“. Na primjer, kada analizirate fragment koda “ako (x = 7) y = x;” Sistem će utvrditi da izjava “if” obično koristi konstrukciju “varijable == broj” za upoređivanje numeričkih vrijednosti, tako da je vrlo vjerovatno da je “varijabla = broj” u izrazu “if” uzrokovana greškom u kucanju. Komplet uključuje skriptu koja vam omogućava da preuzmete postojeća spremišta jezika C na GitHub i koristite ih za izgradnju modela. Dostupni su i gotovi modeli koji vam omogućavaju da odmah počnete s provjerom koda.

izvor: opennet.ru

Dodajte komentar