Intel ընկերությունը բացել է ControlFlag մեքենայական ուսուցման համակարգի կոդը՝ ծրագրի մեջ սխալների հայտնաբերելու համար

Intel ընկերությունը բացեց ControlFlag հետազոտական ​​հայեցակարգի աշխատանքները, որը նպատակաուղղված է ստեղծելու մեքենայական ուսուցման համակարգ՝ կոդի որակը բարձրացնելու համար: Աշխատանքները ներկայացված գործիքները թույլ են տալիս տարբեր սխալներ և անոմալիաներ հայտնաբերել բարձր մակարդակով լեզուներով՝ C/C++-ով գրնասված աղբյուրներում, հիմք ընդունելով մեծ քանակությամբ առկա կոդի վրա ուսումնասիրված մոդել: Համակարգը կարող է ազդանշել կոդում տարբեր խնդիրների մասին, սկսած սխալ գրառումներից և սխալ տիպերի համադրություններից մինչև NULL արժեքի բացակայության ստուգումներ ցուցիչներում և հիշողության հետ աշխատելու խնդիրները: ControlFlag կոդը գրանցված է C++ լեզվով և բացման MIT լիցենզիայով:

Համակարգը ինքնուսուցվում է՝ կառուցելով խիստ վիճակագրական մոդել՝ GitHub-ում և նման հասարակական պահոցներում հրապարակված բաց նախագծերի առկա կոդի զանգվածի հիման վրա: Ուսուցման փուլում համակարգը սահմանում է կոդի կառուցվածքների բնորոշ ձևեր և կառուցում է այդ ձևերի միջև կապերի համախմբված հղումների սինտաքսային ծառ, որը ցուցադրում է ծրագրի աշխատանքի հոսքը: Ինչպես սպասվում էր, ձևավորվում է որոշում կայացնելու նմուշային ծառ, որը միավորում է բոլոր վերլուծված աղբյուրների մշակման փորձը:

Ճիշտ կոդի համար իրականացվում է նման գործընթաց՝ բնութագրվող նմուշները ճշգրտելով որոշման նմուշային ծառի հետ: Մեծ տարբերությունները հարակից ճյուղերի հետ վկայում են ստուգվող նմուշում անոմալիայի առկայության մասին: Համակարգը թույլ է տալիս ոչ միայն ի հայտ բերել սխալը նմուշում, այլ նաև առաջարկել ուղղում: Օրինակ՝ OpenSSL կոդում հայտնաբերվել է «(s1 == NULL) ∧ (s2 == NULL)» կառուցվածքը, որը հանդիպել է սինտաքսային ծառում միայն 8 անգամ, երբ մոտակա ճյուղը, որը «(s1 == NULL) || (s2 == NULL)» արժեքով է, հանդիպել է մոտ 7000 անգամ: Համակարգը նաև հայտնաբերել է «(s1 == NULL) | (s2 == NULL)» անոմալիան, որը ծառում հայտնվել է 32 անգամ:

Intel ընկերությունը բացել է ControlFlag մեքենայական ուսուցման համակարգի կոդը՝ ծրագրի մեջ սխալների հայտնաբերելու համար

Կոդի հատվածը՝ «if (x = 7) y = x;», վերլուծելու ժամանակ համակարգը շարունակեց որոշել, որ սովորաբար «if» օպերատորում թվային արժեքների համեմատության համար օգտագործվում է «փոփոխական == թիվ» կառուցվածքը, ուստի «փոփոխական = թիվ» նշելը «if»-ում մեծ հավանականությամբ կլինի վրիպակ: Այսպիսի սխալներ կնկատեին նաև ավանդական ստատիկ վերլուծիչները, սակայն դրանցից տարբերվելով ControlFlag-ն օգտագործում է վիճակագրություն՝ ամբողջական կառուցվածքների տարբերակներ հնարավոր բոլոր դեպքերում հասկացողություն չունեցող կանոնների փոխարեն, երբ դժվար է կանխատեսել բոլոր տարբերակները:

ControlFlag-ի միջոցով cURL_util-ի սկզբնական տեքստերում, որը հաճախ բերվում է որպես որակյալ և ստուգված կոդի օրինակ, հայտնաբերվել է ստատիկ վերլուծիչների կողմից աննկատ մնացած սխալ, որտեղ «s->keepon» կառուցվածքից էր և թվային տեսակ ուներ, բայց համեմատվում էր TRUE բուլյան արժեքի հետ։ OpenSSL կոդում, ինչպես նաև վերոնշյալ «(s1 == NULL) ∧ (s2 == NULL)» խնդրին, հայտնաբերվել են anomalies «(-2 == rv)» արտահայտություններում (մինուսը սխալ տպագրություն էր) և «BIO_puts(bp, «:»)»։

Ընտանիք: opennet.ru

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster