BugLab : une autre approche de l’IA pour l’analyse du code source

BugLab

Inspirée des réseaux antagonistes génératifs, la méthode BugLab vise à développer des modèles d’IA capables de détecter – et éventuellement de corriger – des erreurs dans le code.

Utiliser des réseaux antagonistes génératifs (GAN) pour détecter et corriger des erreurs dans du code ? C’est le fondement de l’approche BugLab. Récemment présentée à la conférence NeurIPS, elle émane de Microsoft Research.

BugLab s’inspire de la méthode GAN en mettant en concurrence deux modèles qui se livrent à une sorte de « cache-cache ». Le premier examine un fragment de code, décide s’il doit y introduire une erreur, où et sous quelle forme. Le second tente de détecter ces erreurs et de les corriger. Au fil des cycles, ils se renforcent l’un l’autre. L’entraînement se fait sans supervision et ne nécessite pas de jeu de données préalablement étiqueté.

L’approche BugLab ne traite pas le code comme une suite de séquences en langage naturel*. Elle l’examine comme un tout et dégage des entités (expression, symbole, identifiant…) modélisées dans un graphe. Cela permet d’exploiter des architectures de réseaux neuronaux standard.

Les modèles entraînés « en mode BugLab » se révèlent, selon les chercheurs, jusqu’à 30 % plus performants que ceux entraînés avec des erreurs introduites au hasard. Environ un quart de ces erreurs peuvent être corrigées automatiquement. Mais le taux de faux positifs est important (98 % environ sur un échantillon de dépôts GitHub non rencontrés lors de la phase d’entraînement).

La couverture fonctionnelle est encore limitée. Elle se concentre en l’occurrence sur quelques erreurs fréquentes. Parmi elles, l’usage de variables inappropriées et des mauvais opérateurs booléens.

performances BugLab
L’échantillon RandomBugs se compose d’environ 760 000 fragments de code dérivés des fonctions issues de 600 paquets PyPi. Pour chaque fonction, on en ajoute 9 réécritures contenant un bug inséré au hasard. PyPiBugs contient quand à lui de « vraies » erreurs collectées sur l’ensemble des paquets PyPi.

* Au contraire, par exemple, de GitHub Copilot ou de CodeT5 (Salesforce).

Illustration principale © artinspiring – Adobe Stock