Intel har offentliggjort den første betydelige udgivelse af værktøjet ControlFlag 1.0, som gør det muligt at identificere fejl og anomalier i kildekoder ved hjælp af et maskinlæringssystem, der er trænet på en stor mængde eksisterende kode. I modsætning til traditionelle statiske analysatorer anvender ControlFlag ikke faste regler, som det er svært at forudse alle mulige varianter med, men er baseret på statistikken for brugen af forskellige sprogteknikker i et stort antal eksisterende projekter. Koden til ControlFlag er skrevet i C++ og er open source under MIT-licensen.
Systemet træner ved at opbygge en statistisk model af det eksisterende kodearray fra open source-projekter offentliggjort på GitHub og lignende offentlige repositoryer. I læringsfasen identificerer systemet typiske mønstre i kodekonstruktionerne og opretter et syntaktisk træ af forbindelser mellem disse mønstre, der afspejler kodeflowet i programmet. Resultatet er et referencebeslutningstræ, der samler erfaringerne fra alle de analyserede kildekoder. For den kontrollerede kode udføres en lignende proces for at identificere mønstre, som sammenlignes med referencebeslutningstræet. Store uoverensstemmelser med nærliggende grene indikerer tilstedeværelsen af en anomali i det kontrollerede mønster.

Som et eksempel på ControlFlags muligheder udførte udviklerne en analyse af kildekoderne for projekterne OpenSSL og cURL:
- I OpenSSL blev der identificeret anomale konstruktioner "(s1 == NULL) ∧ (s2 == NULL)" og "(s1 == NULL) | (s2 == NULL)", som ikke overholdt det almindeligt anvendte mønster "(s1 == NULL) || (s2 == NULL)". Der blev også opdaget anomalier i udtryk som "(-2 == rv)" (minusen var en tastefejl) og "BIO_puts(bp, ':') <= 0)" (i konteksten af kontrol af en vellykket afslutning af funktionen burde det have været "== 0").
- I cURL blev der opdaget en overset fejl af de statiske analyser, da elementet i strukturen "s->keepon" havde en numerisk type, men blev sammenlignet med den booleske værdi TRUE.
I version ControlFlag 1.0 er der fuld support for standard skabeloner til C-sprog og mulighed for at finde anomalier i betingede udtryk "if". For eksempel, når koden "if (x = 7) y = x;" analyseres, vil systemet identificere, at der normalt i "if"-operationen for sammenligning af numeriske værdier bruges konstruktionen "variabel == tal", og derfor med stor sandsynlighed er angivelsen "variabel = tal" i "if"-udtrykket forårsaget af en tastefejl. Medfølgende er et script, der gør det muligt at uploade eksisterende C-kode fra GitHub-repositories og bruge dem til at bygge en model. Derudover er der allerede klare modeller tilgængelige, så man straks kan begynde at kontrollere koden.
Kilde: opennet.ru
