Apprentissage de l'inférence de type pour une analyse de flux de données améliorée

L'analyse statique du code à typage dynamique est une entreprise ardue, car même des tâches apparemment triviales, comme la détermination des cibles des appels de procédure, sont complexes sans connaissance des types d'objets au moment de la compilation. Pour relever ce défi, le typage progressif est de plus en plus intégré aux langages à typage dynamique, un exemple emblématique étant TypeScript, qui introduit le typage statique dans JavaScript. Le typage progressif améliore la capacité du développeur à vérifier le comportement du programme, contribuant ainsi à des programmes robustes, sécurisés et faciles à déboguer. En pratique, cependant, les utilisateurs ne fournissent que rarement des annotations de type directement. Parallèlement, l'inférence de type conventionnelle rencontre des défis liés aux performances lorsque la taille du programme augmente. Les techniques statistiques basées sur l'apprentissage automatique offrent une inférence plus rapide, mais bien que les approches récentes montrent une précision globale améliorée, elles performent encore significativement moins bien pour les types définis par l'utilisateur que pour les types intégrés les plus courants. De plus, leur utilité dans le monde réel est limitée par leur rare intégration avec les applications orientées utilisateur. Nous proposons CodeTIDAL5, un modèle basé sur les Transformers formé pour prédire fiablement les annotations de type. Pour une récupération efficace et une réintégration des résultats, nous extrayons des tranches d'utilisation à partir du graphe de propriétés du code du programme. En comparant notre approche aux systèmes d'inférence de type neuronaux récents, notre modèle dépasse l'état actuel de l'art de 7,85 % sur le benchmark ManyTypes4TypeScript, atteignant une précision globale de 71,27 %. De plus, nous présentons JoernTI, une intégration de notre approche dans Joern, un outil d'analyse statique open source. Nous démontrons que l'analyse bénéficie des informations supplémentaires sur les types. Comme notre modèle permet des temps d'inférence rapides même sur des CPU standard (commodity CPUs), rendre notre système disponible via Joern offre une grande accessibilité et facilite la recherche en sécurité.