Intel ṣii koodu eto ẹkọ ẹrọ ControlFlag lati ṣe idanimọ awọn idun ninu koodu naa

Intel ti ṣe awari awọn idagbasoke ti o ni ibatan si iṣẹ iwadi ControlFlag, ti o ni ero lati ṣiṣẹda eto ẹkọ ẹrọ lati mu didara koodu dara sii. Ohun elo irinṣẹ ti a pese sile nipasẹ iṣẹ akanṣe ngbanilaaye, ti o da lori awoṣe ikẹkọ lori iye nla ti koodu ti o wa, lati ṣawari ọpọlọpọ awọn aṣiṣe ati awọn aiṣedeede ninu awọn ọrọ orisun ti a kọ ni awọn ede ipele giga bii C/C ++. Eto naa dara fun idamo ọpọlọpọ awọn iṣoro ni koodu, lati wiwa awọn titẹ ati awọn akojọpọ iru ti ko tọ, si wiwa awọn sọwedowo NULL ti o padanu ni awọn itọka ati awọn iṣoro iranti. Koodu ControlFlag ti kọ ni C++ ati pe o jẹ orisun ṣiṣi labẹ iwe-aṣẹ MIT.

Eto naa jẹ ẹkọ ti ara ẹni nipa kikọ awoṣe iṣiro ti koodu ti o wa tẹlẹ ti awọn iṣẹ akanṣe ṣiṣi ti a tẹjade ni GitHub ati awọn ibi ipamọ gbogbogbo ti o jọra. Ni ipele ẹkọ, eto naa ṣe ipinnu awọn ilana aṣoju fun kikọ awọn ẹya ninu koodu ati kọ igi syntactic ti awọn ọna asopọ laarin awọn ilana wọnyi, eyiti o ṣe afihan ṣiṣan ipaniyan koodu ninu eto naa. Bi abajade, igi ipinnu itọkasi kan ti ṣẹda ti o ṣajọpọ iriri ti idagbasoke gbogbo awọn ọrọ orisun ti a ṣe itupalẹ.

Koodu ti n ṣe idanwo lọ nipasẹ ilana ti o jọra ti idamo awọn ilana ti o ṣayẹwo lodi si igi ipinnu itọkasi kan. Awọn iyatọ nla pẹlu awọn ẹka adugbo tọkasi wiwa anomaly ninu awoṣe ti n ṣayẹwo. Eto naa tun gba laaye kii ṣe lati ṣe idanimọ aṣiṣe nikan ninu awoṣe, ṣugbọn tun daba atunṣe. Fun apẹẹrẹ, ninu koodu OpenSSL, ikole “(s1 == NULL) ∧ (s2 == NULL)” ni a rii, eyiti o waye ni awọn akoko 8 nikan ni igi sintasi, lakoko ti ẹka ti o sunmọ julọ pẹlu iye “(s1 ==) NULL) || (s2 == NULL)" waye nipa awọn akoko 7 ẹgbẹrun. Eto naa tun ṣe awari anomaly “(s1 == NULL) | (s2 == NULL)" eyiti o waye ni igba 32 ninu igi naa.

Intel ṣii koodu eto ẹkọ ẹrọ ControlFlag lati ṣe idanimọ awọn idun ninu koodu naa

Nigbati o ba n ṣe itupalẹ snippet koodu "ti o ba jẹ (x = 7) y = x;" eto naa ti pinnu pe “nọmba oniyipada ==” ikole ni a maa n lo ninu alaye “ti o ba” lati ṣe afiwe awọn iye nọmba, nitorinaa, pẹlu iṣeeṣe giga, itọkasi “ayipada = nọmba” ninu ikosile “ti o ba” jẹ idi nipasẹ a typo. Awọn atunnkanka aimi ti aṣa yoo tun gba iru aṣiṣe bẹ, ṣugbọn ko dabi wọn, ControlFlag ko lo awọn ofin ti a ti ṣetan ninu eyiti o nira lati rii gbogbo awọn aṣayan ti o ṣeeṣe, ṣugbọn da lori awọn iṣiro ti lilo gbogbo iru awọn iṣelọpọ ni nọmba nla ti ise agbese.

Gẹgẹbi idanwo kan, lilo ControlFlag ninu koodu orisun ti ohun elo CURL, eyiti a tọka nigbagbogbo bi apẹẹrẹ ti didara-giga ati koodu idaniloju, aṣiṣe ti ko ṣe akiyesi nipasẹ awọn olutupalẹ aimi ni a rii nigba lilo “s-> keeppon” ano be, eyi ti o ni nọmba nọmba, ṣugbọn a ṣe afiwe pẹlu iye boolian TÒÓTỌ. Ninu koodu OpenSSL, ni afikun si iṣoro ti o wa loke pẹlu "(s1 == NULL) ∧ (s2 == NULL)", awọn aiṣedeede tun wa ninu awọn ikosile "(-2 == rv)" (iyokuro jẹ typo. ) ati "BIO_puts(bp, ":")

orisun: opennet.ru

Fi ọrọìwòye kun