Sortie de ControlFlag 1.0, un outil d'identification des erreurs dans le code C

Intel a publié la première version majeure de l'outil ControlFlag 1.0, qui permet d'identifier les erreurs et anomalies dans le code source à l'aide d'un système d'apprentissage automatique entraîné sur une grande quantité de code existant. Contrairement aux analyseurs statiques traditionnels, ControlFlag n'applique pas de règles toutes faites, dans lesquelles il est difficile de prévoir toutes les options possibles, mais repose sur des statistiques sur l'utilisation de diverses constructions de langage dans un grand nombre de projets existants. Le code ControlFlag est écrit en C++ et est open source sous licence MIT.

Le système est formé 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é.

Sortie de ControlFlag 1.0, un outil d'identification des erreurs dans le code C

À titre d'exemple des capacités de ControlFlag, les développeurs ont analysé les codes sources des projets OpenSSL et cURL :

  • Constructions anormales « (s1 == NULL) ∧ (s2 == NULL) » et « (s1 == NULL) | (s2 == NULL)" , qui ne correspondent pas au modèle couramment utilisé "(s1 == NULL) || (s2 == NULL)". Le code a également identifié des anomalies dans les expressions « (-2 == rv) » (le moins était une faute de frappe) et « BIO_puts(bp, « : ») <= 0) » (dans le cadre de la vérification de la réussite du fonction, cela aurait dû être "== 0").
  • Dans cURL, un bug a été découvert qui n'a pas été détecté par les analyseurs statiques 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.

Parmi les fonctionnalités de la version ControlFlag 1.0, on trouve la prise en charge complète des modèles standards pour le langage C et la possibilité de détecter des anomalies dans les expressions conditionnelles « si ». Par exemple, lors de l'analyse du fragment de code « if (x = 7) y = x ; » Le système déterminera que l'instruction « if » utilise généralement la construction « variable == nombre » pour comparer des valeurs numériques. Il est donc très probable que la « variable = nombre » dans l'expression « si » soit causée par une faute de frappe. Le kit comprend un script qui vous permet de télécharger des référentiels de langage C existants sur GitHub et de les utiliser pour créer le modèle. Des modèles prêts à l'emploi sont également disponibles, vous permettant de commencer immédiatement à vérifier le code.

Source: opennet.ru

Ajouter un commentaire