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

Intel je objavio prvo veliko izdanje ControlFlag 1.0, alata koji identificira pogreške i anomalije u izvornom kodu pomoću sustava strojnog učenja obučenog na velikom broju postojećeg koda. Za razliku od tradicionalnih statičkih analizatora, ControlFlag ne koristi unaprijed definirana pravila, kojima je teško pokriti sve moguće scenarije, već se oslanja na statistiku o korištenju različitih jezičnih konstrukcija u velikom broju postojećih projekata. ControlFlag je napisan u C++ i otvorenog je koda pod MIT licencom.

Sustav se obučava izgradnjom statističkog modela postojeće baze koda projekata otvorenog koda objavljenih na GitHub-u i sličnim javnim repozitorijima. Tijekom faze obuke, sustav identificira tipične obrasce konstrukcije u kodu i konstruira sintaktičko stablo odnosa između tih obrazaca, odražavajući tijek izvršavanja koda programa. To rezultira formiranjem referentnog stabla odlučivanja, koje integrira iskustvo razvoja cijelog analiziranog izvornog koda. Sličan proces identificiranja obrazaca provodi se za kod koji se testira, a zatim se uspoređuje s referentnim stablom odlučivanja. Velika odstupanja sa susjednim granama ukazuju na prisutnost anomalije u uzorku koji se testira.

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

Kao primjer ControlFlag-ovih mogućnosti, programeri su analizirali izvorni kod projekata OpenSSL i cURL:

  • U OpenSSL-u, anomalne konstrukcije otkrivene su u konstrukcijama "(s1 == NULL) ∧ (s2 == NULL)" i "(s1 == NULL) | (s2 == NULL)", koje ne odgovaraju uobičajeno korištenom obrascu "(s1 == NULL) || (s2 == NULL)". Kod je također sadržavao anomalije u izrazima "(-2 == rv)" (znak minus je bio tipografska pogreška) i "BIO_puts(bp, ":") <= 0)" (u kontekstu provjere uspjeha funkcije, trebalo je biti "== 0").
  • Otkrivena je greška u cURL-u koju statički analizatori nisu otkrili pri korištenju strukturnog elementa "s->keepon", koji je imao numerički tip, ali je uspoređen s logičkom vrijednošću TRUE.

Ključne značajke ControlFlag 1.0 uključuju punu podršku za standardne C jezične predloške i mogućnost otkrivanja anomalija u "if" uvjetnim naredbama. Na primjer, prilikom analize fragmenta koda "if (x = 7) y = x;", sustav će otkriti da "if" naredba obično koristi konstrukciju "variable == number" za usporedbu numeričkih vrijednosti, pa je klauzula "variable = number" u "if" naredbi vjerojatno tipografska pogreška. Uključen je skript za učitavanje postojećih C jezičnih repozitorija na GitHubu i njihovo korištenje za izgradnju modela. Dostupni su i unaprijed izgrađeni modeli, što vam omogućuje da odmah počnete provjeravati svoj kod.

Izvor: opennet.ru

Kupite pouzdan hosting za stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster