Gefa út ControlFlag 1.0, tæki til að bera kennsl á villur í C ​​kóða

Intel hefur gefið út fyrstu stóru útgáfuna af ControlFlag 1.0 tólinu, sem gerir þér kleift að bera kennsl á villur og frávik í frumkóða með því að nota vélanámskerfi sem er þjálfað á miklu magni af núverandi kóða. Ólíkt hefðbundnum kyrrstöðugreiningartækjum beitir ControlFlag ekki tilbúnum reglum, þar sem erfitt er að gera ráð fyrir öllum mögulegum valkostum, heldur byggir á tölfræði um notkun ýmissa tungumálasmíða í miklum fjölda núverandi verkefna. ControlFlag kóðinn er skrifaður í C++ og er opinn undir MIT leyfinu.

Kerfið er þjálfað með því að byggja upp tölfræðilegt líkan af núverandi kóða fylki opinn-uppspretta verkefna 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.

Gefa út ControlFlag 1.0, tæki til að bera kennsl á villur í C ​​kóða

Sem dæmi um getu ControlFlag greindu verktaki frumkóða OpenSSL og cURL verkefna:

  • Óeðlilegar smíðar “(s1 == NULL) ∧ (s2 == NULL)” og “(s1 == NULL) | (s2 == NULL)" , sem passa ekki við algengt mynstur "(s1 == NULL) || (s2 == NULL)". Kóðinn benti einnig á frávik í orðatiltækjunum „(-2 == rv)“ (mínus var innsláttarvilla) og „BIO_puts(bp, „:“) <= 0)“ (í tengslum við að kanna að vel hafi verið lokið fall það hefði átt að vera "== 0").
  • Í cURL uppgötvaðist villa sem var ekki greind með kyrrstöðugreiningartækjum við notkun uppbyggingarþáttarins „s->keepon“, sem var með tölustafi, en var borin saman við Boolean gildið TRUE.

Meðal eiginleika ControlFlag 1.0 útgáfunnar er fullur stuðningur við staðlað sniðmát fyrir C tungumálið og getu til að greina frávik í skilyrtum „ef“ tjáningum. Til dæmis, þegar þú greinir kóðabrotið „ef (x = 7) y = x;“ Kerfið mun ákvarða að „ef“ setningin notar venjulega „breytu == tala“ smíðina til að bera saman tölugildi, svo það er mjög líklegt að „breytan = tala“ í „ef“ tjáningunni sé af völdum prentvillu. Settið inniheldur handrit sem gerir þér kleift að hlaða niður núverandi C tungumálageymslum á GitHub og nota þær til að smíða líkanið. Tilbúnar gerðir eru einnig fáanlegar, sem gerir þér kleift að byrja strax að athuga kóðann.

Heimild: opennet.ru

Bæta við athugasemd