Intel барои муайян кардани хатогиҳо дар код рамзи системаи омӯзиши мошини ControlFlag -ро кушод

Intel таҳияҳои марбут ба лоиҳаи тадқиқотии ControlFlag-ро кашф кард, ки ба эҷоди системаи омӯзиши мошинсозӣ барои беҳтар кардани сифати код нигаронида шудааст. Маҷмӯаи абзоре, ки лоиҳа таҳия кардааст, имкон медиҳад, ки дар асоси моделе, ки дар миқдори зиёди коди мавҷуда таълим дода шудааст, хатоҳо ва аномалияҳои гуногунро дар матнҳои сарчашма бо забонҳои сатҳи баланд, ба монанди C/C++, ошкор созад. Система барои муайян кардани намудҳои гуногуни мушкилот дар код мувофиқ аст, аз ошкор кардани хатогиҳо ва таркиби нодурусти намудҳо то ошкор кардани чекҳои NULL дар нишондиҳандаҳо ва мушкилоти хотира. Рамзи ControlFlag дар C++ навишта шудааст ва дар зери иҷозатномаи MIT манбаи кушода аст.

Система тавассути сохтани модели омории маҷмӯи кодҳои мавҷудаи лоиҳаҳои кушода, ки дар GitHub ва анборҳои шабеҳи ҷамъиятӣ нашр шудаанд, мустақилона омӯхта мешавад. Дар марҳилаи омӯзиш, система намунаҳои маъмулии сохтани сохторҳоро дар код муайян мекунад ва дарахти синтаксиси робитаҳои байни ин қолабҳоро месозад, ки ҷараёни иҷрои кодро дар барнома инъикос мекунад. Дар натиља дарахти ќарорњои истинодї ташаккул меёбад, ки таљрибаи коркарди њамаи матнњои сарчашмањои тањлилшударо муттањид мекунад.

Рамзи санҷидашуда аз раванди шабеҳи муайян кардани намунаҳое мегузарад, ки дар муқобили дарахти қарори истинод тафтиш карда мешаванд. Тафовутҳои калон бо шохаҳои ҳамсоя мавҷудияти аномалия дар қолаби тафтишшавандаро нишон медиҳанд. Система инчунин имкон медиҳад, ки на танҳо хатогиро дар қолаб муайян кунад, балки инчунин ислоҳро пешниҳод кунад. Масалан, дар рамзи OpenSSL сохтори "(s1 == NULL) ∧ (s2 == NULL)" ёфт шуд, ки дар дарахти синтаксис ҳамагӣ 8 маротиба рух додааст, дар ҳоле ки шохаи наздиктарин бо арзиши "(s1 ==) NULL) || (s2 == NULL)" тақрибан 7 ҳазор маротиба рух додааст. Система инчунин аномалияро ошкор кард "(s1 == NULL) | (s2 == NULL)" ки дар дарахт 32 маротиба рух додааст.

Intel барои муайян кардани хатогиҳо дар код рамзи системаи омӯзиши мошини ControlFlag -ро кушод

Ҳангоми таҳлили порчаи код "агар (x = 7) y = x;" система муайян кардааст, ки сохтори "тағйирёбанда == рақам" одатан дар изҳороти "агар" барои муқоисаи арзишҳои ададӣ истифода мешавад, аз ин рӯ, бо эҳтимолияти баланд, нишонаи "тағйирёбанда = рақам" дар ифодаи "агар" аз он иборат аст хатои хаттӣ. Анализаторҳои статикии анъанавӣ низ чунин хатогиро ошкор мекунанд, аммо бар хилофи онҳо, ControlFlag қоидаҳои тайёреро истифода намебарад, ки дар онҳо пешгӯии ҳамаи вариантҳои имконпазир душвор аст, балки ба омори истифодаи ҳама намуди конструксияҳо дар шумораи зиёди конструксияҳо асос ёфтааст. лоиҳаҳо.

Ҳамчун таҷриба, бо истифода аз ControlFlag дар коди сарчашмаи утилитаи cURL, ки аксар вақт ҳамчун намунаи коди баландсифат ва тасдиқшуда оварда мешавад, ҳангоми истифодаи унсури сохтори "s->keepon" хатои аз ҷониби анализаторҳои статикӣ нодида гирифташуда ошкор карда шуд, ки навъи ададӣ дошт, аммо бо арзиши мантиқии TRUE муқоиса карда шуд. Дар рамзи OpenSSL, ба ғайр аз мушкилоти дар боло зикршуда бо "(s1 == NULL) ∧ (s2 == NULL)", дар ибораҳои "(-2 == rv)" низ аномалияҳо вуҷуд доштанд (минус хатои хаттӣ буд ) ва "BIO_puts(bp, ":")

Манбаъ: opennet.ru

Илова Эзоҳ