Intel publikoi kodin e sistemit të mësimit makinerik ControlFlag për identifikimin e gabimeve në kod.

Kompania Intel publikoi rezultatet e një projekti kërkimor ControlFlag, i fokusuar në krijimin e një sistemi mësimi makinerik për përmirësimin e cilësisë së kodit. Veglat e përgatitura nga projekti lejojnë, në bazë të një modeli të trajnuar mbi një sasi të madhe të kodit ekzistues, identifikimin e gabimeve dhe anomalive të ndryshme në tekstet burimore, të shkruara në gjuhë të nivelit të lartë, si C/C++. Sistemi është i përshtatshëm për identifikimin e llojeve të ndryshme të problemeve në kod, nga identifikimi i gabimeve të shtypjes dhe kombinimeve të gabuara të tipeve, deri te identifikimi i kontrolleve të mungueshme të vlerave NULL në tregues dhe problemeve me menaxhimin e memories. Kodi ControlFlag është shkruar në gjuhën C++ dhe është i hapur nën licencën MIT.

Sistemi mëson automatikisht duke ndërtuar një model statistik të kodit ekzistues të projekteve të hapura, të publikuara në GitHub dhe depo të ngjashme publike. Në fazën e mësimit, sistemi identifikon skemat tipike të ndërtimit të konstrukcioneve në kod dhe ndërton një pemë sintaksore lidhjesh midis këtyre skemave, duke reflektuar rrjedhën e ekzekutimit të kodit në program. Si rezultat, formohet një pemë standarde vendimmarrjeje, e cila bashkon përvojën e zhvillimit të të gjithë teksteve burimore të analizuar.

Për kodin e verifikuar, përfundon një proces i ngjashëm për identifikimin e shablloneve, të cilat krahasohen me pemën standarde të vendimmarrjes. Diferencat e mëdha me degët fqinje tregojnë për praninë e një anomalie në shabllonin e verifikuar. Sistemi gjithashtu mundëson jo vetëm identifikimin e një gabimi në shabllon, por gjithashtu ofron një korrigjim. Për shembull, në kodin OpenSSL u identifikua një konstrukcion «(s1 == NULL) ∧ (s2 == NULL)», i cili u shfaq në pemën sintaksore vetëm 8 herë, ndërsa dega më e afërt me vlerën «(s1 == NULL) || (s2 == NULL)» u shfaq rreth 7 mijë herë. Sistemi gjithashtu zbuloi një anomali «(s1 == NULL) | (s2 == NULL)» e cila u shfaq në pemë 32 herë.

Intel publikoi kodin e sistemit të mësimit makinerik ControlFlag për identifikimin e gabimeve në kod.

Kur gjatë analizës së fragmentit të kodit «if (x = 7) y = x;», sistemi përcaktoi se zakonisht në operatorin «if» për krahasimin e vlerave numerike përdoret konstrukti «variabël == numër», prandaj me shumë mundësi përdorimi i «variabël = numër» në shprehjen «if» është shkaktuar nga një gabim shkrimi. Një gabim të tillë do ta kapnin edhe analizuesit tradicionalë statikë, por ndryshe nga ata, ControlFlag nuk përdor rregulla të gatshme, në të cilat është e vështirë të parashikohet gjithë variacioni i mundshëm, por përqendrohet në statistikat e përdorimit të çdo konstruksioni në një numër të madh projektesh.

Si një eksperiment me ndihmën e ControlFlag në tekstet origjinale të utilitarit cURL, i cili shpesh përmendet si një shembull i kodit të cilësisë së lartë dhe të verifikuar, u zbulua një gabim i paferkuar nga analizuesit statikë gjatë përdorimit të elementit të strukturës «s->keepon», i cili kishte tipin numerik, por u krahasua me vlerën booleane TRUE. Në kodin OpenSSL, përveç problemit të përmendur më lart me «(s1 == NULL) ∧ (s2 == NULL)», u zbuluan gjithashtu anomalitë në shprehjet «(-2 == rv)» (minusi ishte një gabim shkrimi) dhe «BIO_puts(bp, «:»)»

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster