
Intel tiene revelado Desarrollos relacionados con la ControlFlag investigar Proyecto para desarrollar un sistema de aprendizaje automático para mejorar la calidad del código. El kit de herramientas creado por el proyecto permite, a partir de un modelo que ha sido entrenado sobre una gran cantidad de código existente, identificar varios errores y anomalías en el código fuente escrito en lenguajes de alto nivel como C / C ++. . El sistema es bueno para detectar varios tipos de problemas en su código, desde la detección de errores tipográficos y combinaciones incorrectas de tipos hasta la identificación de comprobaciones faltantes para valores nulos en punteros y problemas con la memoria. El código ControlFlag está escrito en C ++ y es mente abierta Fuente bajo licencia MIT.
El sistema aprende a sí mismo construyendo un modelo estadístico de la matriz existente de código fuente abierto publicado en GitHub y repositorios públicos similares. En la fase de entrenamiento, el sistema determina plantillas típicas para construir estructuras en el código y crea un árbol de sintaxis de conexiones entre estas plantillas, que refleja la secuencia de ejecución del código en el programa. Como resultado, se crea un árbol de decisiones de referencia que resume las experiencias de desarrollo de todos los textos fuente analizados.
Lanzamiento del lenguaje de programación Crystal 1.2
Se realiza un proceso similar de definición de patrones para el código bajo prueba que se compara con un árbol de decisiones de referencia. Las grandes discrepancias con las ramas vecinas indican una anomalía en el patrón inspeccionado. El sistema también permite no solo identificar un error en la plantilla, sino también proponer una solución. En el código OpenSSL, por ejemplo, se reconoció la construcción «(s1 == NULL) ∧ (s2 == NULL)», que solo apareció 8 veces en el árbol de sintaxis, mientras que la siguiente rama con el valor «(s1 == NULL) || (s2 == NULL) “se encontró unas 7 mil veces. El sistema también tiene la anomalía «(s1 == NULL) | (s2 == NULL) “, que apareció 32 veces en el árbol.
Al analizar el fragmento de código «if (x = 7) y = x;» el sistema encontró que la construcción «variable == número» se usa normalmente en la declaración «if» para comparar valores numéricos, de modo que la especificación «variable = El número «en la declaración» si «es probablemente causado por un error tipográfico. Los analizadores estáticos convencionales detectarían tal error, pero a diferencia de ellos, ControlFlag no aplica reglas prefabricadas donde es difícil prever todas las opciones posibles, sino que utiliza estadísticas para asignar todo tipo de construcciones en una gran cantidad de proyectos de uso de construcciones.
Experimentalmente, al usar ControlFlag en el código fuente de la utilidad cURL, que a menudo se cita como un ejemplo de código probado y de alta calidad, se produjo un error que los analizadores estáticos no notaron al usar el elemento de estructura «s-> keepon» descubierto, que tenía un tipo numérico, pero se comparó con el valor booleano TRUE … En el código OpenSSL, además del problema mencionado anteriormente con «(s1 == NULL) ∧ (s2 == NULL)», 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 de la función debería haber sido "= = 0"). También se informa que el uso de ControlFlag hizo posible identificar varios cientos de errores en software propietario no específico, lo que provocó bloqueos y problemas de memoria.