
Contexte
Google a introduit l’utilisation d’une IA basée sur des modèles avancés de traitement du langage naturel (NLP) et d’apprentissage machine. Ces outils sont capables d’analyser, de comprendre et de convertir des bases de code. L’intégration de ces outils a permis à Google de diviser par deux le temps nécessaire à certaines migrations de code. Par exemple, un projet nécessitant traditionnellement un an de travail peut désormais être achevé en six mois, voire moins. Cela n’affecte pas seulement la vitesse, mais également la qualité : les erreurs humaines sont réduites, et les développeurs peuvent se concentrer sur des tâches plus stratégiques.
L'importance de l'IA pour Google
Lors de l'annonce des résultats financiers du troisième trimestre 2024, Sundar Pichai, PDG de Google, a dévoilé une information marquante : plus de 25 % du nouveau code produit par Google est désormais généré par l'intelligence artificielle (IA).
Pichai a déclaré que l'utilisation de l'IA pour le codage permettait de « stimuler la productivité et l'efficacité » au sein de Google. Une fois le code généré, il est ensuite vérifié et revu par les employés, a-t-il ajouté. « Cela permet à nos ingénieurs d'en faire plus et d'aller plus vite », a déclaré Pichai. « Je suis enthousiasmé par nos progrès et les opportunités qui s'offrent à nous, et nous continuons à nous concentrer sur la création de produits de qualité. »
Il s'agit d'une étape importante qui montre à quel point l'IA est importante pour l'entreprise.
Les défis de la migration de code
La migration de code, essentielle dans le cadre de l’évolution technologique des entreprises, consiste à adapter et transférer des bases de code d’une infrastructure ou d’un langage vers un autre. Cela peut être dû à divers facteurs tels que des mises à jour technologiques, des changements dans les environnements de développement, ou encore le besoin de moderniser des applications vieillissantes.
Ce processus est souvent long, coûteux et sujet à des erreurs, impliquant des centaines de développeurs qui doivent comprendre, traduire et tester des milliers de lignes de code. La complexité augmente lorsque des systèmes hérités doivent être intégrés avec des solutions modernes. Des mois, voire des années, peuvent être nécessaires pour compléter une migration.
Comment Google utilise-t-il l'IA pour les migrations de code interne ?
Google, qui vend des logiciels d'intelligence artificielle avec autant d'enthousiasme que Microsoft, rapporte avoir testé sa propre concoction d'intelligence artificielle et avoir obtenu des résultats prometteurs. Dans un article, les informaticiens de Google Stoyan Nikolov, Daniele Codecasa, Anna Sjovall, Maxim Tabachnyk, Satish Chandra, Siddharth Taneja et Celal Ziftci répondent à la question posée par le titre de l'article : « Comment Google utilise-t-il l'IA pour les migrations de code interne ? » Les esprits curieux veulent savoir, en particulier après qu'Amazon a affirmé avoir utilisé son assistant de codage Q Developer AI pour économiser des centaines de millions en migrant les applications Java 8 vers Java 17.
Les ingénieurs logiciels de la Chocolate Factory susmentionnés tentent de satisfaire cette curiosité en racontant comment ils ont appliqué de grands modèles de langage (LLM) (l'IA dans le langage courant) pour accélérer le processus de migration du code d'un environnement à l'autre.
« Nous constatons que l'utilisation de LLM peut réduire de manière significative le temps nécessaire aux migrations, ainsi que les obstacles au démarrage et à l'achèvement des programmes de migration », observent les auteurs dans leur article.
Ils se concentrent sur les outils d'IA sur mesure développés pour des domaines de produits spécifiques, tels que Google Ads, Google Search, Google Workspace et YouTube, plutôt que sur les outils d'IA génériques qui fournissent des services largement applicables tels que l'achèvement du code, l'examen du code et la réponse aux questions.
Les migrations de code de Google ont consisté à remplacer les identifiants 32 bits de la base de code de plus de 500 millions de lignes pour Google Ads par des identifiants 64 bits, à convertir son ancienne bibliothèque de test JUnit3 en JUnit4 et à remplacer la bibliothèque temporelle Joda par le package standard java.time de Java.
La migration de int32 à int64, expliquent les Googlers, n'était pas triviale car les identifiants étaient souvent définis de manière générique (int32_t en C++ ou Integer en Java) et n'étaient pas facilement consultables. Ils existaient dans des dizaines de milliers d'emplacements de code dans des milliers de fichiers. Les modifications devaient être suivies par plusieurs équipes et les changements apportés aux interfaces des classes devaient être pris en compte dans plusieurs fichiers.
« L'ensemble de l'effort, s'il était réalisé manuellement, devait nécessiter des centaines d'années d'ingénierie logicielle et une coordination transversale complexe », expliquent les auteurs.
Le temps nécessaire pour achever la migration a été réduit de 50 %
Pour leur flux de travail basé sur le LLM, les ingénieurs logiciels de Google ont mis en œuvre le processus suivant.
Un ingénieur d'Ads identifiait un identifiant nécessitant une migration en utilisant une combinaison de recherche de code, Kythe et des scripts personnalisés.
Ensuite, une boîte à outils de migration basée sur le LLM, déclenchée par une personne connaissant bien l'art, a été exécutée pour générer des changements vérifiés contenant du code qui a passé les tests unitaires. Ces modifications sont vérifiées manuellement par le même ingénieur et éventuellement corrigées.
Ensuite, les modifications de code sont envoyées à plusieurs réviseurs responsables de la partie de la base de code affectée par les modifications.
Il en est ressorti que 80 % des modifications de code figurant dans les listes de modifications étaient purement le fruit de l'IA, le reste étant constitué de suggestions d'IA rédigées ou modifiées par l'homme.
« Nous avons découvert que dans la plupart des cas, l'homme devait revenir sur au moins quelques modifications apportées par le modèle qui étaient soit incorrectes, soit inutiles », observent les auteurs. « Compte tenu de la complexité et de la nature sensible du code modifié, des efforts doivent être déployés pour que chaque modification soit appliquée avec soin aux utilisateurs ».
Sur la base de ce constat, Google a entrepris des travaux supplémentaires sur la vérification pilotée par LLM afin de réduire la nécessité d'un examen détaillé.
Même s'il est nécessaire de revérifier le travail du LLM, les auteurs estiment que le temps nécessaire pour achever la migration a été réduit de 50 %.
Avec l'aide du LLM, il n'a fallu que trois mois pour migrer 5 359 fichiers et modifier 149 000 lignes de code pour achever la transition JUnit3-JUnit4. Environ 87 % du code généré par l'IA a fini par être validé sans aucune modification.
En ce qui concerne le changement de framework temporel Joda-Java, les auteurs estiment un gain de temps de 89 % par rapport au temps de changement manuel prévu, bien qu'aucune spécification n'ait été fournie pour étayer cette affirmation.
« Les LLM offrent une opportunité significative d'assister, de moderniser et de mettre à jour de grandes bases de code », concluent les auteurs. « Ils s'accompagnent d'une grande flexibilité et, par conséquent, une variété de tâches de transformation de code peuvent être encadrées dans un flux de travail similaire et être couronnées de succès. Cette approche a le potentiel de changer radicalement la façon dont le code est maintenu dans les grandes entreprises ».
Les LLM doivent être considérés comme complémentaires des techniques de migration traditionnelles
Les Googlers soulignent également que les LLM doivent être considérés comme complémentaires des techniques de migration traditionnelles qui reposent sur les arbres syntaxiques abstraits (AST) et les recherches de type grep. Ils notent que des outils supplémentaires peuvent être nécessaires pour...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.