Système d'apprentissage automatique Intel ControlFlag open source pour identifier les erreurs de code

Intel a découvert des développements liés au projet de recherche ControlFlag visant à créer un système d'apprentissage automatique pour améliorer la qualité du code. La boîte à outils préparée par le projet permet, sur la base d'un modèle formé sur une grande quantité de code existant, d'identifier diverses erreurs et anomalies dans les textes sources écrits dans des langages de haut niveau tels que C/C++. Le système est adapté pour identifier différents types de problèmes dans le code, depuis l'identification des fautes de frappe et des combinaisons de types incorrectes, jusqu'à l'identification des vérifications de valeurs NULL manquantes dans les pointeurs et des problèmes de mémoire. Le code ControlFlag est écrit en C++ et est open source sous licence MIT.

Le système s'auto-apprend en créant un modèle statistique de la gamme de codes existante de projets open source publiés sur GitHub et dans des référentiels publics similaires. Au stade de la formation, le système détermine des modèles typiques de construction de structures dans le code et construit un arbre syntaxique de connexions entre ces modèles, reflétant le flux d'exécution du code dans le programme. En conséquence, un arbre décisionnel de référence est formé, combinant l'expérience de développement de tous les codes sources analysés.

Le code en cours d'examen est soumis à un processus similaire d'identification de modèles qui sont vérifiés par rapport à un arbre de décision de référence. Des écarts importants avec les branches voisines indiquent la présence d'une anomalie dans le motif vérifié. Le système permet également non seulement d'identifier une erreur dans le modèle, mais également de suggérer une correction. Par exemple, dans le code OpenSSL, la construction « (s1 == NULL) ∧ (s2 == NULL) » a été identifiée, qui n'est apparue dans l'arbre syntaxique que 8 fois, tandis que la branche la plus proche avec la valeur « (s1 == NULL) || (s2 == NULL) » s'est produit environ 7 1 fois. Le système a également détecté une anomalie « (s2 == NULL) | (s32 == NULL) » qui est apparu XNUMX fois dans l'arborescence.

Système d'apprentissage automatique Intel ControlFlag open source pour identifier les erreurs de code

Lors de l'analyse du fragment de code « if (x = 7) y = x ; » Le système a déterminé que la construction « variable == nombre » est généralement utilisée dans l'opérateur « si » pour comparer des valeurs numériques. Il est donc très probable que l'indication « variable = nombre » dans l'expression « si » soit causée par un faute de frappe. Les analyseurs statiques traditionnels auraient détecté une telle erreur, mais contrairement à eux, ControlFlag n'applique pas de règles toutes faites, dans lesquelles il est difficile de prévoir toutes les options possibles, mais est basé sur des statistiques d'utilisation de diverses structures dans un grand nombre. de projets.

À titre expérimental, en utilisant ControlFlag dans le code source de l'utilitaire cURL, qui est souvent cité comme exemple de code testé et de haute qualité, une erreur non détectée par les analyseurs statiques a été identifiée lors de l'utilisation de l'élément de structure « s->keepon », qui avait un type numérique, mais a été comparé à la valeur booléenne TRUE . Dans le code OpenSSL, en plus du problème mentionné ci-dessus avec "(s1 == NULL) ∧ (s2 == NULL)", des anomalies ont également été identifiées dans les expressions "(-2 == rv)" (le moins était une faute de frappe) et "BIO_puts(bp, ":")

Source: opennet.ru

Ajouter un commentaire