Izdanje ControlFlag 1.0, alata za prepoznavanje pogrešaka u C kodu

Intel je objavio prvo veliko izdanje alata ControlFlag 1.0, koji vam omogućuje prepoznavanje pogrešaka i anomalija u izvornom kodu pomoću sustava strojnog 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 temelji na statistici korištenja različitih jezičnih konstrukata u velikom broju postojećih projekata. ControlFlag kod je napisan u C++ i otvoren je pod licencom MIT.

Sustav se osposobljava izgradnjom statističkog modela postojećeg niza kodova projekata otvorenog koda objavljenih na GitHubu i sličnim javnim repozitorijima. U fazi obuke, sustav određuje tipične uzorke za konstrukciju struktura u kodu i gradi sintaktičko stablo veza između tih obrazaca, odražavajući tijek izvršavanja koda u programu. Kao rezultat, formira se referentno stablo odlučivanja koje kombinira razvojno iskustvo svih analiziranih izvornih kodova. Kod koji se pregledava prolazi sličan proces identifikacije uzoraka koji se provjeravaju prema referentnom stablu odlučivanja. Velika odstupanja sa susjednim granama ukazuju na prisutnost anomalije u uzorku koji se provjerava.

Izdanje ControlFlag 1.0, alata za prepoznavanje pogrešaka u C kodu

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

  • Anomalne konstrukcije “(s1 == NULL) ∧ (s2 == NULL)” i “(s1 == NULL) | (s2 == NULL)" , koji se ne podudaraju s uobičajeno korištenim uzorkom "(s1 == NULL) || (s2 == NULL)". Kod je također identificirao anomalije u izrazima “(-2 == rv)” (minus je bio tipfeler) i “BIO_puts(bp, “:”) <= 0)” (u kontekstu provjere uspješnog završetka funkcija trebala je biti “== 0").
  • U cURL-u je otkrivena pogreška koju nisu otkrili statički analizatori pri korištenju elementa strukture “s->keepon”, koji je imao numerički tip, ali je uspoređen s boolean vrijednošću TRUE.

Među značajkama verzije ControlFlag 1.0 postoji puna podrška za standardne predloške za jezik C i mogućnost otkrivanja anomalija u uvjetnim izrazima "if". Na primjer, kada se analizira fragment koda "if (x = 7) y = x;" Sustav će utvrditi da izjava "if" obično koristi konstrukciju "varijabla == broj" za usporedbu numeričkih vrijednosti, tako da je vrlo vjerojatno da je "varijabla = broj" u izrazu "if" uzrokovana greškom pri upisu. Komplet uključuje skriptu koja vam omogućuje preuzimanje postojećih repozitorija jezika C na GitHubu i njihovo korištenje za izradu modela. Dostupni su i gotovi modeli, što vam omogućuje da odmah počnete provjeravati kod.

Izvor: opennet.ru

Dodajte komentar