Laurent - stock.adobe.com

Les IA s'invitent sur l'écran du développeur

Aider le développeur à écrire son code, mais aussi à le débugger et le tester, telle est l’ambition de nombreux éditeurs et sociétés de services. L’IA s’affirme de plus en plus comme une piste pour assister les développeurs au quotidien et leur permettre de développer plus et mieux.

Alors que le développeur reste une denrée rare pour les entreprises, les chefs de projet aimeraient bien voir les membres de leurs équipes se concentrer au développement de nouvelles fonctions et réduire le temps consacré à débugger ce qu’ils ont écrit la veille.

Quelque 20 %, 30 %, parfois 50 % de l’emploi du temps d’un développeur sont mobilisés par des tâches jugées peu génératrices de valeur pour l’entreprise. Les algorithmes d’intelligence artificielle pourraient avoir un rôle à jouer pour faire basculer la balance vers les tâches les plus créatives.

Exploiter l’IA pour aider les développeurs n’est pas totalement une nouveauté. Ainsi, les développeurs Microsoft connaissent bien la fonction IntelliSense de Visual Studio. Cette fonction d’autocomplétion propose au développeur de compléter sa ligne de code en cours de frappe. Avec l’édition 2018 de sa conférence Build, Microsoft est allé plus loin en s’appuyant sur le Machine Learning pour rendre cette autocomplétion un peu plus intelligente.

