Lanzamiento de ControlFlag 1.0, una herramienta para identificar errores en código C

Intel ha publicado la primera versión importante de la herramienta ControlFlag 1.0, que permite identificar errores y anomalías en el código fuente utilizando un sistema de aprendizaje automático entrenado en una gran cantidad de código existente. A diferencia de los analizadores estáticos tradicionales, ControlFlag no aplica reglas listas para usar, en las que es difícil proporcionar todas las opciones posibles, sino que se basa en estadísticas sobre el uso de varias construcciones de lenguaje en una gran cantidad de proyectos existentes. El código ControlFlag está escrito en C++ y es de código abierto bajo la licencia MIT.

El sistema se entrena mediante la construcción de un modelo estadístico de la matriz de código existente de proyectos de código abierto publicados en GitHub y repositorios públicos similares. En la etapa de entrenamiento, el sistema determina patrones típicos para construir estructuras en el código y construye un árbol sintáctico de conexiones entre estos patrones, reflejando el flujo de ejecución del código en el programa. Como resultado, se forma un árbol de referencia para la toma de decisiones que combina la experiencia de desarrollo de todos los códigos fuente analizados. El código que se revisa se somete a un proceso similar de identificación de patrones que se comparan con un árbol de decisión de referencia. Grandes discrepancias con las ramas vecinas indican la presencia de una anomalía en el patrón que se está verificando.

Lanzamiento de ControlFlag 1.0, una herramienta para identificar errores en código C

Como ejemplo de las capacidades de ControlFlag, los desarrolladores analizaron los códigos fuente de los proyectos OpenSSL y cURL:

  • Construcciones anómalas “(s1 == NULL) ∧ (s2 == NULL)” y “(s1 == NULL) | (s2 == NULL)", que no coinciden con el patrón comúnmente utilizado "(s1 == NULL) || (s2 == NULO)". El código también identificó anomalías en las expresiones “(-2 == rv)” (el menos fue un error tipográfico) y “BIO_puts(bp, “:”) <= 0)” (en el contexto de verificar la finalización exitosa del función debería haber sido “== 0").
  • En cURL se descubrió un error que no fue detectado por los analizadores estáticos al utilizar el elemento de estructura “s->keepon”, que era de tipo numérico, pero se comparó con el valor booleano TRUE.

Entre las características de la versión ControlFlag 1.0, se encuentra el soporte total para plantillas estándar para 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 la declaración "si" generalmente usa la construcción "variable == número" para comparar valores numéricos, por lo que es muy probable que la "variable = número" en la expresión "si" sea causada por un error tipográfico. El kit incluye un script que le permite descargar repositorios de lenguaje C existentes en GitHub y usarlos para construir el modelo. También hay disponibles modelos listos para usar, lo que le permite comenzar a verificar el código de inmediato.

Fuente: opennet.ru

Añadir un comentario