Kutolewa kwa ControlFlag 1.0, zana ya kutambua makosa katika msimbo wa C

Intel imechapisha toleo kuu la kwanza la zana ya ControlFlag 1.0, ambayo hukuruhusu kutambua hitilafu na hitilafu katika msimbo wa chanzo kwa kutumia mfumo wa kujifunza wa mashine uliofunzwa kwa idadi kubwa ya msimbo uliopo. Tofauti na wachambuzi wa tuli wa jadi, ControlFlag haitumii sheria zilizopangwa tayari, ambazo ni vigumu kutoa kwa chaguzi zote zinazowezekana, lakini inategemea takwimu za matumizi ya lugha mbalimbali za ujenzi katika idadi kubwa ya miradi iliyopo. Nambari ya ControlFlag imeandikwa katika C++ na iko wazi chini ya leseni ya MIT.

Mfumo huo unafunzwa kwa kuunda muundo wa takwimu wa safu zilizopo za msimbo wa miradi huria iliyochapishwa katika GitHub na hazina sawa za umma. Katika hatua ya mafunzo, mfumo huamua mifumo ya kawaida ya kujenga miundo katika kanuni na hujenga mti wa kisintaksia wa miunganisho kati ya mifumo hii, inayoakisi mtiririko wa utekelezaji wa msimbo katika programu. Kwa hivyo, mti wa kufanya maamuzi wa marejeleo huundwa ambao unachanganya uzoefu wa ukuzaji wa misimbo yote ya chanzo iliyochanganuliwa. Msimbo unaokaguliwa unapitia mchakato sawa wa kutambua ruwaza ambazo hutambulishwa dhidi ya mti wa uamuzi wa marejeleo. Tofauti kubwa na matawi ya jirani zinaonyesha kuwepo kwa hitilafu katika muundo unaoangaliwa.

Kutolewa kwa ControlFlag 1.0, zana ya kutambua makosa katika msimbo wa C

Kama mfano wa uwezo wa ControlFlag, wasanidi walichanganua misimbo ya chanzo ya miradi ya OpenSSL na cURL:

  • Miundo isiyo ya kawaida β€œ(s1 == NULL) ∧ (s2 == NULL)” na β€œ(s1 == NULL) | (s2 == NULL)" , ambayo hailingani na muundo unaotumiwa sana "(s1 == NULL) || (s2 == NULL)". Nambari hiyo pia ilibainisha hitilafu katika semi β€œ(-2 == rv)” (minus ilikuwa typo) na β€œBIO_puts(bp, β€œ:”) <= 0)” (katika muktadha wa kukagua kukamilishwa kwa mafanikio kwa kazi inapaswa kuwa "== 0").
  • Katika cURL, hitilafu iligunduliwa ambayo haikutambuliwa na vichanganuzi tuli wakati wa kutumia kipengele cha muundo "s->keepon", ambacho kilikuwa na aina ya nambari, lakini ililinganishwa na thamani ya boolean TRUE.

Miongoni mwa vipengele vya toleo la ControlFlag 1.0, kuna usaidizi kamili wa violezo vya kawaida vya lugha ya C na uwezo wa kugundua hitilafu katika misemo ya masharti ya "ikiwa". Kwa mfano, wakati wa kuchambua kipande cha msimbo "ikiwa (x = 7) y = x;" Mfumo utabainisha kuwa kauli ya "ikiwa" kwa kawaida hutumia muundo wa "kigeu == nambari" ili kulinganisha thamani za nambari, kwa hivyo kuna uwezekano mkubwa kwamba "kigeu = nambari" katika usemi wa "ikiwa" husababishwa na chapa. Seti hiyo inajumuisha hati inayokuruhusu kupakua hazina zilizopo za lugha ya C kwenye GitHub na kuzitumia kuunda modeli. Mifano zilizotengenezwa tayari zinapatikana pia, hukuruhusu kuanza kuangalia msimbo mara moja.

Chanzo: opennet.ru

Kuongeza maoni