Intel a deschis codul sistemului de învățare automată ControlFlag pentru identificarea erorilor în cod.

Compania Intel a deschis cercetările legate de proiectul de cercetare ControlFlag, destinat creării unui sistem de învățare automată pentru îmbunătățirea calității codului. Instrumentele pregătite de proiect permit, pe baza unui model antrenat pe un volum mare de cod existent, identificarea diferitelor erori și anomalii în textele sursă scrise în limbaje de nivel înalt, cum ar fi C/C++. Sistemul este potrivit pentru identificarea în cod a diferitelor tipuri de probleme, de la detectarea greșelilor de tipar și combinații greșite de tipuri, până la identificarea verificărilor lipsă privind valorile NULL în pointeri și problemele de gestionare a memoriei. Codul ControlFlag este scris în C++ și este disponibil sub licența MIT.

Sistemul se auto-învață prin construirea unui model statistic al setului de cod existent din proiectele open-source publicate pe GitHub și în repozitorii publice similare. În etapa de învățare, sistemul definește tiparele tipice de construire a construcțiilor în cod și construiește un arbore sintactic al relațiilor dintre aceste tipare, reflectând fluxul de execuție a codului în program. În cele din urmă, se formează un arbore de decizie de referință, care reunește experiența de dezvoltare a tuturor textelor sursă analizate.

Pentru codul verificat, se execută un proces similar de identificare a tiparelor, care sunt comparate cu arborele de decizie de referință. Discrepanțele mari cu ramurile vecine indică existența unei anomalii în tiparul verificat. Sistemul permite, de asemenea, nu doar identificarea unei erori în tipar, ci și sugerarea unei corecții. De exemplu, în codul OpenSSL a fost identificată construcția „(s1 == NULL) ∧ (s2 == NULL)”, care a apărut în arborele sintactic de doar 8 ori, în timp ce cea mai apropiată ramură cu valoarea „(s1 == NULL) || (s2 == NULL)” a apărut de aproximativ 7.000 de ori. Sistemul a identificat, de asemenea, o anomalii „(s1 == NULL) | (s2 == NULL)”, care a fost întâlnită în arbore de 32 de ori.

Intel a deschis codul sistemului de învățare automată ControlFlag pentru identificarea erorilor în cod.

În analiza fragmentului de cod „if (x = 7) y = x;”, sistemul a determinat că, în mod obișnuit, în operatorul „if” pentru compararea valorilor numerice se folosește construcția „variabilă == număr”, prin urmare, în mare parte, specificarea „variabilă = număr” în expresia „if” a fost cauzată de o greșeală de tipar. O astfel de eroare ar fi fost identificată și de analizoarele statice tradiționale, dar, spre deosebire de acestea, ControlFlag nu aplică reguli prestabilite în care este greu de anticipat toate variantele posibile, ci se bazează pe statisticile de utilizare a diverselor construcții în numeroase proiecte.

Ca experiment, prin intermediul ControlFlag, în codul sursă al utilitarului cURL, care este adesea menționat ca un exemplu de cod de calitate și verificat, a fost identificată o eroare neobservată de analizoarele statice în utilizarea elementului structurii „s->keepon”, care avea tip numeric, dar era comparat cu valoarea booleană TRUE. În codul OpenSSL, pe lângă problema menționată anterior cu „(s1 == NULL) ∧ (s2 == NULL)”, au fost identificate și anomalii în expresiile „(-2 == rv)” (minusul a fost o greșeală de tipar) și „BIO_puts(bp, „:”)”

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster