Lansarea ControlFlag 1.0, un instrument pentru identificarea erorilor în codul scris în limbajul C

Compania Intel a publicat prima versiune semnificativă a instrumentului ControlFlag 1.0, care permite identificarea erorilor și anomaliilor în codul sursă, folosind un sistem de învățare automată antrenat pe un volum mare de cod existent. Spre deosebire de analizoarele statice tradiționale, ControlFlag nu aplică reguli predefinite, care nu pot anticipa toate posibilele variante, ci se bazează pe statisticile utilizării diferitelor construcții lingvistice în numeroase proiecte existente. Codul ControlFlag este scris în C++ și este disponibil sub licența MIT.

Sistemul se învață prin construirea unui model statistic al codului existent din proiectele open-source publicate pe GitHub și în alte repozitorii publice similare. În etapa de învățare, sistemul identifică șabloanele tipice ale construcțiilor din cod și construiește un arbore sintactic al relațiilor dintre aceste șabloane, reflectând fluxul de execuție al codului în program. În cele din urmă, se formează un arbore de decizie de referință, care combină experiența de dezvoltare a tuturor codurilor sursă analizate. Pentru codul supus verificării, se desfășoară un proces similar de identificare a șabloanelor, care sunt comparate cu arborele de decizie de referință. Discrepanțele mari cu ramurile adiacente indică o anomalie în șablonul verificat.

Lansarea ControlFlag 1.0, un instrument pentru identificarea erorilor în codul scris în limbajul C

Ca exemplu al capabilităților ControlFlag, dezvoltatorii au efectuat o analiză a codurilor sursă din proiectele OpenSSL și cURL:

  • În OpenSSL au fost identificate construcții anormale „(s1 == NULL) ∧ (s2 == NULL)” și „(s1 == NULL) | (s2 == NULL)”, care nu corespund șablonului utilizat de obicei „(s1 == NULL) || (s2 == NULL)”. De asemenea, au fost identificate anomalii în expresiile „(-2 == rv)” (minusul a fost o greșeală de tipar) și „BIO_puts(bp, „:”) <= 0)” (în contextul verificării unei execuții reușite a funcției, ar fi trebuit să fie „== 0”).
  • În cURL s-a identificat o eroare neobservată de analizoarele statice în utilizarea elementului structurii „s->keepon”, care avea un tip numeric, dar era comparat cu o valoare booleană TRUE.

Printre caracteristicile versiunii ControlFlag 1.0 se numără suportul complet pentru șabloanele standard ale limbajului C și capacitatea de a identifica anomalii în expresiile condiționale „if”. De exemplu, la analiza fragmentului de cod „if (x = 7) y = x;” sistemul va determina că, în mod obișnuit, în operatorul „if” pentru compararea valorilor numerice se folosește construcția „variabilă == număr”, prin urmare, cu o mare probabilitate, indicația „variabilă = număr” în expresia „if” este cauzată de o tipar greșit. În pachet este inclus un script care permite încărcarea celor disponibile în repositoul GitHub în limbajul C și utilizarea acestora pentru construirea modelului. De asemenea, sunt disponibile deja modele gata făcute, care permit începutul imediat al verificării codului.

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