Intel fetħet il-kodiċi tas-sistema ta 'tagħlim tal-magni ControlFlag biex tidentifika bugs fil-kodiċi

Intel skopriet żviluppi relatati mal-proġett ta’ riċerka ControlFlag, immirat lejn il-ħolqien ta’ sistema ta’ tagħlim tal-magni biex ittejjeb il-kwalità tal-kodiċi. Is-sett ta’ għodod imħejji mill-proġett jippermetti, abbażi ta’ mudell imħarreġ fuq ammont kbir ta’ kodiċi eżistenti, li jinstabu diversi żbalji u anomaliji f’testi sors miktuba f’lingwi ta’ livell għoli bħal C/C++. Is-sistema hija adattata biex tidentifika diversi tipi ta 'problemi fil-kodiċi, mill-iskoperta ta' typos u kombinazzjonijiet ta 'tipi mhux korretti, għal skoperta ta' kontrolli NULL mitlufa f'pointers u problemi ta 'memorja. Il-kodiċi ControlFlag huwa miktub f'C++ u huwa sors miftuħ taħt il-liċenzja MIT.

Is-sistema qed titgħallem lilha nnifisha billi tibni mudell statistiku tal-firxa tal-kodiċi eżistenti ta 'proġetti miftuħa ppubblikati f'GitHub u repożitorji pubbliċi simili. Fl-istadju tat-tagħlim, is-sistema tiddetermina mudelli tipiċi għall-kostruzzjoni ta 'strutturi fil-kodiċi u tibni siġra sintattika ta' rabtiet bejn dawn ix-xejriet, li tirrifletti l-fluss ta 'eżekuzzjoni tal-kodiċi fil-programm. Bħala riżultat, tiġi ffurmata siġra tad-deċiżjonijiet ta' referenza li tgħaqqad l-esperjenza tal-iżvilupp tat-testi sors analizzati kollha.

Il-kodiċi li qed jiġi ttestjat jgħaddi minn proċess simili ta 'identifikazzjoni ta' mudelli li huma kkontrollati ma 'siġra ta' deċiżjoni ta 'referenza. Diskrepanzi kbar ma 'fergħat ġirien jindikaw il-preżenza ta' anomalija fil-mudell li qed jiġi ċċekkjat. Is-sistema tippermetti wkoll mhux biss li jiġi identifikat żball fil-mudell, iżda wkoll li tissuġġerixxi korrezzjoni. Pereżempju, fil-kodiċi OpenSSL, instabet il-kostruzzjoni “(s1 == NULL) ∧ (s2 == NULL)”, li seħħet biss 8 darbiet fis-siġra tas-sintassi, filwaqt li l-eqreb fergħa bil-valur “(s1 == NULL) || (s2 == NULL)" seħħet madwar 7 elef darba. Is-sistema sabet ukoll anomalija “(s1 == NULL) | (s2 == NULL)" li seħħet 32 ​​darba fis-siġra.

Intel fetħet il-kodiċi tas-sistema ta 'tagħlim tal-magni ControlFlag biex tidentifika bugs fil-kodiċi

Meta teżamina s-snippet tal-kodiċi "jekk (x = 7) y = x;" is-sistema ddeterminat li l-kostruzzjoni "varjabbli == numru" normalment tintuża fid-dikjarazzjoni "jekk" biex tqabbel il-valuri numeriċi, għalhekk, bi probabbiltà għolja, l-indikazzjoni "varjabbli = numru" fl-espressjoni "jekk" hija kkawżata minn typo. Analizzaturi statiċi tradizzjonali jaqbdu wkoll żball bħal dan, iżda b'differenza minnhom, ControlFlag ma jużax regoli lesti li fihom huwa diffiċli li wieħed jipprevedi l-għażliet kollha possibbli, iżda huwa bbażat fuq l-istatistika tal-użu ta 'kull tip ta' kostruzzjoni f'numru kbir ta ' proġetti.

Bħala esperiment, bl-użu ta ' ControlFlag fil-kodiċi tas-sors tal-utilità cURL, li ħafna drabi hija ċċitata bħala eżempju ta' kodiċi ta 'kwalità għolja u verifikata, ġie skopert żball inosservat minn analizzaturi statiċi meta jintuża l-element ta' struttura "s->keepon", li kellu tip numeriku, iżda kien imqabbel mal-valur boolean TRUE . Fil-kodiċi OpenSSL, minbarra l-problema ta 'hawn fuq ma' "(s1 == NULL) ∧ (s2 == NULL)", kien hemm ukoll anomaliji fl-espressjonijiet "(-2 == rv)" (in-nuqqas kien typo ) u "BIO_puts(bp, ":")

Sors: opennet.ru

Żid kumment