L’algorithme analyse le code déjà écrit par le développeur afin d’élargir ses recommandations. Baptisée IntelliCode, la fonction offre une autocomplétion assistée par IA, mais aussi un apprentissage sur le propre code du développeur lui-même (pour les développeurs C# seulement) et des capacités en termes de conventions de style, de mise en forme du code et même des suggestions de refactoring du code.

Altran publie ses outils internes sur Github

L’analyse de code peut aussi être mise à profit dans la détection des bugs, l’idée communément admise étant que plus un bug est détecté tôt dans le cycle de vie de l’application, moins il sera coûteux de le corriger. Dans cette perspective, Altran a récemment dévoilé l’outil « Code Defect AI ». Ce dernier a pour objectif de détecter les bugs dans le code source en s’appuyant sur divers algorithmes d’IA assez classiques dont les arbres de décision (random decision forests), les machines à vecteur de support (support vector machines), les MLP (multilayer perceptron) et enfin des régressions logistiques.

L'architecture de l'outil

Dans la vidéo de présentation du projet, Khalid Sebti, Vice President en charge de l’ingénierie logicielle et de la cybersécurité chez Altran, résume l’objectif de cet outil : « dans le domaine du génie logiciel, le développeur écrit le code et vérifie ensuite son code dans un système de contrôle de versions comme Git. Les équipes de test découvrent les bugs et les publient dans un système de gestion des défauts afin que les ingénieurs puissent aller réparer le bug. Ce processus se répète à plusieurs reprises jusqu’à ce que le code devienne stable et résistant. Ce va-et-vient est très coûteux et cela aura énormément de valeur de réduire le nombre de ces cycles ».

Khalid Sebti affirme que les premiers utilisateurs de la solution ont été capables d’identifier plus de 20 % des défauts de leur code avant même que le début de la phase de test. Altran a récemment présenté « Code Defect AI » sur le portail Microsoft AI Lab et propose ses outils en téléchargement sur Github. Khalid Sebti souhaite désormais coupler cet outil de prédiction des défauts de code avec la sélection de cas de test : « La solution va identifier les portions de code qui sont potentiellement boguées et proposer une série de tests maximiser la couverture du code et augmenter la qualité du produit ».

Quand le NLP génère les cas de test

De nombreuses start-up cherchent aujourd’hui à mettre au point des outils d’aide au développement s’appuyant sur des algorithmes d’intelligence artificielle. C’est notamment le cas du Français Ponicode, créé par Patrick Joubert en juin 2019. On se souvient que ce serial entrepreneur avait vendu Recast.AI à SAP en 2018, et c’est fort de cette expérience dans le NLP (Natural Language Processing, ou traitement du langage naturel) qu’il applique désormais cette approche au code informatique.

En quelques clics, l'IA Ponicode suggère automatiquement les tests unitaires correspondant au code tapé par le développeur. Un moyen rapide d'accroitre le taux de couverture des tests d'une application.

Le fondateur explique sa démarche : « l’IA peut se montrer utile en tout début du cycle de développement des applications, au moment où le développeur écrit le code. Elle peut intervenir lors de la revue de code, au moment des tests, et encore en phase de documentation. Nous avons bien l’intention d’adresser tous ces différents sujets, mais nous avons choisi de démarrer par les tests unitaires. Il suffit de poser la question aux développeurs s’ils aiment tester leur code et la réponse est non ! »

« L'IA peut se montrer utile en tout début du cycle de développement des applications, au moment où le développeur écrit le code. »
Patrick JoubertFondateur de Ponicode

L’algorithme créé par Ponicode génère donc de manière automatisée les tests unitaires et fonctionne avec l’éditeur Microsoft VSCode sous forme d’une extension. Lorsque le développeur écrit une fonction, un petit logo Ponicode vient s’afficher lorsque l’IA peut générer des tests à partir de ce code. D’un clic droit, il accède à une Webview où il va générer les tests en quelques clics.

« Notre IA est capable de suggérer des valeurs de test. Elle suggère actuellement les cas de tests et nous allons être capables de calculer la valeur de couverture du code par les tests. Ainsi, il sera possible d’évaluer les gains réalisés en étendant les tests créés par le développeur avec ceux de Ponicode, et passer par exemple de 15 % de couverture de test avec 2 tests à 80 % en sélectionnant les 5 tests supplémentaires proposés par l’IA ».

Le produit peut actuellement être testé en bêta privée sur un seul langage, JavaScript, mais Patrick Joubert affirme pouvoir rapidement supporter bien plus de langages : « avec Recast.AI, nous avions été les premiers à créer des modèles de NLP indépendants du langage et nous allons faire la même chose avec Ponicode. Ce n’est pas encore le cas, mais nous avançons bien pour que notre IA puisse être indépendante du langage. Mon objectif est que, dans l’année qui vient, nous soyons disponibles dans tous les langages du monde de l’entreprise, soit Java, C#, ainsi que Python, React, Angular, PHP ». Le rival le plus proche pour le Français semble être le Britannique Diffblue, un spin off de l’université d’Oxford dont l’outil est lui aussi en phase Beta.

Le Machine Learning traque bugs et vulnérabilités

Si Ponicode et Diffblue se concentrent sur la génération de tests, la startup suisse Deepcode se concentre sur le débugging. Projet financé par le fonds européen Horizon 2020, ce spin off de l’École polytechnique fédérale de Zurich exploite le Machine Learning pour débusquer les bugs et les vulnérabilités dans le code source.

Boris Paskalev, CEO de Deepcode explique son positionnement : « les outils d’autocomplétion sont très utiles et permettent d’accélérer considérablement la saisie du code, mais l’analyse de gros volumes de code permet d’identifier les risques potentiels présentés par un programme, en fonction de qui a modifié quel élément du code et quels commentaires ont été ajoutés. Cette approche change totalement de dimension si vous parvenez à convertir la logique et la structure complexe d’un morceau de code en une représentation sémantique et mener l’apprentissage d’un modèle de Machine Learning. Dès lors, le Machine Learning peut se livrer à une analyse sensée du code et devenir une véritable Intelligence Augmentée pour les développeurs ».

Si l'IA a un rôle à jouer dans l'analyse du code source, d'autres comme Mabl misent sur le Machine Learning pour doper la productivité des testeurs en charge des tests fonctionnels.

L’analyse des langages JavaScript, Python, Java et TypeScript sont actuellement prioritaires dans la roadmap de la start-up, mais le travail sur C/C++ est lancé. La solution est disponible sur VS Code, IntelliJ IDEA, Sublime Text, PyCharm, Atom, WebStorm, CLion, Visual Studio Codespaces, GitPod.

Boris Paskalev estime que les algorithmes pourront soulager de moitié du temps passé les développeurs à débugger leur code. « Notre objectif initial de gain de productivité moyen devrait être de 10 %. D’autres éléments permettent d’obtenir ces avantages : le traitement des problèmes de production, les correctifs pour éteindre les incendies et la coordination/le traitement de tout impact des problèmes de production sur les utilisateurs. L’avantage à long terme est que les développeurs apprendront toujours la sémantique et la logique du problème, de sorte que leurs connaissances s’enrichiront encore plus vite avec le temps ».

« Les développeurs passent 20 à 30 % de leur temps à résoudre des problèmes liés au code, ce temps est donc entièrement consacré à la résolution de problèmes (non productifs). »
Boris PaskalevCEO, Deepcode

De multiples start-up cherchent à innover tout au long de la chaîne de CI/CD, à l’image de Testim ou Mabl par exemple dans le domaine de l’automatisation des tests fonctionnels ou encore Applitools et Retest pour repérer les défauts purement visuels des applications. Enfin, les plateformes cloud de Test Automation ne sont pas en reste avec des acteurs tels que Sauce Labs, Sealights ne sont pas en reste avec des annonces qui vont dans ce sens.

Si beaucoup d’éditeurs disent utiliser de l’IA, peu maîtrisent réellement les technologies d’IA et se contentent d’algorithmes bien plus classiques. Ainsi Adrian Trifu, fondateur de Logarix, éditeur de AI Reviewer explique : « AI Reviewer n’utilise pas l’apprentissage automatique pour analyser le code source, du moins pas encore. Notre outil s’appuie sur l’analyse statique et la mesure des modèles structurels du code et utilise l’heuristique pour détecter les anti-patterns. Bien qu’une forme d’apprentissage automatique puisse en principe avoir un sens, une solution purement “magique” basée sur l’IA est encore loin, je pense. Néanmoins, nous envisageons d’utiliser une forme d’IA à terme. »

Si le niveau de maturité des éditeurs d’outils qui sont exploités dans la chaîne CI/CD reste encore très hétérogène, nul doute que l’IA s’annonce d’ores et déjà comme une aide précieuse aux développeurs qui pourront sans doute consacrer plus de temps à coder qu’à en perdre à tester.

Pour approfondir sur Outils de développement