Liberasyon ControlFlag 1.0, yon zouti pou idantifye erè nan kòd C

Intel te pibliye premye gwo lage zouti ControlFlag 1.0, ki pèmèt ou idantifye erè ak anomali nan kòd sous lè l sèvi avèk yon sistèm aprantisaj machin ki fòme sou yon gwo kantite kòd ki egziste deja. Kontrèman ak analizè tradisyonèl estatik, ControlFlag pa aplike règ pare yo, kote li difisil pou bay tout opsyon posib, men li baze sou estatistik sou itilizasyon divès kalite lang nan yon gwo kantite pwojè ki egziste deja. Kòd ControlFlag la ekri an C++ epi li gen sous lisans MIT.

Sistèm nan fòme nan bati yon modèl estatistik nan etalaj kòd ki egziste deja nan pwojè sous louvri ki te pibliye nan GitHub ak depo piblik menm jan an. Nan etap fòmasyon an, sistèm nan detèmine modèl tipik pou konstwi estrikti nan kòd la epi bati yon pye bwa sentaktik nan koneksyon ant modèl sa yo, ki reflete koule nan ekzekisyon kòd nan pwogram nan. Kòm yon rezilta, yon pye bwa referans pou pran desizyon fòme ki konbine eksperyans nan devlopman nan tout kòd sous analize. Kòd ki anba revizyon an sibi yon pwosesis menm jan an pou idantifye modèl yo tcheke ak yon pye bwa desizyon referans. Gwo diferans ak branch vwazen yo endike prezans yon anomali nan modèl yo tcheke a.

Liberasyon ControlFlag 1.0, yon zouti pou idantifye erè nan kòd C

Kòm yon egzanp kapasite ControlFlag a, devlopè yo analize kòd sous yo nan OpenSSL ak pwojè cURL:

  • Konstwi anòmal "(s1 == NULL) ∧ (s2 == NULL)" ak "(s1 == NULL) | (s2 == NULL)" , ki pa matche ak modèl yo souvan itilize "(s1 == NULL) || (s2 == NULL)". Kòd la te idantifye tou anomali nan ekspresyon "(-2 == rv)" (mwens la se te yon typo) ak "BIO_puts(bp, ":") <= 0)" (nan kontèks la nan tcheke fini siksè nan fonksyon li ta dwe "== 0").
  • Nan cURL, yo te dekouvri yon erè ki pa te detekte pa analizè estatik lè w ap itilize eleman estrikti "s->keepon", ki te gen yon kalite nimerik, men yo te konpare ak valè boolean TRUE.

Pami karakteristik yo nan vèsyon an ControlFlag 1.0, gen sipò konplè pou modèl estanda pou lang C a ak kapasite nan detekte anomali nan ekspresyon kondisyonèl "si". Pa egzanp, lè w ap analize fragman kòd la "si (x = 7) y = x;" Sistèm nan pral detèmine ke deklarasyon "si" anjeneral itilize konstriksyon "varyab == nimewo" pou konpare valè nimerik, kidonk li gen anpil chans ke "varyab = nimewo" nan ekspresyon "si" a te koze pa yon typo. Twous la gen ladann yon script ki pèmèt ou telechaje depo langaj C ki deja egziste sou GitHub epi sèvi ak yo pou konstwi modèl la. Modèl ki pare yo disponib tou, sa ki pèmèt ou imedyatman kòmanse tcheke kòd la.

Sous: opennet.ru

Add nouvo kòmantè