Intel abrió el código del sistema de aprendizaje automático ControlFlag para identificar errores en el código

Intel ha descubierto desarrollos relacionados con el proyecto de investigación ControlFlag destinado a crear un sistema de aprendizaje automático para mejorar la calidad del código. El conjunto de herramientas elaborado por el proyecto permite, basándose en un modelo entrenado en una gran cantidad de código existente, identificar diversos errores y anomalías en textos fuente escritos en lenguajes de alto nivel como C/C++. El sistema es adecuado para identificar varios tipos de problemas en el código, desde identificar errores tipográficos y combinaciones de tipos incorrectas hasta identificar comprobaciones de valores NULL faltantes en punteros y problemas de memoria. El código ControlFlag está escrito en C++ y es de código abierto bajo la licencia MIT.

El sistema es de autoaprendizaje mediante la construcción de un modelo estadístico de la matriz de código existente de proyectos abiertos 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. El sistema también le permite no sólo identificar un error en la plantilla, sino también sugerir una corrección. Por ejemplo, en el código OpenSSL se identificó la construcción “(s1 == NULL) ∧ (s2 == NULL)”, la cual apareció en el árbol de sintaxis solo 8 veces, mientras que la rama más cercana con el valor “(s1 == NULO) || (s2 == NULL)” ocurrió unas 7 mil veces. El sistema también detectó una anomalía “(s1 == NULL) | (s2 == NULL)” que apareció 32 veces en el árbol.

Intel abrió el código del sistema de aprendizaje automático ControlFlag para identificar errores en el código

Al analizar el fragmento de código “if (x = 7) y = x;” El sistema ha determinado que la construcción “variable == número” se usa generalmente en el operador “si” para comparar valores numéricos, por lo que es muy probable que la indicación “variable = número” en la expresión “si” sea causada por un error de tipografía. Los analizadores estáticos tradicionales habrían detectado tal error, pero a diferencia de ellos, ControlFlag no aplica reglas ya preparadas, en las que es difícil proporcionar todas las opciones posibles, sino que se basa en estadísticas del uso de varias estructuras en un gran número. de proyectos.

Como experimento, utilizando ControlFlag en el código fuente de la utilidad cURL, que a menudo se cita como ejemplo de código probado y de alta calidad, se identificó un error no detectado por los analizadores estáticos al usar el elemento de estructura "s->keepon", que era de tipo numérico, pero se comparaba con el valor booleano TRUE. En el código OpenSSL, además del problema mencionado anteriormente con "(s1 == NULL) ∧ (s2 == NULL)", también se identificaron anomalías en las expresiones "(-2 == rv)" (el menos era un error tipográfico) y "BIO_puts(bp, ":")

Fuente: opennet.ru

Añadir un comentario