Intel va obrir el codi del sistema d'aprenentatge automàtic ControlFlag per identificar errors al codi

Intel ha descobert desenvolupaments relacionats amb el projecte de recerca ControlFlag amb l'objectiu de crear un sistema d'aprenentatge automàtic per millorar la qualitat del codi. El conjunt d'eines elaborat pel projecte permet, a partir d'un model entrenat en una gran quantitat de codi existent, identificar diversos errors i anomalies en textos font escrits en llenguatges d'alt nivell com C/C++. El sistema és adequat per identificar diversos tipus de problemes en el codi, des d'identificar errors ortogràfics i combinacions de tipus incorrectes, fins a identificar comprovacions de valors NULL que falten als punters i problemes de memòria. El codi ControlFlag està escrit en C++ i és de codi obert sota la llicència MIT.

El sistema s'aprèn mitjançant la creació d'un model estadístic de la matriu de codi existent de projectes oberts publicats a GitHub i repositoris públics similars. En l'etapa d'entrenament, el sistema determina patrons típics per construir estructures en el codi i construeix un arbre sintàctic de connexions entre aquests patrons, reflectint el flux d'execució del codi al programa. Com a resultat, es forma un arbre de presa de decisions de referència que combina l'experiència de desenvolupament de tots els codis font analitzats.

El codi que s'està revisant passa per un procés similar d'identificació de patrons que es contrasten amb un arbre de decisió de referència. Les grans discrepàncies amb les branques veïnes indiquen la presència d'una anomalia en el patró que s'està comprovant. El sistema també us permet no només identificar un error a la plantilla, sinó també suggerir una correcció. Per exemple, al codi OpenSSL, es va identificar la construcció “(s1 == NULL) ∧ (s2 == NULL)”, que apareixia a l'arbre de sintaxi només 8 vegades, mentre que la branca més propera amb el valor “(s1 == NULL) || (s2 == NULL)” es va produir unes 7 mil vegades. El sistema també va detectar una anomalia “(s1 == NULL) | (s2 == NULL)” que va aparèixer 32 vegades a l'arbre.

Intel va obrir el codi del sistema d'aprenentatge automàtic ControlFlag per identificar errors al codi

Quan s'analitza el fragment de codi "si (x = 7) y = x;" El sistema ha determinat que la construcció "variable == nombre" s'utilitza normalment a l'operador "si" per comparar valors numèrics, de manera que és molt probable que la indicació "variable = nombre" a l'expressió "si" sigui causada per un error ortogràfic. Els analitzadors estàtics tradicionals haurien detectat aquest error, però a diferència d'ells, ControlFlag no aplica regles ja fetes, en les quals és difícil proporcionar totes les opcions possibles, sinó que es basa en estadístiques d'ús de diverses estructures en un gran nombre. de projectes.

Com a experiment, utilitzant ControlFlag al codi font de la utilitat cURL, que sovint es cita com a exemple de codi provat i d'alta qualitat, es va identificar un error no detectat pels analitzadors estàtics quan s'utilitzava l'element d'estructura "s->keepon". que tenia un tipus numèric, però es va comparar amb el valor booleà TRUE . En el codi OpenSSL, a més del problema esmentat anteriorment amb "(s1 == NULL) ∧ (s2 == NULL)", també es van identificar anomalies en les expressions "(-2 == rv)" (el menys era una errada d'ortografia) i "BIO_puts(bp, ":")

Font: opennet.ru

Afegeix comentari