Intel avas ControlFlag masinĂ”ppesĂŒsteemi koodi, et tuvastada koodis olevad vead

Intel on avastanud uurimisprojektiga ControlFlag seotud arendused, mille eesmĂ€rk on luua masinĂ”ppesĂŒsteem koodi kvaliteedi parandamiseks. Projekti koostatud tööriistakomplekt vĂ”imaldab suurel hulgal olemasoleval koodil treenitud mudeli pĂ”hjal tuvastada erinevaid vigu ja kĂ”rvalekaldeid kĂ”rgetasemelistes keeltes, nĂ€iteks C/C++, kirjutatud lĂ€htetekstides. SĂŒsteem sobib erinevate koodiprobleemide tuvastamiseks, alustades kirjavigade ja valede tĂŒĂŒbikombinatsioonide tuvastamisest, lĂ”petades osutite vahelejÀÀnud NULL-kontrollide ja mĂ€luprobleemide tuvastamisega. ControlFlagi kood on kirjutatud C++ keeles ja on avatud lĂ€htekoodiga MIT litsentsi all.

SĂŒsteem Ă”pib ise, luues GitHubis ja sarnastes avalikes hoidlates avaldatud avatud projektide olemasoleva koodimassiivi statistilise mudeli. Õppimisetapis mÀÀrab sĂŒsteem koodis struktuuride konstrueerimiseks tĂŒĂŒpilised mustrid ja loob nende mustrite vahel linkidest sĂŒntaktilise puu, mis kajastab programmis koodi tĂ€itmise voogu. Selle tulemusena moodustub viiteotsuste puu, mis ĂŒhendab kĂ”igi analĂŒĂŒsitud lĂ€htetekstide arendamise kogemuse.

Testitav kood lĂ€bib sarnase protsessi, mille kĂ€igus tuvastatakse mustrid, mida vĂ”rreldakse vĂ”rdlusotsuste puuga. Suured lahknevused naaberharudega nĂ€itavad anomaalia olemasolu kontrollitavas mallis. Samuti vĂ”imaldab sĂŒsteem mitte ainult mallis viga tuvastada, vaid ka parandusettepanekut teha. NĂ€iteks OpenSSL koodis leiti konstruktsioon “(s1 == NULL) ∧ (s2 == NULL)”, mis esines sĂŒntaksipuus vaid 8 korda, samas kui lĂ€him haru vÀÀrtusega “(s1 == NULL) || (s2 == NULL)" esines umbes 7 tuhat korda. SĂŒsteem tuvastas ka anomaalia “(s1 == NULL) | (s2 == NULL)", mis esines puus 32 korda.

Intel avas ControlFlag masinĂ”ppesĂŒsteemi koodi, et tuvastada koodis olevad vead

KoodilĂ”igu parsimisel "if (x = 7) y = x;" sĂŒsteem on kindlaks teinud, et "if"-lauses kasutatakse tavaliselt arvuliste vÀÀrtuste vĂ”rdlemiseks konstruktsiooni "muutuja == number", mistĂ”ttu suure tĂ”enĂ€osusega pĂ”hjustab "if" avaldises tĂ€hise "muutuja = arv" kirjaviga. Traditsioonilised staatilised analĂŒsaatorid tabaksid sellise vea, kuid erinevalt neist ei kasuta ControlFlag valmis reegleid, milles on raske kĂ”iki vĂ”imalikke valikuid ette nĂ€ha, vaid pĂ”hineb igasuguste konstruktsioonide kasutamise statistikal vĂ€ga paljudes projektides. .

Katsena, kasutades cURL-i utiliidi lĂ€htekoodis ControlFlag'i, mida sageli tuuakse kvaliteetse ja kontrollitud koodi nĂ€itena, tuvastati struktuurielemendi "s->keepon" kasutamisel staatiliste analĂŒsaatorite poolt mĂ€rkamatu viga. millel oli numbritĂŒĂŒp, kuid seda vĂ”rreldi tĂ”evÀÀrtusega TRUE . OpenSSL-koodis esines lisaks ĂŒlaltoodud probleemile "(s1 == NULL) ∧ (s2 == NULL)" anomaaliaid ka avaldistes "(-2 == rv)" (miinus oli kirjaviga ) ja "BIO_puts(bp, ":")

Allikas: opennet.ru

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster