Intel a ouvert le code du système d'apprentissage machine ControlFlag pour détecter les erreurs dans le code

La société Intel a révélé ses travaux liés au projet de recherche ControlFlag, visant à créer un système d'apprentissage automatique pour améliorer la qualité du code. Les outils fournis par le projet permettent, sur la base d'un modèle formé sur un grand volume de code existant, d'identifier divers erreurs et anomalies dans les fichiers sources écrits dans des langages de haut niveau comme C/C++. Le système est apte à détecter différents types de problèmes dans le code, allant de la détection de fautes de frappe et d'inadéquation des types à l'identification de vérifications manquées des valeurs NULL dans les pointeurs et des problèmes de gestion de la mémoire. Le code de ControlFlag est écrit en C++ et est disponible sous licence MIT.

Le système s'auto-forme en construisant un modèle statistique de l'ensemble du code des projets ouverts publiés sur GitHub et d'autres dépôts publics semblables. Au stade d'apprentissage, le système détermine des modèles typiques de construction de constructions de code et construit un arbre syntaxique des liens entre ces modèles, reflétant le flux d'exécution du code dans le programme. En définitive, un arbre de décision de référence est formé, combinant l'expérience de développement de tous les fichiers sources analysés.

Pour le code vérifié, un processus similaire d'identification des modèles est exécuté, qui sont comparés à l'arbre de décision de référence. D'importantes divergences avec les branches voisines indiquent la présence d'une anomalie dans le modèle vérifié. Le système permet également non seulement d'identifier une erreur dans le modèle, mais aussi de proposer une correction. Par exemple, dans le code d'OpenSSL, une construction «(s1 == NULL) ∧ (s2 == NULL)» a été identifiée, apparaissant dans l'arbre syntaxique seulement 8 fois, tandis que la branche la plus proche avec la valeur «(s1 == NULL) || (s2 == NULL)» apparaissait environ 7000 fois. Le système a également identifié une anomalie «(s1 == NULL) | (s2 == NULL)» qui est apparue dans l'arbre 32 fois.

Intel a ouvert le code du système d'apprentissage machine ControlFlag pour détecter les erreurs dans le code

En analysant le fragment de code «if (x = 7) y = x;», le système a déterminé que l'opérateur «if» utilise généralement la structure «variable == nombre» pour comparer des valeurs numériques. Par conséquent, il est fortement probable que l'utilisation de «variable = nombre» dans l'expression «if» soit due à une erreur typographique. Une telle erreur aurait également été détectée par des analyseurs statiques traditionnels, mais contrairement à eux, ControlFlag n'applique pas de règles préétablies, difficiles à adapter à toutes les situations possibles, mais se base sur les statistiques d'utilisation de diverses constructions dans un grand nombre de projets.

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

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster