Lëshimi i ControlFlag 1.0, një mjet për identifikimin e gabimeve në kodin C

Intel ka publikuar lëshimin e parë të madh të mjetit ControlFlag 1.0, i cili ju lejon të identifikoni gabimet dhe anomalitë në kodin burimor duke përdorur një sistem të mësimit të makinerive të trajnuar në një sasi të madhe kodi ekzistues. Ndryshe nga analizuesit statikë tradicionalë, ControlFlag nuk zbaton rregulla të gatshme, në të cilat është e vështirë të ofrohen të gjitha opsionet e mundshme, por bazohet në statistika mbi përdorimin e konstrukteve të ndryshme gjuhësore në një numër të madh projektesh ekzistuese. Kodi ControlFlag është shkruar në C++ dhe është me burim të hapur nën licencën MIT.

Sistemi është trajnuar duke ndërtuar një model statistikor të grupit ekzistues të kodeve të projekteve me burim të hapur të publikuar në GitHub dhe depo publike të ngjashme. Në fazën e trajnimit, sistemi përcakton modelet tipike për ndërtimin e strukturave në kod dhe ndërton një pemë sintaksore të lidhjeve midis këtyre modeleve, duke reflektuar rrjedhën e ekzekutimit të kodit në program. Si rezultat, formohet një pemë referencë vendimmarrëse që kombinon përvojën e zhvillimit të të gjitha kodeve burimore të analizuara. Kodi në shqyrtim i nënshtrohet një procesi të ngjashëm të identifikimit të modeleve që kontrollohen në një pemë vendimi referimi. Mospërputhjet e mëdha me degët fqinje tregojnë praninë e një anomalie në modelin që kontrollohet.

Lëshimi i ControlFlag 1.0, një mjet për identifikimin e gabimeve në kodin C

Si shembull i aftësive të ControlFlag, zhvilluesit analizuan kodet burimore të projekteve OpenSSL dhe cURL:

  • Konstruktet anormale “(s1 == NULL) ∧ (s2 == NULL)” dhe “(s1 == NULL) | (s2 == NULL)" , të cilat nuk përputhen me modelin e përdorur zakonisht "(s1 == NULL) || (s2 == NULL)". Kodi gjithashtu identifikoi anomali në shprehjet "(-2 == rv)" (minus ishte një gabim shtypi) dhe "BIO_puts(bp, ":") <= 0)" (në kontekstin e kontrollit të përfundimit të suksesshëm të funksioni duhet të ishte “== 0”).
  • Në cURL, u zbulua një gabim që nuk u zbulua nga analizuesit statikë gjatë përdorimit të elementit të strukturës "s->keepon", i cili kishte një tip numerik, por u krahasua me vlerën boolean TRUE.

Ndër veçoritë e versionit ControlFlag 1.0, ka mbështetje të plotë për shabllonet standarde për gjuhën C dhe aftësinë për të zbuluar anomali në shprehjet e kushtëzuara "nëse". Për shembull, kur analizoni fragmentin e kodit "nëse (x = 7) y = x;" Sistemi do të përcaktojë që deklarata "nëse" zakonisht përdor konstruksionin "variabla == numër" për të krahasuar vlerat numerike, kështu që ka shumë të ngjarë që "variabla = numër" në shprehjen "nëse" të shkaktohet nga një gabim shtypi. Kompleti përfshin një skript që ju lejon të shkarkoni depo ekzistuese të gjuhës C në GitHub dhe t'i përdorni ato për të ndërtuar modelin. Modele të gatshme janë gjithashtu të disponueshme, duke ju lejuar të filloni menjëherë kontrollin e kodit.

Burimi: opennet.ru

Shto një koment