Introduction
L’IA générative a révolutionné de nombreux secteurs, y compris celui du développement logiciel. Ces outils, qui accélèrent l’écriture de code de manière similaire à ChatGPT pour les textes, apportent aussi de nouvelles problématiques : qualité du code, estimation de charge et propriété intellectuelle. La montée en puissance de ces technologies pousse à réfléchir sur leur utilisation judicieuse et leurs impacts à long terme sur la profession.
Que peut-on faire avec ces outils exactement ?
Ces outils s’intègrent directement dans l’environnement de développement intégré (IDE) et proposent des fonctionnalités avancées au développeur. Leur capacité à comprendre le contexte du code et à fournir des suggestions pertinentes est l’un de leurs principaux atouts. En plus d’accélérer le développement, ils offrent une assistance précieuse dans des tâches variées.
Un chatbot
De manière similaire à ChatGPT, il répond à des questions. Il puise dans un corpus existant comme les autres outils similaires mais a été particulièrement entraîné sur du code existant dans les différents dépôts publics. Il prend aussi le contexte du projet de manière plus ou moins avancée et intelligente suivant les solutions. Par exemple, on peut lui demander de nous écrire une fonction qui effectue une action spécifique. On peut aussi lui demander de générer les tests unitaires d’une classe, facilitant ainsi la mise en place d’un environnement de test robuste.
La complétion
Les développeurs sont habitués à utiliser de la complétion pour terminer le nom d’une fonction ou d’une variable. Ici, la complétion va plus loin en proposant toute la ligne voire une portion de code entière. Cela permet non seulement de gagner du temps mais aussi de réduire les erreurs de syntaxe ou de logique. Cette fonctionnalité est particulièrement utile pour les tâches répétitives ou lorsqu’il s’agit de respecter des conventions de code spécifiques.
Explication de code
Des outils permettent d’expliquer en langage naturel une portion de code, traduisant le code en langage courant. Cette fonctionnalité est particulièrement utile pour les développeurs juniors ou pour comprendre rapidement le fonctionnement d’un code complexe. Elle peut également servir dans la documentation du code, en générant des explications claires et précises pour les autres membres de l’équipe ou les futurs mainteneurs.
Quelques outils
GitHub Copilot
C’est le plus connu. Il est poussé par GitHub, et donc Microsoft. Il est basé sur Codex d’OpenAI. À noter, que le nom est aussi utilisé par Bing Copilot et intégré au moteur de recherche.
Il est payant et disponible depuis le milieu de l’année 2022.
Il s’intègre à plusieurs IDE dont la suite JetBrains, Visual Studio et d’autres.
Il a été entraîné sur les millions de lignes de code hébergées sur GitHub.
Petit plus : On peut mettre directement dans le code en commentaire les instructions en langage naturel et il les convertit en code.
Codeium
Il a une version gratuite qui est déjà pas mal pour tester le principe. Similaire à Copilot, il s’intègre aux mêmes IDE.
Il garantit que le code n’est pas entraîné sur du code sous licence contagieuse (type GPL) pour éviter les problèmes de propriété intellectuelle. (https://codeium.com/blog/copilot-trains-on-gpl-codeium-does-not). Cela peut séduire des entreprises qui craignent cet aspect de l’IA générative.
Petit plus : Entraîné uniquement sur du code à licence permissive.
IntelliJ
Depuis la version d’avril 2024, IntelliJ Ultimate propose son propre outil basé sur l’IA. C’est payant mais inclus dans la version Ultimate. Il propose notamment de la complétion basée sur du machine learning entraîné (comme codeium) uniquement sur code sans licence contagieuse. Aussi, les suggestions sont validées avant d’être affichées, c’est-à-dire qu’il compile dans le contexte où il est proposé. Cela permet de réduire les retouches a posteriori.
Petit plus : disponible nativement dans l’un des IDE les plus populaires. Vérifie que la suggestion compile avant de la proposer au développeur.
Autres
Tabnine, Cursor, AWS Code Whisperer, Sourcegraph cody
(Comparatif : https://www.youtube.com/watch?v=TXtnFw9eDmM)
Que faire avec ?
Ces outils permettent de gagner du temps dans l’écriture du code. Ils mâchent le travail en faisant des suggestions de portions de code entières basées sur le contexte. Il est surtout utile pour écrire du code « boilerplate » sans trop de valeur ajoutée : un service passe-plat, des getters/setters, un nouveau constructeur, etc. Ces assistants sont particulièrement efficaces pour les tâches récurrentes ou lorsque l’on travaille sur de gros projets où la cohérence du code est cruciale.
Je l’ai particulièrement apprécié pour la génération de tests unitaires. Il permet de créer le squelette du test en écrivant tous les bouchons et une partie des assertions. Codeium ne me faisait que les cas nominaux mais il est ensuite rapide de rajouter les cas d’erreur et les cas limite notamment grâce à la complétion qui propose des suggestions en s’inspirant des tests déjà écrits. Le fait de pouvoir effectuer une recherche sans quitter l’IDE est aussi assez appréciable pour des recherches simples, pour se rappeler une syntaxe. Ces fonctionnalités favorisent un flux de travail plus fluide et évitent les interruptions fréquentes.
Les limites
Le code généré est souvent imparfait. Il inclut des erreurs, oublie des variables et nécessite une relecture attentive. Plus grave, il peut contenir des mauvaises pratiques, des failles de sécurité et de l’obsolescence. Étant entraîné sur du code existant, cela inclut bien sûr du code de mauvaise qualité, des preuves de concept (POC), du partage d’un bout de code qui répond à une question sur StackOverflow mais qui ne correspond pas à du code industrialisé.
Évolution des outils d’IA générative
On peut espérer que ces défauts vont se corriger avec le temps. On peut, par exemple, choisir d’entraîner l’IA que sur du code labellisé « de qualité ». Mais cela réduit le corpus disponible. De plus, un code de qualité mais qui a 3 ou 4 ans peut aussi présenter des failles ou de l’obsolescence. (N’est-ce pas là la définition de l’obsolescence ?)
Il y a une autre crainte à prendre en compte. Si l’IA s’entraîne sur du code existant et qu’une part grandissante du code existant a été générée par elle, on obtient des IA qui s’entraînent sur du contenu généré par des IA. Après de multiples itérations, les défauts de ce type de code risquent de s’amplifier à travers un phénomène de biais algorithme appelé “Model Collapse”.
(https://www.gitclear.com/coding_on_copilot_data_shows_ais_downward_pressure_on_code_quality)
Des problèmes similaires ont déjà été rencontrés dans d’autres cas d’usage de l’IA (discrimination, propos racistes…).
Malgré leurs avantages, ces outils soulèvent des questions éthiques, notamment sur la provenance des données d’entraînement et les droits de propriété intellectuelle. À l’avenir, ils pourraient jouer un rôle clé dans la gestion de projet et l’optimisation des performances, tout en nécessitant une supervision humaine pour garantir leur efficacité et leur éthique.
La propriété intellectuelle
Les questions de propriété intellectuelle restent un enjeu majeur. Par exemple, si un assistant IA génère du code similaire à celui protégé par un droit d’auteur, l’entreprise pourrait être confrontée à des litiges juridiques coûteux. Cependant, des outils comme Codeium se démarquent en garantissant que le code n’est pas entraîné sur du code sous licence contagieuse, ce qui peut rassurer certaines entreprises. Une attention particulière doit être portée à la provenance des données d’entraînement pour éviter des problèmes légaux et éthiques.
Pour plus de détails : (https://www.lemagit.fr/actualites/252505263/OpenAI-Codex-genere-du-code-de-lenthousiasme-et-de-la-mefiance) (https://www.lemagit.fr/actualites/366551772/Copilot-et-la-propriete-intellectuelle-Microsoft-veut-rassurer-ses-clients)
Conclusion
Bien que les outils d’IA générative puissent considérablement améliorer la productivité des développeurs, il est crucial de les utiliser avec discernement. Il faut déjà maitriser les langages et framework pour pouvoir l’utiliser sereinement. Ils ne remplacent pas l’expertise humaine mais peuvent devenir un atout puissant dans des mains expérimentées.
Si vous êtes plutôt junior ou que vous découvrez une nouvelle technologie, laissez l’IA de côté et apprenez de manière classique. Utiliser l’intelligence artificielle pour apprendre serait une mauvaise idée. Privilégiez des tutoriels ou des cours pour bien comprendre les concepts fondamentaux.
Il ne fait aucun doute que dans quelques années, l’IA générative fera partie intégrante des outils du développeur, autant que la coloration syntaxique, la compilation à la volée ou la complétion. Autant s’y mettre pour se l’approprier !
Sébastien Manceaux
