Un organigramme avec plusieurs formes et symboles dont une bulle bleue, un point d’interrogation et une coche.
Présentation

L’IA peut révolutionner le développement d’applications en générant, optimisant et traduisant le code tout au long du cycle de développement logiciel. L’adoption de l’IA générative peut permettre une création cohérente des logiciels, une utilisation optimale de la créativité des développeurs et une amélioration de leurs compétences. Par exemple :

  • Pour les développeurs Python et Java, l’IA générative peut renforcer les capacités en automatisant les tâches à faible valeur ajoutée telles que la génération de code et la recherche de bogues. Elle peut également améliorer l’optimisation du code, appliquer les normes de codage et faciliter la sélection des API et des bibliothèques, afin de favoriser des applications plus efficaces et plus robustes.
  • Dans les langages traditionnels comme COBOL, l’IA générative peut insuffler une nouvelle vie aux systèmes existants. En restructurant et en optimisant le code COBOL existant, l’IA générative peut améliorer la performance et la maintenabilité de ces systèmes. Elle peut également faciliter la conversion du code COBOL vers des langages plus modernes, tels que Java, ce qui en fait un outil précieux lors de la modernisation des systèmes.
  • Pour les ingénieurs de fiabilité des sites (SRE) travaillant avec Ansible, l’IA générative peut automatiser la création des protocoles, optimiser les scripts existants, voire identifier les erreurs. Cette automatisation réduit considérablement le temps consacré aux tâches routinières, permettant aux équipes SRE de se concentrer sur des défis plus complexes.
Pourquoi utiliser l’IA générative dans le développement d’applications ?

L’utilisation de l’IA générative dans le développement d’applications peut apporter des avantages majeurs :

  • Cohérence : en appliquant l’IA générative pour réviser et remanier le code, les développeurs peuvent maintenir des normes de codage cohérentes, ce qui facilite le dépannage et la maintenance des logiciels.
  • Optimisation de la créativité : l’IA générative peut automatiser les tâches à faible valeur ajoutée et permettre aux développeurs de se concentrer sur des tâches plus complexes, ce qui conduit à des cycles de développement plus courts et à des changements plus fréquents.
  • Amplification des compétences : l’IA générative peut servir de mentor aux développeurs débutants, leur permettant de travailler à un niveau confirmé, voire expert.

L’utilisation de l’IA générative pour réviser, remanier et appliquer les normes de codage de l’entreprise aux logiciels donne des résultats plus cohérents (par exemple, des approches communes pour résoudre les problèmes récurrents, une structure de code commune, un code auto-documenté, etc.), quel que soit le développeur qui a écrit le code. Cela facilite le dépannage et la maintenance de l’application résultante, car les équipes de maintenance ont moins besoin de comprendre la structure et les idiosyncrasies des différentes sections du code.

Comme dans d’autres domaines, l’IA générative a le potentiel de libérer les développeurs d’applications des tâches à faible valeur ajoutée telles que l’écriture de code simple/routinier ou l’identification de la source d’un bogue gênant. Disposant de plus de temps pour se concentrer sur les tâches à plus forte valeur ajoutée, les développeurs peuvent raccourcir les cycles de développement, augmenter le nombre de fonctionnalités par version logicielle et procéder à des modifications plus petites et plus fréquentes.

Enfin, l’utilisation de l’IA générative dans le développement d’applications peut renforcer les compétences des développeurs, permettant aux débutants de travailler à un niveau confirmé, voire expert. Les développeurs expérimentés peuvent intégrer l’entraînement des modèles dans leurs cycles de publication, en intégrant des pratiques de pointe à mesure que le code est amélioré. L’IA générative peut servir de mentor expert aux débutants pour permettre aux développeurs confirmés de se concentrer sur d’autres tâches et améliorer le niveau de compétence global de l’équipe de développement.

Cas d’utilisation dans le développement d’applications

Les cas d’utilisation de l’IA générative dans le développement d’applications sont variés. De nombreux modèles généraux, tels que Llama 2, sont entraînés sur du code d’application écrit dans plusieurs langages de programmation contemporains ; des modèles réglés pour générer du code sont également disponibles.

Voici quelques exemples de cas d’utilisation de l’IA générative :

  • Génération de code : l’IA générative peut générer du code à partir de prompts en langage naturel.
  • Optimisation du code et refactoring : l’IA peut être utilisée pour optimiser et restructurer le code, le rendre plus efficace et éliminer les doublons.
  • Application des normes de codage : l’IA peut appliquer les normes et conventions de codage, ce qui permet également de renforcer la conformité réglementaire.
  • Conversion de code : l’IA peut convertir le code d’un langage à un autre.
  • Compréhension du code/documentation/recherche de bogues : l’IA peut interpréter le code et générer des explications sur son fonctionnement, et également identifier les erreurs.
  • Sélection des API et des bibliothèques : l’IA peut aider les développeurs à choisir les bonnes API et bibliothèques logicielles pour leurs applications.

Chacun de ces cas d’utilisation est décrit ci-dessous.

La capacité native de génération de texte des grands modèles de langage (LLM) peut être utilisée pour générer du nouveau code à partir de prompts en langage naturel. Par exemple, un développeur peut envoyer le prompt « Écris une requête SQL pour récupérer le nom et le prénom d’un client dans la table des clients » et recevoir une requête SQL en retour.

Si l’utilisation des LLM pour la génération de code peut considérablement renforcer les compétences en développement d’applications des débutants, voire des non-développeurs, elle peut rapidement atteindre un point de rendement décroissant à mesure que les sorties requises deviennent plus complexes, ou que le niveau de détail requis dans les prompts approche du code qui sera généré.

 

