Liberigo de ControlFlag 1.0, ilo por identigi erarojn en C-kodo

Intel publikigis la unuan gravan eldonon de la ilo ControlFlag 1.0, kiu permesas vin identigi erarojn kaj anomaliojn en fontkodo uzante maŝinlernsistemon trejnitan sur granda kvanto de ekzistanta kodo. Male al tradiciaj senmovaj analiziloj, ControlFlag ne aplikas pretajn regulojn, en kiuj estas malfacile provizi ĉiujn eblajn opciojn, sed baziĝas sur statistiko pri la uzo de diversaj lingvokonstruaĵoj en granda nombro da ekzistantaj projektoj. La ControlFlag-kodo estas skribita en C++ kaj estas malfermfonta sub la MIT-licenco.

La sistemo estas trejnita konstruante statistikan modelon de la ekzistanta kodaro de malfermfontaj projektoj publikigitaj en GitHub kaj similaj publikaj deponejoj. En la trejnadstadio, la sistemo determinas tipajn padronojn por konstruado de strukturoj en la kodo kaj konstruas sintaksan arbon de ligoj inter tiuj padronoj, reflektante la fluon de kodekzekuto en la programo. Kiel rezulto, referenca decida arbo estas formita, kiu kombinas la evoluan sperton de ĉiuj analizitaj fontkodoj. La kodo sub revizio spertas similan procezon de identigado de ŝablonoj kiuj estas kontrolitaj kontraŭ referenca decidarbo. Grandaj diferencoj kun najbaraj branĉoj indikas la ĉeeston de anomalio en la padrono estanta kontrolita.

Liberigo de ControlFlag 1.0, ilo por identigi erarojn en C-kodo

Ekzemple de la kapabloj de ControlFlag, la programistoj analizis la fontkodojn de la OpenSSL kaj cURL-projektoj:

  • Anomalaj konstruoj “(s1 == NULL) ∧ (s2 == NULL)” kaj “(s1 == NULL) | (s2 == NULL)" , kiuj ne kongruas kun la kutime uzata ŝablono "(s1 == NULL) || (s2 == NULL)". La kodo ankaŭ identigis anomaliojn en la esprimoj "(-2 == rv)" (la minuso estis tajperaro) kaj "BIO_puts(bp, ":") <= 0)" (en la kunteksto de kontrolado de la sukcesa kompletigo de la funkcio ĝi devus esti "== 0").
  • En cURL, eraro estis malkovrita, kiu ne estis detektita de senmovaj analiziloj dum uzado de la strukturelemento "s->keepon", kiu havis nombran tipon, sed estis komparita kun la bulea valoro VERA.

Inter la ecoj de la versio ControlFlag 1.0, ekzistas plena subteno por normaj ŝablonoj por la C-lingvo kaj la kapablo detekti anomaliojn en kondiĉaj "se" esprimoj. Ekzemple, kiam oni analizas la kodfragmenton "se (x = 7) y = x;" La sistemo determinos, ke la "se" deklaro kutime uzas la "variablon == nombro" konstruon por kompari nombrajn valorojn, do estas tre verŝajne ke la "variablo = nombro" en la "se" esprimo estas kaŭzita de tajperaro. La ilaro inkluzivas skripton, kiu ebligas al vi elŝuti ekzistantajn C-lingvajn deponejojn sur GitHub kaj uzi ilin por konstrui la modelon. Pretaj modeloj ankaŭ haveblas, ebligante vin tuj komenci kontroli la kodon.

fonto: opennet.ru

Aldoni komenton