Sistèm aprantisaj machin Intel Open Source ControlFlag pou idantifye erè kòd yo

Intel te dekouvri devlopman ki gen rapò ak pwojè rechèch ControlFlag ki vize pou kreye yon sistèm aprantisaj machin pou amelyore kalite kòd. Zouti a prepare pa pwojè a pèmèt, ki baze sou yon modèl ki resevwa fòmasyon sou yon gwo kantite kòd ki egziste deja, yo idantifye divès erè ak anomali nan tèks sous ekri nan lang wo nivo tankou C/C++. Sistèm nan apwopriye pou idantifye divès kalite pwoblèm nan kòd, soti nan idantifye erè tip ak konbinezon kalite kòrèk, nan idantifye chèk valè NULL ki manke nan konsèy ak pwoblèm memwa. Kòd ControlFlag la ekri an C++ epi li gen sous lisans MIT.

Sistèm nan ap aprann pwòp tèt ou nan bati yon modèl estatistik nan etalaj la kòd ki egziste deja nan pwojè ouvè 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. Sistèm nan pèmèt ou pa sèlman idantifye yon erè nan modèl la, men tou, sijere yon koreksyon. Pou egzanp, nan kòd OpenSSL la, konstriksyon "(s1 == NULL) ∧ (s2 == NULL)" te idantifye, ki te parèt nan pye bwa sentaks la sèlman 8 fwa, pandan y ap branch ki pi pre a ak valè "(s1 ==). NULL) || (s2 == NULL)” te fèt anviwon 7 mil fwa. Sistèm nan te detekte tou yon anomali "(s1 == NULL) | (s2 == NULL)” ki te parèt 32 fwa nan pye bwa a.

Sistèm aprantisaj machin Intel Open Source ControlFlag pou idantifye erè kòd yo

Lè w ap analize fragman kòd la "si (x = 7) y = x;" Sistèm nan te detèmine ke konstriksyon "varyab == nimewo" anjeneral yo itilize nan operatè "si" pou konpare valè nimerik, kidonk li trè posib ke endikasyon "varyab = nimewo" nan ekspresyon "si" a te koze pa yon. typo. Analizè estatik tradisyonèl yo ta kenbe yon erè konsa, men kontrèman ak yo, ControlFlag pa aplike règ pare yo, nan ki li difisil pou bay tout opsyon posib, men li baze sou estatistik sou itilizasyon divès estrikti nan yon gwo kantite. nan pwojè yo.

Kòm yon eksperyans, lè l sèvi avèk ControlFlag nan kòd sous la nan sèvis piblik la cURL, ki se souvan site kòm yon egzanp nan kalite siperyè ak kòd teste, yo te idantifye yon erè detekte pa analizè estatik lè w ap itilize eleman nan estrikti "s->keepon", ki te gen yon kalite nimerik, men yo te konpare ak valè Boolean TRUE . Nan kòd OpenSSL la, anplis pwoblèm ki mansyone anwo a ak "(s1 == NULL) ∧ (s2 == NULL)", anomali yo te idantifye tou nan ekspresyon yo "(-2 == rv)" (mwens la te yon typo) ak "BIO_puts(bp, ":")

Sous: opennet.ru

Add nouvo kòmantè