Le processus d’optimisation du code et de refactoring, qui vise à améliorer la performance et la structure du code, peut être considéré comme une combinaison de deux capacités de LLM : la génération de texte et la synthèse de texte. En utilisant un LLM général ou réglé, le développeur peut demander d’optimiser ou de restructurer un morceau de code pour le rendre plus performant et/ou éliminer le code en double.

Les LLM fonctionnent bien pour optimiser et remanier de petits morceaux de code qui s’intègrent dans la fenêtre contextuelle des modèles, mais ils nécessitent des solutions plus larges, qui maintiennent des métadonnées sur l’ensemble de l’application logicielle pour obtenir des résultats acceptables sur des morceaux de code plus importants et/ou des systèmes logiciels complets.

Comme pour l’optimisation du code, les LLM peuvent être utilisés pour appliquer et faire respecter les normes de codage de l’entreprise sur des sujets tels que la dénomination des fonctions et des variables, la structure du code et les conventions de codage de l’entreprise. Généralement appliqués au niveau du référentiel dans le cadre du processus d’évaluation et d’envoi du code, les LLM réglés sur les normes de codage de l’entreprise peuvent traduire le code pour se conformer aux normes de l’entreprise. Ces normes peuvent également inclure des conventions de durcissement qui aident l’entreprise à se conformer aux normes réglementaires.

Les langages de programmation étant des langues comme les autres, la capacité native de traduction de texte des LLM permet de traduire des logiciels écrits dans un langage de programmation vers un autre (par exemple, convertir C# en Java).

Comme pour l’optimisation de code, les LLM fonctionnent bien pour convertir de petits morceaux de code qui rentrent dans la fenêtre contextuelle du modèle, mais des solutions plus larges, qui conservent les métadonnées et d’autres informations contextuelles importantes, sont nécessaires pour convertir de plus grands morceaux de code ou des systèmes logiciels complets.

Grâce à ses capacités de conversion de code, l’IA générative peut également faciliter la traduction du code entre différents langages de programmation, comme la traduction du code COBOL en Java. Cela peut s’avérer particulièrement utile dans les environnements multilingues ou lors des migrations de systèmes, en épargnant aux développeurs le temps et les efforts nécessaires à la réécriture manuelle du code.

La compréhension du code est analogue à la génération de code. Au lieu de convertir les prompts en langage naturel en code, l’explication du code prend un morceau de code en entrée et génère une explication en langage naturel des fonctionnalités du code. Par exemple, un prompt tel que « Explique la fonction de ce morceau de code Python » suivi d’une section en Python peut générer un résumé ligne par ligne de l’objectif du code.

Cette capacité peut également être utilisée pour détecter les erreurs dans le code. Également appelé recherche de bogues, ce processus consiste à demander au modèle d’« identifier pourquoi ce morceau de code échoue ».

La sélection des API et des bibliothèques est l’application de la génération augmentée par récupération (RAG) à la gestion des API et des bibliothèques logicielles d’entreprise. Un développeur cherchant une API à utiliser avec une application peut composer un prompt RAG qui interroge une base de données d’entreprise comprenant des noms d’API, des descriptions, des points de terminaison, etc., pour répondre à des questions telles que « Avons-nous une API pour xyz ? » Si les descriptions des API et des bibliothèques de code sont maintenues avec une haute qualité et des mots-clés, une telle application peut être ajustée pour fournir des réponses cohérentes accélérant le développement d’applications, ainsi que l’intégration des développeurs.

Décisions et considérations relatives à l’architecture

Les architectes doivent prendre un certain nombre de décisions importantes en matière d’architecture lorsqu’ils conçoivent des solutions de développement d’applications à l’aide de LLM.

Le modèle offre-t-il une indemnisation ou une protection des droits d’auteur, et comment déterminer si le code généré est soumis à des conditions de licence ? Même les modèles entraînés sur la base de licences permissives peuvent être soumis à des clauses telles que l’attribution au titulaire des droits d’auteur.

Les architectes qui créent des solutions destinées à faire respecter et à appliquer les normes de codage de l’entreprise doivent prendre en compte les efforts nécessaires pour régler un LLM afin de « comprendre » les normes de l’entreprise ; et décider en connaissance de cause si d’autres méthodes, comme les outils de linting, sont mieux instrumentées pour atteindre des capacités similaires.

L’assistance au codage de type auto-complétion doit répondre rapidement pour ne pas entraver la réflexion du développeur. Les architectes doivent réfléchir à l’emplacement et à la connectivité des modèles d’aide aux développeurs pour s’assurer que ces supports sont bénéfiques et non intrusifs.

Il n’est pas garanti que les grands modèles de langage produisent un code fonctionnellement correct, en particulier si le code généré ou révisé doit s’intégrer dans un système logiciel plus grand. Bien qu’il n’existe pas de solution directe à ce problème (et qu’il en existe de moins en moins à mesure que les LLM évoluent), les architectes doivent prendre conscience que le code généré par LLM doit être soumis aux mêmes contrôles de qualité et de sécurité que le code produit par les développeurs humains.

Les LLM généralement disponibles sont entraînés sur un petit nombre de langages de programmation actuels tels que Python, Javascript, C#, et d’autres. Les architectes de solutions qui doivent prendre en charge des langages plus anciens ou des langages de niche peuvent se retrouver avec peu de choix parmi les modèles disponibles, ou peuvent être obligés de régler agressivement un modèle général pour répondre à leurs besoins spécifiques.

Étapes suivantes

Échangez avec nos experts pour bien mettre en œuvre votre schéma de déploiement cloud hybride.

Contributeurs

Pete Nuwayser, Chris Kirby, Mihai Criveti

Mise à jour : 30 novembre 2023