ControlFlag 1.0 izlaidums, rīks kļūdu identificēšanai C kodā

Intel ir publicējis pirmo lielāko ControlFlag 1.0 rīka izlaidumu, kas ļauj identificēt kļūdas un anomālijas avota kodā, izmantojot mašīnmācīšanās sistēmu, kas apmācīta lielam daudzumam esošā koda. Atšķirībā no tradicionālajiem statiskajiem analizatoriem ControlFlag nepiemēro gatavus noteikumus, kuros ir grūti paredzēt visas iespējamās iespējas, bet ir balstīts uz statistiku par dažādu valodas konstrukciju izmantošanu daudzos esošos projektos. ControlFlag kods ir rakstīts C++ valodā un ir atvērts ar MIT licenci.

Sistēma tiek apmācīta, izveidojot statistisko modeli esošajam atvērtā pirmkoda projektu koda masīvam, kas publicēts GitHub un līdzīgos publiskajos krātuvēs. Apmācības posmā sistēma nosaka tipiskus modeļus koda struktūru konstruēšanai un izveido sintaktisko savienojumu koku starp šiem modeļiem, atspoguļojot koda izpildes plūsmu programmā. Rezultātā tiek izveidots atsauces lēmumu pieņemšanas koks, kas apvieno visu analizēto pirmkodu izstrādes pieredzi. Pārskatāmajam kodam tiek veikts līdzīgs process, lai identificētu modeļus, kas tiek pārbaudīti, salīdzinot ar atsauces lēmumu koku. Lielas neatbilstības ar blakus esošajiem zariem norāda uz pārbaudāmā modeļa anomāliju.

ControlFlag 1.0 izlaidums, rīks kļūdu identificēšanai C kodā

Kā ControlFlag iespēju piemēru izstrādātāji analizēja OpenSSL un cURL projektu pirmkodus:

  • Anomālas konstrukcijas “(s1 == NULL) ∧ (s2 == NULL)” un “(s1 == NULL) | (s2 == NULL)" , kas neatbilst parasti izmantotajam modelim "(s1 == NULL) || (s2 == NULL)". Kods arī identificēja anomālijas izteicienos “(-2 == rv)” (mīnus bija drukas kļūda) un “BIO_puts(bp, “:”) <= 0)” (kontekstā, lai pārbaudītu, vai funkcijai tai vajadzēja būt “== 0”).
  • Vietnē cURL tika atklāta kļūda, kuru statiskie analizatori neatklāja, izmantojot struktūras elementu “s->keepon”, kam bija skaitlisks tips, bet tika salīdzināta ar Būla vērtību TRUE.

Starp ControlFlag 1.0 versijas funkcijām ir pilns C valodas standarta veidņu atbalsts un iespēja noteikt anomālijas nosacījuma “ja” izteiksmēs. Piemēram, analizējot koda fragmentu “ja (x = 7) y = x;” Sistēma noteiks, ka “if” priekšraksts parasti izmanto konstrukciju “mainīgais == skaitlis”, lai salīdzinātu skaitliskās vērtības, tāpēc ir ļoti iespējams, ka “mainīgais = skaitlis” izteiksmē “if” ir radījis drukas kļūdas. Komplektā ir iekļauts skripts, kas ļauj lejupielādēt GitHub esošās C valodas repozitorijus un izmantot tos modeļa izveidei. Ir pieejami arī gatavie modeļi, kas ļauj nekavējoties sākt pārbaudīt kodu.

Avots: opennet.ru

Pievieno komentāru