Intel koda pergala fêrbûna makîneya ControlFlag vekir da ku xeletiyên di kodê de nas bike

Intel pêşkeftinên têkildarî projeya lêkolînê ControlFlag vedîtiye ku armanc ew e ku pergalek fêrbûna makîneyê biafirîne da ku kalîteya kodê baştir bike. Amûra ku ji hêla projeyê ve hatî amadekirin dihêle, li ser bingeha modelek ku li ser hejmareke mezin a koda heyî hatî perwerdekirin, di metnên çavkaniyê yên ku bi zimanên asta bilind ên wekî C/C++ hatine nivîsandin de xeletî û anomaliyên cihêreng nas bike. Pergal ji bo tesbîtkirina cûrbecûr pirsgirêkên di kodê de, ji tespîtkirina tîpên tîpan û berhevokên tîpên nerast, heya tespîtkirina kontrolên nirxa NULL yên winda di nîşankeran û pirsgirêkên bîranînê de maqûl e. Koda ControlFlag bi C ++-ê hatî nivîsandin û di bin lîsansa MIT de vekirî ye.

Pergal bi avakirina modelek statîstîkî ya rêzika kodê ya heyî ya projeyên çavkaniya vekirî ya ku di GitHub û depoyên gelemperî yên mîna wan de têne weşandin, bixwe fêr dibe. Di qonaxa perwerdehiyê de, pergal ji bo avakirina strukturên di kodê de qalibên tîpîk destnîşan dike û dara hevoksaziyê ya girêdanên di navbera van nimûneyan de ava dike, ku herikîna pêkanîna kodê di bernameyê de nîşan dide. Wekî encamek, dara biryargirtinê ya referansê pêk tê ku ezmûna pêşkeftinê ya hemî kodên çavkaniyê yên analîzkirî berhev dike.

Koda di bin çavdêriyê de pêvajoyek bi heman rengî ya nasandina qalibên ku li hember dara biryara referansê têne kontrol kirin derbas dibe. Nakokiyên mezin bi şaxên cîran re hebûna anomalî di nimûneya ku tê kontrol kirin de destnîşan dike. Pergal di heman demê de dihêle hûn ne tenê xeletiyek di şablonê de nas bikin, lê di heman demê de rastkirinek jî pêşniyar bikin. Mînakî, di koda OpenSSL de, avakirina "(s1 == NULL) ∧ (s2 == NULL)" hate nas kirin, ku di dara hevoksaziyê de tenê 8 caran xuya bû, lê şaxê herî nêzîk bi nirxa "(s1 == NULL) || (s2 == NULL)” bi qasî 7 hezar car pêk hatiye. Pergalê her weha anomalîyek "(s1 == NULL) | (s2 == NULL)” ku 32 caran di darê de xuya bû.

Intel koda pergala fêrbûna makîneya ControlFlag vekir da ku xeletiyên di kodê de nas bike

Dema analîzkirina perçeya kodê "heke (x = 7) y = x;" Pergalê destnîşan kir ku avakirina "guhêrbar == jimar" bi gelemperî di operatora "heke" de tê bikar anîn da ku nirxên hejmarî bide ber hev, ji ber vê yekê bi îhtimaleke mezin nîşana "guhêrbar = hejmar" di îfadeya "heke" de ji hêla a. tîpî. Analîzatorên statîk ên kevneşopî dê xeletiyek wusa bigirta, lê berevajî wan, ControlFlag qaîdeyên amade bicîh nayîne, ku tê de peydakirina hemî vebijarkên gengaz dijwar e, lê li ser bingeha statîstîkên karanîna strukturên cihêreng di hejmareke mezin de ye. yên projeyan.

Wekî ceribandinek, bi karanîna ControlFlag-ê di koda çavkaniyê ya kargêriya cURL de, ku pir caran wekî mînakek kodek kalîteya bilind û ceribandinê tête binav kirin, xeletiyek ku ji hêla analyzerên statîk ve nehate tesbît kirin dema ku hêmana strukturê "s->keepon" bikar tîne hate nas kirin. ku celebek hejmarî bû, lê bi nirxa Boolean TRUE re hate berhev kirin. Di koda OpenSSL-ê de, ji bilî pirsgirêka jorîn bi "(s1 == NULL) ∧ (s2 == NULL)", di bêjeyên "(-2 == rv)" de jî anomalî hatin tesbît kirin (minus bû. xeletiyek tîp) û "BIO_puts(bp, ":")

Source: opennet.ru

Add a comment