Intel iepene de ControlFlag masine-learsysteemkoade om bugs yn 'e koade te identifisearjen

Intel hat ûntjouwings ûntdutsen yn ferbân mei it ûndersyksprojekt ControlFlag, rjochte op it meitsjen fan in masine-learsysteem om koadekwaliteit te ferbetterjen. De toolkit taret troch it projekt lit, basearre op in model oplaat op in grut oantal besteande koade, ferskate flaters en anomalies opspoare yn boarneteksten skreaun yn talen op hege nivo lykas C/C++. It systeem is geskikt foar it identifisearjen fan ferskate soarten problemen yn koade, fan it opspoaren fan typfouten en ferkearde typekombinaasjes, oant it ûntdekken fan miste NULL-kontrôles yn pointers en ûnthâldproblemen. De ControlFlag-koade is skreaun yn C++ en is iepen boarne ûnder de MIT-lisinsje.

It systeem is selslearend troch it bouwen fan in statistysk model fan 'e besteande koade-array fan iepen projekten publisearre yn GitHub en ferlykbere iepenbiere repositories. Op it learstadium bepaalt it systeem typyske patroanen foar it bouwen fan struktueren yn 'e koade en bout in syntaktyske beam fan keppelings tusken dizze patroanen, dy't de stream fan koade-útfiering yn it programma reflektearret. As gefolch wurdt in referinsjebeslútbeam foarme dy't de ûnderfining kombinearret fan it ûntwikkeljen fan alle analysearre boarneteksten.

De koade dy't hifke wurdt, giet troch in ferlykber proses foar it identifisearjen fan patroanen dy't wurde kontrolearre tsjin in referinsjebeslútbeam. Grutte ferskillen mei oanbuorjende tûken jouwe oan op de oanwêzigens fan in anomaly yn it sjabloan dat kontrolearre wurdt. It systeem lit ek net allinich in flater yn 'e sjabloan identifisearje, mar ek in korreksje foarstelle. Bygelyks, yn 'e OpenSSL-koade waard de konstruksje "(s1 == NULL) ∧ (s2 == NULL)" fûn, dy't mar 8 kear yn 'e syntaksisbeam foarkaam, wylst de tichtstbyste tûke mei de wearde "(s1 == NULL) || (s2 == NULL)" barde sawat 7 tûzen kear. It systeem ûntdekte ek in anomaly "(s1 == NULL) | (s2 == NULL)" dy't 32 kear yn 'e beam barde.

Intel iepene de ControlFlag masine-learsysteemkoade om bugs yn 'e koade te identifisearjen

By it parsearjen fan it koadefragment "if (x = 7) y = x;" it systeem hat bepaald dat de "fariabele == getal" konstruksje meastentiids brûkt wurdt yn 'e "if" útspraak om numerike wearden te fergelykjen, dêrom, mei in hege kâns, wurdt de oantsjutting "fariabele = getal" yn 'e "if" ekspresje feroarsake troch in typflater. Tradysjonele statyske analysatoren soene sa'n flater fange, mar yn tsjinstelling ta harren brûkt ControlFlag gjin klearmakke regels wêryn it lestich is om alle mooglike opsjes te foarsjen, mar is basearre op 'e statistiken fan it brûken fan alle soarten konstruksjes yn in grut oantal projekten .

As eksperimint, mei it brûken fan ControlFlag yn 'e boarnekoade fan it cURL-hulpprogramma, dat faaks wurdt oanhelle as in foarbyld fan heechweardige en ferifiearre koade, waard in flater ûntdutsen dy't net opmurken waard troch statyske analysatoren by it brûken fan it struktuerelemint "s->keepon", dy't in numerike type hie, mar waard fergelike mei de Booleaanske wearde TRUE. Yn de OpenSSL-koade wiene der, neist it earderneamde probleem mei "(s1 == NULL) ∧ (s2 == NULL)", ek anomalies yn 'e útdrukkingen "(-2 == rv)" (de minus wie in typflater ) en "BIO_puts(bp, ":")

Boarne: opennet.ru

Add a comment