Intel opið ControlFlag vélnámskerfi til að bera kennsl á kóðavillur

Intel hefur uppgötvað þróun sem tengist ControlFlag rannsóknarverkefninu sem miðar að því að búa til vélnámskerfi til að bæta kóða gæði. Verkfærakistan sem verkefnið útbjó gerir, byggt á líkani sem er þjálfað á miklu magni af núverandi kóða, til að bera kennsl á ýmsar villur og frávik í frumtextum sem eru skrifaðir á háu tungumálum eins og C/C++. Kerfið hentar til að bera kennsl á ýmsar tegundir vandamála í kóða, allt frá því að greina innsláttarvillur og rangar tegundasamsetningar, til að greina vantar NULL gildi athuganir í ábendingum og minnisvandamálum. ControlFlag kóðinn er skrifaður í C++ og er opinn undir MIT leyfinu.

Kerfið er sjálflært með því að byggja upp tölfræðilegt líkan af núverandi kóðafylki af opnum uppsprettu verkefnum sem birt eru í GitHub og svipuðum opinberum geymslum. Á þjálfunarstigi ákvarðar kerfið dæmigerð mynstur til að smíða mannvirki í kóðanum og byggir upp setningafræðilegt tré af tengingum á milli þessara mynstur, sem endurspeglar flæði kóða keyrslu í forritinu. Fyrir vikið myndast viðmiðunarákvarðanatré sem sameinar þróunarreynslu allra greindra frumkóða.

Kóðinn sem er til skoðunar gengur í gegnum svipað ferli til að bera kennsl á mynstur sem er athugað með viðmiðunarákvörðunartré. Mikið misræmi við nærliggjandi greinar gefur til kynna tilvist fráviks í mynstrinu sem verið er að athuga. Kerfið gerir þér einnig kleift að bera kennsl á villu í sniðmátinu, heldur einnig að stinga upp á leiðréttingu. Til dæmis, í OpenSSL kóðanum, var byggingin „(s1 == NULL) ∧ (s2 == NULL)“ auðkennd, sem birtist í setningafræðitrénu aðeins 8 sinnum, en næsta grein með gildinu „(s1 == NULL) || (s2 == NULL)“ kom fyrir um 7 þúsund sinnum. Kerfið greindi einnig frávik „(s1 == NULL) | (s2 == NULL)“ sem birtist 32 sinnum í trénu.

Intel opið ControlFlag vélnámskerfi til að bera kennsl á kóðavillur

Þegar þú greinir kóðabrotið „ef (x = 7) y = x;“ Kerfið hefur komist að þeirri niðurstöðu að „breytu == tala“ smíðin er venjulega notuð í „ef“ stjórnandanum til að bera saman tölugildi, svo það er mjög líklegt að vísbendingin „breyta = tala“ í „ef“ tjáningunni stafi af innsláttarvilla. Hefðbundin kyrrstöðugreiningartæki hefðu náð slíkri villu, en ólíkt þeim notar ControlFlag ekki tilbúnar reglur þar sem erfitt er að gera ráð fyrir öllum mögulegum valkostum heldur byggir á tölfræði um notkun ýmissa mannvirkja í miklum fjölda af verkefnum.

Sem tilraun, með því að nota ControlFlag í frumkóða cURL tólsins, sem oft er nefnt sem dæmi um hágæða og prófaðan kóða, fannst villa sem ekki fannst af kyrrstöðugreiningartækjum þegar byggingarþátturinn „s->keepon“ var notaður. sem var með tölustafi, en var borið saman við Boolean gildið TRUE . Í OpenSSL kóðanum, auk ofangreinds vandamáls með "(s1 == NULL) ∧ (s2 == NULL)", voru frávik einnig auðkennd í orðunum "(-2 == rv)" (mínusinn var innsláttarvillu) og "BIO_puts(bp, ":")

Heimild: opennet.ru

Bæta við athugasemd