Le développement est l’un des domaines les plus touchés par les avancées de l’IA. Le phénomène n’a pas attendu ChatGPT. Comment l’IA peut faciliter la conception, la programmation et l’optimisation logicielle et web ? Quelles sont les meilleures IA assistant de code ? Quelles sont leurs limites ?
« L’IA va écrire 80 % du code d’ici 5 ans »
Thomas Dohmke, PDG de GitHub
« L’IA va écrire 80 % du code d’ici 5 ans » affirmait en 2022 de manière prophétique et un brin provocatrice Thomas Dohmke, le patron de GitHub, la plateforme de collaboration et de gestion de code source utilisée par plus de 100 millions de développeurs.
Les IA génératives comme ChatGPT, Copilot ou Gemini (anciennement Google Bard) ont marqué la démocratisation de l’intelligence artificielle. Basées sur de grands modèles de langage (LLM), ces IA ne servent pas qu’à créer du texte ou des images. Elles peuvent aussi générer du code, le commenter, suggérer des optimisations ou faire la chasse aux bugs, faisant gagner un temps précieux aux développeurs.
Lancé en 2021, GitHub Copilot, l’IA de génération de code la plus populaire, compte déjà en octobre 2023 plus d’un million d’utilisateurs payants dans plus de 37 000 organisations !
Il n’en faut pas plus pour consacrer l’année 2024 comme celle des IA spécialisées en code. De quoi raviver le débat engendré par la tendance low-code/no-code sur la disparition du métier de développeur, ou du moins son inéluctable évolution.
Il n’a fallu que 16 minutes pour créer ce jeu !
Le code, une donnée idéale pour alimenter l’IA
Le code fait partie des domaines de prédilection de l’IA. Et ce, bien avant l’arrivée de ChatGPT en novembre 2022. Citons l’assistant IBM Watson Code en 2015, DeepCode en 2016 pour trouver les failles de sécurité d’un programme ou Microsoft IntelliCode en 2017 pour améliorer la saisie semi-automatique de code d’IntelliSense apparue dix ans plus tôt dans Visual Studio.
Rien d’étonnant à cela, ces IA sont basées sur de grands modèles de langage (LLM) entraînés sur de grands ensembles de données à base de texte. Et pour alimenter les algorithmes d’apprentissage automatique, ces IA ont besoin de données structurées. Le code fait alors figure de candidat idéal : sous format texte, structuré, disponible en grande quantité, en open source, dans d’immenses dépôts comme GitHub ou SourceForge.
Ainsi, GitHub Copilot a été entraîné sur les 54 millions de dépôts de GitHub, notamment un jeu de données de 159 Go de code Python.
Sommaire
1. Les principaux usages des IA de code :
- Génération automatique de code
- Détection et correction des bugs
- Optimisation et réécriture de code
- Analyse et explication de code
- Documentation du code
- Détection des failles de sécurité
- Tests automatisés
- Conversion d’un langage à un autre
- Apprentissage d’un nouveau langage
2. Les limites des IA de code
3. Liste des meilleures IA de génération de code
À quoi servent les IA de code ?
Utiliser l’intelligence artificielle est donc devenu une pratique courante de nombreux développeurs. D’autant que ces outils sont à leur portée de main. On les retrouve sous la forme d’extensions dans les environnements de développement (IDE) les plus courants, comme Visual Studio Code, Eclipse ou les logiciels spécialisés de JetBrains (IntelliJ, PhpStorm, PyCharm, WebStorm…).
À ce jour, on compte plusieurs centaines d’outils d’aide au développement, couvrant une large variété d’applications. Leur nombre augmente sans cesse. De nouveaux outils à base d’IA apparaissent chaque semaine, répondant ainsi à la demande des développeurs pour des solutions plus efficaces et performantes.
Les usages des IA pour le développement sont très nombreux :
Génération automatique de code
C’est de loin la fonction la plus utilisée par les développeurs. L’IA crée du code à partir d’une requête (un prompt), une description en langage naturel de ce que l’on souhaite, ou à partir du code déjà saisi en le complétant automatiquement. Cette dernière fonction d’autocomplétion est une amélioration des systèmes de saisie semi-automatique qui existent depuis longtemps dans les IDE. Mais au lieu de deviner seulement le prochain mot, l’IA va générer une ou plusieurs lignes de code selon des statistiques de probabilité.
L’IA ne fait que des suggestions. Le développeur peut affiner sa demande de manière itérative afin d’obtenir le résultat désiré.
Le gain de temps est énorme. Les développeurs peuvent coder plus vite (55 % plus vite selon les statistiques de GitHub), avec plus de précision et avec une meilleure compréhension du code.
Détection et correction des bugs
Une IA de code sert également à débugger un code, à le valider par rapport à la syntaxe d’un langage donné, mais aussi détecter des erreurs difficiles à trouver dans un code complexe. Ainsi, l’IA analyse le code qu’on lui soumet et détecte les éventuelles erreurs, comme les :
- erreurs de syntaxe : un point-virgule qui manque à la fin d’une instruction en Java ou en JavaScript, une balise de fermeture manquante en PHP, une accolade en trop dans une CSS…
- erreurs d’exécution : utilisation d’une variable non initialisée ou supprimée (NullPointer),tentative d’accès à un objet qui n’est plus accessible en mémoire (PointerException), pile d’appels trop grande (StackOverflow)…
- erreurs de logique : division par zéro, débordement arithmétique, appel de fonction inexistante…
- erreurs d’entrées-sorties : erreurs de lecture ou d’écriture sur un support de stockage, tentative d’ouverture d’un fichier qui n’existe pas…
- erreurs de formatage : format inattendu par une chaîne de caractères, type de donnée incorrect…
Optimisation et réécriture de code
Les IA sont capables d’améliorer la qualité du code, sa rapidité d’exécution et sa lisibilité. Elles suggèrent des changements à opérer : refactoring du code (simplification de la structure, rendre le code plus modulaire et réutilisable, application des principes SOLID…), réduction des boucles superflues, parallélisation des tâches, optimisation des structures de données et des entrées-sorties…
Les IA flairent les code smells, ces mauvaises pratiques de conception logicielles qui peuvent rendre le code plus difficile à déboguer et qui augmentent le risque de bugs. Ainsi, les duplications de code, les noms de variables non explicites ou les couplages excessifs (classes et modules trop interdépendants) sont traqués en quelques secondes.
De plus, l’IA formate le code selon les conventions et bonnes pratiques d’un langage donné tout en ajoutant des commentaires et une documentation. La lisibilité du code, sa compréhension et sa maintenabilité s’en trouvent facilitées, permettant à des développeurs de reprendre rapidement le projet, même ceux qui n’y ont pas participé.
Analyse et explication de code
Pour mieux comprendre un code, un développeur peut questionner une IA en langage naturel à travers une interface de chat. Certaines IA sont également capables de générer des visualisations du code afin d’aider les développeurs à mieux appréhender la structure du code, sa logique et les relations entre les différentes parties le composant.
L’utilisation massive de l’IA pour expliquer du code a entraîné la chute de l’audience de Stack Overflow, le célèbre forum de questions-réponses consulté par des millions de développeurs, provoquant la suppression de 28 % de son personnel en octobre 2023.
Documentation du code
Terminer le code nécessite de rédiger sa documentation, une étape fastidieuse et souvent négligée. Trop souvent, les développeurs sont poussés à fournir un code fonctionnel de plus en plus rapidement, laissant la documentation au second plan.
L’intelligence artificielle peut changer la donne. En analysant le code, elle peut produire immédiatement une documentation complète et mise en forme, garantissant sa clarté et sa lisibilité. Ce processus révolutionnaire réduit considérablement la dette technique et permet aux développeurs de se concentrer sur leur cœur de métier : la création de code.
Détection de failles de sécurité
On pourrait penser que les IA sont aussi utiles pour corriger du code que pour détecter des failles de sécurité. C’est le cas. Des IA comme Checkmarx CheckAI, BurpGPT, DeepCode, Codacy, GitHub Copilot détectent des failles et font des recommandations pour les combler, parfois en un clic. Elles détectent les vulnérabilités connues, les anti-patterns de sécurité comme les injections SQL ou les XSS. Certaines IA peuvent analyser le flux de données dans le code source afin d’identifier les points d’entrée et de sortie potentiels pour les attaques.
Il convient toutefois de rester vigilant et de ne pas se reposer que sur les IA. La conduite de tests statiques et dynamiques manuels reste impérative.
Génération de tests automatisés
Grâce à ses capacités, l’IA est capable de conduire des tests automatiques. Cela apporte de nombreux avantages comme le gain de temps, l’amélioration de la couverture de code (identifier des parties de codes qui n’ont pas été testées manuellement), une meilleure détection des bugs et une réduction des coûts associés aux tests manuels.
Parmi les outils de génération de tests, citons DeepCode qui utilise l’apprentissage automatique pour générer des tests unitaires et d’intégration.
Cependant, cette technologie n’est pas encore parfaite. Elle fait gagner du temps, mais doit encore être complétée par des tests manuels, notamment pour tester les aspects non fonctionnels d’une appli ou d’un site comme la convivialité ou les performances. On ne peut donc pas encore considérer l’IA comme un substitut aux tests manuels.
Conversion d’un langage à un autre
Maîtrisant plusieurs langages de programmation, la plupart des IA de code sont capables de traduire du code d’un langage à un autre. L’opération n’est pas aisée, car passer d’un langage à un autre nécessite de convertir la syntaxe (changement de structure par blocs vers indentation, par exemple), la logique (changement des paradigmes et des structures de contrôle), trouver des bibliothèques équivalentes dans le langage cible, convertir les commentaires et la documentation, et optimiser le code pour le langage cible.
On pourra ainsi passer du C++ vers Python et vice versa ou du Java vers Python en quelques secondes. La conversion automatique de code par IA accélère le processus de développement logiciel sur différentes plateformes et évite les erreurs de traduction manuelles. Outre les IA de code ci-dessous, citons des IA spécialisées comme DeepCode, Polyglot, Code Trans et AI Code Translator.
Apprendre un nouveau langage
Les IA de code prennent en charge un grand nombre de langages de programmation, abolissant la barrière qui existe entre les différents développeurs. On pourra ainsi apprendre facilement un nouveau langage en demandant à l’IA de le convertir depuis un langage que l’on maîtrise. Comme nous l’avons vu plus haut, l’IA pourra également expliquer du code existant ou permettre de se tester en lui demandant de corriger vos erreurs. Cerise sur le gâteau, des IA comme ChatGPT ou Gemini (anciennement Bard) sont capables de créer des exercices et des QCM de code pour tester vos nouvelles connaissances.
Par exemple, GitHub Copilot est capable de comprendre et générer du code dans les principaux langages et frameworks, notamment :
- Langages compilés : C, C++, C#, Go, Java…
- Langages de script : Bash, JavaScript, Powershell, Python, Ruby, TypeScript…
- Langages de balisage : CSS, HTML, XML, JSON, YAML…
- Langages de bases de données : SQL, MySQL, PostgreSQL…
- Langages de programmation spécifiques : SQL, R…
- Frameworks : Django (Python), Angular et React (JavaScript), ASP.NET (C#), Spring Boot (Java), Laravel (PHP), Qt (C++)…
Bien sûr, l’intelligence artificielle ne peut pas égaler les formations aussi spécialisées et interactives que nous offrons chez ORSYS. Nos 246 formations en développement logiciel et web sont animées par des professionnels de terrain expérimentés qui adaptent leurs cours à vos besoins. L’IA ne remplace pas le rapport humain.
Les limites des IA de génération de code
Les IA révolutionnent le processus de développement à tous les stades. Cependant, elles font encore face à de nombreuses limitations et contraintes qu’il faut avoir en tête avant de les utiliser.
Un code standardisé
Issu de dépôt de code open source, le code généré par les IA conduit à un code standardisé, un code répété qui parfois dégrade la qualité et appauvrit le code d’ensemble. Ainsi, la société de conseil GitClear a analysé 153 millions de lignes de code modifiées, rédigées entre janvier 2020 et décembre 2023. Elle en a conclu que
« la rotation du code – le pourcentage de lignes qui sont révisées ou mises à jour moins de deux semaines après leur création – devrait doubler en 2024 par rapport à sa valeur de référence de 2021, avant l’apparition de l’IA. »
Selon GitClear, l’accroissement de copier-coller de code causé par l’IA devrait aggraver la dette technique des entreprises ces prochaines années.
Une qualité inégale selon les langages
Les IA de code sont comme toutes les IA : la qualité de leur réponse dépend étroitement de la quantité et de la qualité des données qui ont servi à leur entrainement. Ainsi, plus un langage de programmation est populaire dans les dépôts de code publics comme GitHub, GitLab ou Bitbucket, plus les suggestions de l’IA seront pertinentes.
Par exemple, JavaScript est très présent dans les dépôts. Les suggestions de l’IA sur du JavaScript seront donc très pertinentes. À l’inverse, des langages connus, mais comparativement moins présents sur les dépôts de code comme Julia, ABAP de SAP, ou MATLAB seront mal pris en charge.
Des biais de programmation
Les dépôts publics qui servent de données d’entrainement aux IA peuvent contenir du code mal écrit ou orienté vers un certain résultat. Cela peut affecter les suggestions de code des IA comme générer du code discriminatoire.
L’IA ne comprend pas du code complexe
Pour le moment, les IA de génération de code ne savent pas traiter un projet dans son ensemble.
Les IA sont parfaites pour générer du code court, des fragments de code comme des snippets ou des fonctions. À l’inverse, leurs suggestions sont moins pertinentes sur un code long. Pour le moment, travailler sur un projet complexe nécessite de le découper afin que l’IA l’analyse partie par partie. Cependant, l’IA ne pourra pas prendre en compte le tableau d’ensemble ni intégrer tout le contexte du projet (budget, temps, plateforme cible, compétences des développeurs, outils disponibles, besoins des parties prenantes, etc.).
Des IA victimes d’hallucinations
Bien connues des utilisateurs de ChatGPT, les hallucinations sont des réponses inventées par les LLM quand ils n’arrivent pas à trouver la bonne réponse à une question et sont présentées comme un fait certain. Appliqué au développement, cela peut conduire à un code faux, peu sécurisé et qui fera donc perdre du temps au développeur.
Des problèmes de droits d’auteur et de confidentialité des données
Si les IA utilisent en grande partie des données publiques, il y a sans doute du code soumis à des droits d’auteur avec des risques de plagiat. De plus, il faut se rappeler que lorsque vous utilisez une IA, vous la formez. En écrivant un code propriétaire ou soumis à des accords de confidentialité, vous pourriez enfreindre la politique de votre entreprise. Certains éditeurs, comme Tabnine et GitHub pour Copilot Business, ne stockent pas votre code et n’entraînent leurs IA que sur des dépôts open source dont la licence le permet.
De potentielles failles de sécurité
Attention à ne pas trop se reposer sur l’IA pour la sécurité de vos données. Le code généré par les IA n’est ni testé ni validé par des humains. De plus, la qualité du code dépend, comme nous l’avons vu, de la qualité des données sur lesquelles elles se sont entraînées. Si les données sont compromises ou comprennent des erreurs, le code généré pourrait être lui aussi compromis.
De plus, le code généré par les IA peut être difficile à auditer et à comprendre, ce qui rend difficile la détection de failles de sécurité. Faute de quoi, seules des IA spécialisées en cybersécurité seront capables de l’analyser !
Des problèmes éthiques
Les programmes qui touchent à l’humain (santé, conduite autonome, sélection de candidats…) peuvent poser des questions éthiques qui ne sont pas gérées par les IA ou qui peuvent conduire à des résultats biaisés. Confieriez-vous la vie de patients ou d’utilisateurs de véhicules autonomes à une IA ?
Le futur du développement sera écrit par l’IA
Si les outils restent encore perfectibles, l’IA fait des progrès constants et rend d’ores et déjà bien des services aux développeurs qui peuvent se concentrer sur d’autres tâches à plus forte valeur ajoutée et collaboratives. Ainsi, ils auront plus de temps pour assister aux nombreuses réunions de projet (coordination, démos, suivi, validation, rétrospective…), où là, hélas, l’IA ne peut pas encore les remplacer !
Les principales IA de génération de code
GitHub Copilot
Le plus célèbre assistant de code. À ne pas confondre avec Copilot, l’IA conversationnelle de Windows 11, Bing et Microsoft 365. GitHub Copilot a été développé en 2021 par GitHub, une filiale de Microsoft, en partenariat avec OpenAI. Son principal atout : s’intégrer sous forme d’extension dans les principaux IDE comme Visual Studio Code, Visual Studio, Vim, Neovim, les IDE de JetBrains et Azure Data Studio.
Prix : À partir de 10 $/mois ou 100 $ par an
Tabnine
Utilisé par 3 millions de développeurs, cet outil open source fonctionne avec des modèles GPT pour prédire et suggérer du code à mesure que le développeur écrit. L’outil fournit aussi des snippets pour des tâches courantes et une fonction de chat. Tabnine s’intègre aux principaux IDE : Visual Studio, Eclipse, Android Studio et les IDE de JetBrains.
Prix : à partir de 12 $/mois (gratuit en version limitée)
Amazon CodeWhisperer
Développé par Amazon, CodeWhisperer écrit aussi bien des snippets que des fonctions complètes à partir de votre demande ou du code existant. Il s’utile en ligne de commande ou via un IDE (VS Code, Visual Studio, IDE de JetBrains, AWS Cloud9…). Son assistant conversationnel Amazon Q dispense des conseils personnalisés.
Prix : à partir de 20 $/mois (gratuit pour un usage personnel)
Google Gemini (anciennement Bard)
La nouvelle version de l’IA de Google s’appelle Gemini et améliore son efficacité, notamment en développement. Bard génère du code dans une vingtaine de langages, peut expliquer, débugger et commenter du code et écrire des fonctions pour Google Sheets.
Prix : gratuit (pour le moment)
ChatGPT
La célèbre IA générative n’a pas été conçue spécifiquement pour la programmation, mais elle peut comprendre et générer du code dans les principaux langages. ChatGPT a de nombreuses limites : il ne crée pas de programmes complets, ne s’intègre pas aux IDE et n’est pas très efficace pour détecter des failles de sécurité.
Prix : à partir de 20 $/mois (gratuit en version limitée GPT-3.5 )