Llançament de ControlFlag 1.0, una eina per identificar errors en codi C

Intel ha publicat la primera versió important de l'eina ControlFlag 1.0, que us permet identificar errors i anomalies en el codi font mitjançant un sistema d'aprenentatge automàtic entrenat en una gran quantitat de codi existent. A diferència dels analitzadors estàtics tradicionals, ControlFlag no aplica regles ja fetes, en les quals és difícil proporcionar totes les opcions possibles, sinó que es basa en estadístiques sobre l'ús de diversos constructes de llenguatge en un gran nombre de projectes existents. El codi ControlFlag està escrit en C++ i és de codi obert sota la llicència MIT.

El sistema s'entrena mitjançant la construcció d'un model estadístic de la matriu de codi existent de projectes de codi obert 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.

Llançament de ControlFlag 1.0, una eina per identificar errors en codi C

Com a exemple de les capacitats de ControlFlag, els desenvolupadors van analitzar els codis font dels projectes OpenSSL i cURL:

  • Construccions anòmales “(s1 == NULL) ∧ (s2 == NULL)” i “(s1 == NULL) | (s2 == NULL)" , que no coincideixen amb el patró d'ús habitual "(s1 == NULL) || (s2 == NULL)". El codi també va identificar anomalies en les expressions "(-2 == rv)" (el menys va ser una errada d'ortografia) i "BIO_puts(bp, ":") <= 0)" (en el context de la comprovació de la finalització correcta del funció hauria d'haver estat "== 0").
  • A cURL, es va descobrir un error que no va ser detectat pels analitzadors estàtics en utilitzar l'element d'estructura "s->keepon", que tenia un tipus numèric, però es va comparar amb el valor booleà TRUE.

Entre les característiques de la versió ControlFlag 1.0, hi ha suport complet per a plantilles estàndard per al llenguatge C i la capacitat de detectar anomalies en expressions condicionals "si". Per exemple, quan s'analitza el fragment de codi "si (x = 7) y = x;" El sistema determinarà que la declaració "si" normalment utilitza la construcció "variable == nombre" per comparar valors numèrics, de manera que és molt probable que la "variable = nombre" a l'expressió "si" sigui causada per una errada d'ortografia. El kit inclou un script que us permet descarregar els dipòsits de llenguatge C existents a GitHub i utilitzar-los per crear el model. També hi ha models preparats, que us permeten començar immediatament a comprovar el codi.

Font: opennet.ru

Afegeix comentari