Izdaja ControlFlag 1.0, orodja za prepoznavanje napak v kodi C

Intel je objavil prvo večjo izdajo orodja ControlFlag 1.0, ki vam omogoča prepoznavanje napak in anomalij v izvorni kodi z uporabo sistema strojnega učenja, usposobljenega za veliko količino obstoječe kode. Za razliko od tradicionalnih statičnih analizatorjev ControlFlag ne uporablja že pripravljenih pravil, v katerih je težko predvideti vse možne možnosti, ampak temelji na statističnih podatkih o uporabi različnih jezikovnih konstruktov v velikem številu obstoječih projektov. Koda ControlFlag je napisana v C++ in je odprtokodna pod licenco MIT.

Sistem se usposobi z izgradnjo statističnega modela obstoječe kodne matrike odprtokodnih projektov, objavljenih v GitHubu in podobnih javnih repozitorijih. Na stopnji usposabljanja sistem določi tipične vzorce za gradnjo struktur v kodi in zgradi sintaktično drevo povezav med temi vzorci, ki odražajo potek izvajanja kode v programu. Kot rezultat se oblikuje referenčno drevo odločanja, ki združuje razvojne izkušnje vseh analiziranih izvornih kod. Koda, ki se pregleduje, je podvržena podobnemu postopku prepoznavanja vzorcev, ki se preverjajo glede na referenčno drevo odločitev. Velika odstopanja s sosednjimi vejami kažejo na prisotnost anomalije v vzorcu, ki se preverja.

Izdaja ControlFlag 1.0, orodja za prepoznavanje napak v kodi C

Kot primer zmogljivosti ControlFlaga so razvijalci analizirali izvorne kode projektov OpenSSL in cURL:

  • Nenormalni konstrukti “(s1 == NULL) ∧ (s2 == NULL)” in “(s1 == NULL) | (s2 == NULL)" , ki se ne ujemajo s pogosto uporabljenim vzorcem "(s1 == NULL) || (s2 == NULL)". Koda je odkrila tudi anomalije v izrazih »(-2 == rv)« (minus je bil tipkarska napaka) in »BIO_puts(bp, »:«) <= 0)« (v kontekstu preverjanja uspešnega zaključka funkcija bi moralo biti "== 0").
  • V cURL je bila odkrita napaka, ki je statični analizatorji niso zaznali pri uporabi elementa strukture “s->keepon”, ki je imel numerični tip, vendar je bil primerjan z logično vrednostjo TRUE.

Med značilnostmi različice ControlFlag 1.0 je popolna podpora za standardne predloge za jezik C in možnost zaznavanja nepravilnosti v pogojnih izrazih »if«. Na primer, pri analizi fragmenta kode "if (x = 7) y = x;" Sistem bo ugotovil, da stavek »če« običajno uporablja konstrukcijo »spremenljivka == število« za primerjavo številskih vrednosti, zato je zelo verjetno, da je »spremenljivka = število« v izrazu »če« posledica tipkarske napake. Komplet vključuje skript, ki vam omogoča prenos obstoječih repozitorijev jezika C na GitHub in njihovo uporabo za izdelavo modela. Na voljo so tudi že pripravljeni modeli, ki vam omogočajo, da takoj začnete preverjati kodo.

Vir: opennet.ru

Dodaj komentar