Lanzamiento de ControlFlag 1.0, una herramienta para detectar errores en el código en lenguaje C

La empresa Intel ha publicado la primera versión significativa de la herramienta ControlFlag 1.0, que permite detectar errores y anomalías en los códigos fuente utilizando un sistema de aprendizaje automático entrenado con un gran volumen de código existente. A diferencia de los analizadores estáticos tradicionales, ControlFlag no aplica reglas predefinidas, en las que es difícil prever todas las posibles variantes, sino que se basa en estadísticas del uso de diversas construcciones del lenguaje en un gran número de proyectos existentes. El código de ControlFlag está escrito en C++ y está disponible bajo la licencia MIT.

El sistema se entrena mediante la construcción de un modelo estadístico del conjunto de código de proyectos abiertos publicados en GitHub y otros repositorios públicos similares. En la fase de entrenamiento, el sistema identifica patrones típicos de construcción de construcciones en el código y construye un árbol de sintaxis de relaciones entre estos patrones, reflejando el flujo de ejecución del código en el programa. Como resultado, se forma un árbol de decisión de referencia que combina la experiencia de desarrollo de todos los códigos fuente analizados. Para el código que se verifica, se lleva a cabo un proceso similar de identificación de patrones, que se comparan con el árbol de decisión de referencia. Grandes discrepancias con ramas adyacentes indican la presencia de una anomalía en el patrón verificado.

Lanzamiento de ControlFlag 1.0, una herramienta para detectar errores en el código en lenguaje C

Como ejemplo de las capacidades de ControlFlag, los desarrolladores realizaron un análisis de los códigos fuente de los proyectos OpenSSL y cURL:

  • En OpenSSL se identificaron construcciones anómalas «(s1 == NULL) ∧ (s2 == NULL)» y «(s1 == NULL) | (s2 == NULL)», que no corresponden al patrón comúnmente utilizado «(s1 == NULL) || (s2 == NULL)». También se encontraron anomalías en las expresiones «(-2 == rv)» (el signo menos era un error tipográfico) y «BIO_puts(bp, «:») <= 0)» (en el contexto de la verificación de la finalización exitosa de la función debería haber sido «== 0».
  • En cURL se identificó un error no detectado por los analizadores estáticos al utilizar el elemento de la estructura «s->keepon», que tenía un tipo numérico, pero se comparaba con un valor booleano TRUE.

Entre las características de la versión ControlFlag 1.0 se destaca el soporte completo para plantillas típicas en el lenguaje C y la capacidad de detectar anomalías en expresiones condicionales «if». Por ejemplo, al analizar el fragmento de código «if (x = 7) y = x;», el sistema determinará que generalmente en el operador «if» se utiliza la construcción «variable == número» para comparar valores numéricos, por lo que es muy probable que la indicación «variable = número» en la expresión «if» se deba a un error tipográfico. Se incluye un script que permite cargar los repositorios existentes en GitHub en lenguaje C y utilizarlos para construir el modelo. También están disponibles modelos ya listos que permiten comenzar de inmediato la verificación del código.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster