Intel hapi kodin e sistemit të mësimit automatik ControlFlag për zbulimin e gabimeve në kod

Kompania Intel hapi zhvillimet e saj në projektin kërkimor ControlFlag, që synon të krijojë një sistem mësimi të makinerive për të përmirësuar cilësinë e kodit. Instrumentet e përgatitura nga projekti lejojnë identifikimin e gabimeve dhe anomali të ndryshme në tekstet burimore, të shkruara në gjuhë të nivelit të lartë si C/C++, duke u mbështetur në një model të trajnuar mbi një volum të madh kodi ekzistues. Sistemi është i përshtatshëm për të zbuluar probleme të ndryshme në kod, nga gjetja e gabimeve dhe kombinimeve të gabuara të tipeve, deri te identifikimi i kontrolleve të humbura për vlerën NULL në tregues dhe probleme me menaxhimin e memories. Kodi ControlFlag është shkruar në gjuhën C++ dhe është i hapur nën licencën MIT.

Sistemi mëson në mënyrë autonome duke ndërtuar një model statistikor të grumbullit të kodit të projekteve të hapura, të publikuara në GitHub dhe depo të tjera publike të ngjashme. Në fazën e mësimit, sistemi identifikon modelet tipike të ndërtimit të strukturave në kod dhe ndalon një pemë sintaksore të lidhjeve midis këtyre modeleve, që pasqyron rrjedhën e ekzekutimit të kodit në program. Si rezultat, krijohet një pemë standarde e vendimeve, që bashkon përvojën e zhvillimit të të gjithë teksteve burimore të analizuar.

PĂ«r kodin qĂ« shqyrtohet, zbatohet njĂ« proces i ngjashĂ«m i pĂ«rcaktimit tĂ« modeleve, tĂ« cilat krahasohen me pemĂ«n standarde tĂ« vendimeve. ShkĂ«putjet e mĂ«dha me degĂ«t fqinje tregojnĂ« pĂ«r njĂ« anomali nĂ« modelin qĂ« shqyrtohet. Sistemi gjithashtu lejon jo vetĂ«m identifikimin e gabimeve nĂ« model, por edhe propozimin e korrigjimeve. PĂ«r shembull, nĂ« kodin OpenSSL u zbulua konstrukti “(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,000 herĂ«. Sistemi gjithashtu zbuloi njĂ« anomali “(s1 == NULL) | (s2 == NULL)” e cila u shfaq nĂ« pemĂ« 32 herĂ«.

Intel hapi kodin e sistemit të mësimit automatik ControlFlag për zbulimin e gabimeve në kod

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 konstrukcioni «variabël == numër», prandaj me një mundësi të madhe përcaktimi «variabël = numër» në shprehjen «if» është shkaktuar nga një gabim shkrimi. Një gabim të tillë do ta kapnin gjithashtu analizuesit tradicionalë staticë, por ndryshe nga ata, ControlFlag nuk aplikon rregulla të gatshme, të cilat është e vështirë të parashikosh të gjitha variantet e mundshme, por mbështetet në statistikën e përdorimit të të gjitha konstruksioneve në një numër të madh projektesh.

Si një eksperiment, me ndihmën e ControlFlag në tekstet burimore të utilitarit cURL, i cili shpesh jepet si shembull i kodit të cilësisë së lartë dhe të verifikuar, u identifikua një gabim të pa vërejtur nga analizuesit staticë gjatë përdorimit të elementit të strukturës «s->keepon», i cili kishte tip numerik, por u krahasua me një vlerë boolean TRUE. Në kodin OpenSSL, përveç problemit të përmendur më lart me «(s1 == NULL) ∧ (s2 == NULL)», gjithashtu u identifikuan anomali në shprehjet «(-2 == rv)» (minus ishte një gabim shkrimi) dhe «BIO_puts(bp, «:»)»

Burimi: opennet.ru

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