Kompania Intel publikoi versionin e saj të parë të rëndësishëm të mjetit ControlFlag 1.0, i cili lejon identifikimin e gabimeve dhe anomalive në tekstet burimore, duke përdorur një sistem të mësimit të makinerive të trajnuar mbi një sasi të madhe kodi ekzistues. Ndryshe nga analizatorët tradicionalë statikë, ControlFlag nuk përdor rregulla të gatshme, të cilat është e vështirë të parashikosh të gjitha variantet, dhe mbështetet në statistikat e përdorimit të të gjitha strukturave gjuhësore në një numër të madh projektesh ekzistuese. Kodi i ControlFlag është shkruar në gjuhën C++ dhe është i hapur nën licensën MIT.
Sistemi mëson duke ndërtuar një model statistik të grupit ekzistues të kodit të projekteve të hapura, të publikuara në GitHub dhe repo të tjera publike të ngjashme. Gjatë fazës së mësimit, sistemi përcakton modelet tipike të ndërtimit të strukturave në kod dhe ndan një pemë sintaksore lidhjesh midis këtyre modeleve, e cila reflekton rrjedhën e ekzekutimit të kodit në program. Në fund krijohet një pemë referimi për marrjen e vendimeve, e cila bashkon eksperiencën e zhvillimit të të gjithë teksteve burimore të analizuara. Për kodin e kontrolluar, një proces i ngjashëm i identifikimit të modeleve kryhet, të cilat krahasohen me pemën referuese për marrjen e vendimeve. Shkëputjet e mëdha nga degët fqinjë tregojnë për ekzistencën e një anomalii në modelin e kontrolluar.

Si një shembuj të mundësive të ControlFlag, zhvilluesit morën përsipër të analizojnë tekstet burimore të projekteve OpenSSL dhe cURL:
- Në OpenSSL u identifikuan konstrukcionet anomale «(s1 == NULL) ⧠(s2 == NULL)» dhe «(s1 == NULL) | (s2 == NULL)», që nuk përputhen me modelin e zakonshëm të përdorur «(s1 == NULL) || (s2 == NULL)». Në kod gjithashtu u zbuluan anomali në shprehjet «(-2 == rv)» (minus ishte një gabim shkrimi) dhe «BIO_puts(bp, «:») <= 0)» (në kontekstin e kontrollit të përfundimit të suksesshëm të funksionit duhej të ishte «== 0»).
- Në cURL u zbulua një gabim që nuk u vërejt nga analizatorët statikë gjatë përdorimit të elementit të strukturës «s->keepon», i cili kishte tipin numerik, por u krahasua me vlerën booleane TRUE.
Nga karakteristikat e versionit ControlFlag 1.0 vlen të theksohet mbështetja e plotë për modelet tipike të gjuhës C dhe mundësia e identifikimit të anomalive në shprehjet kushtore «if». Për shembull, gjatë analizës së një fragmenti kodi «if (x = 7) y = x;», sistemi do të përcaktojë se zakonisht në operatorin «if» për krahasimin e vlerave numerike përdoret struktura «variabla == numri», prandaj me një probabilitet të madh, caktimi «variabla = numri» në shprehjen «if» përballet me një gabim shkrimi. Një skenar ofrohet për të ngarkuar projektet në gjuhën C që ndodhen në repo GitHub dhe për t'i përdorur ato për ndërtimin e modelit. Gjithashtu, janë në dispozicion modele të gatshme, të cilat lejojnë fillimin e menjëhershëm të kontrollit të kodit.
Burimi: opennet.ru
