Comment l’Intelligence Artificielle permet d’améliorer la qualité du code

Améliorer la qualité du code informatique n’est pas forcément dans le viseur des développeurs qui ont vite fait de sortir le fameux adage « It’s not a bug, it’s a feature » (ce n’est pas un bug, c’est une demande de nouvelle fonctionnalité). Et pourtant, l’Intelligence artificielle, encore elle, peut aider. C’est un peu une mise en abyme, le code qui contrôle le  code qui aide à améliorer le code … il y a de quoi s’y perdre. Pour éclairer votre lanterne je me suis tourné vers une jeune startup française, Ponicode, qui s’est lancée dans une croisade pour améliorer la qualité des développements IT. J’ai donc interviewé Christophe Shaw, son Chief Revenue Officer, pour parler d’intelligence artificielle et d’amélioration de la qualité du code informatique. Pour ne rien gâcher, Christophe est lui-même développeur et il sait de quoi il parle.

Améliorer la qualité du code grâce à l’intelligence artificielle

intelligence artificielle qualité code
Le premier bug (insecte) en 1947. Enfin, pas vraiment le premier nous explique ce billet, mais un des signes que dès les débuts de l’informatique, ces vilaines petites bêtes menaçaient déjà la qualité du code informatique (ou mécanographique à l’époque). Aujourd’hui l’intelligence artificielle est peut-être devenue le Fly-tox du 21e siècle

Nous avons parlé déjà, à plusieurs reprises de low code et de no code, il est donc temps de reparler de développement tout court.

intelligence artificielle qualité code
Le bon vieil adage qui a fait souffrir tous les responsables de MOA, dont votre serviteur, pendant des années. On s’en souvient toute sa vie en général … [infographie Typemock]. Pourtant, l’intelligence artificielle peut aider les développeurs à améliorer la qualité de leur code
Car c’est encore un sujet d’actualité. Après 76 ans d’industrie informatique, malgré beaucoup d’évolutions dans les processus et dans l’approche de la qualité, il y a encore pas mal de bugs aujourd’hui dans les logiciels qui sont commercialisés.

intelligence artificielle qualité code
L’ENIAC a été inventé en 1945 (ici une photo de 1947). Voici donc que l’industrie de l’IT a 74 ans … et pourtant ce n’est pas encore une industrie.

Même les systèmes d’exploitations des meilleures entreprises IT américaines sont encore criblés de bugs et d’erreurs, souvent dues à un environnement IT dont la  complexité multiplie l’empilage des couches et par voie de conséquence des interdépendances, des incompatibilités et des problèmes, mais aussi à la négligence et à la bonne vieille régression logicielle.

Et les coûts sont énormes, comme l’indique l’infographie de la société de tests informatiques unitaires Typemock, que nous allons utiliser ici pour illustrer notre billet.

intelligence artificielle qualité code
La mauvaise qualité du code IT coûte plus que de l’énervement des utilisateurs (disponible en quantité illimitée), cela coûte de l’argent. Sans voir vérifié les chiffres cités par Boehm et Basili cités dans cette infographie de Typemock sont assez vieux (2001), mais le problème n’a pas vraiment été réglé depuis lors.

L’intelligence artificielle pour améliorer la qualité du code humain (donc faillible)

« Le code informatique est une production humaine, donc faillible », souligne Christophe. De temps en temps, il y a quelque chose qui échappe à l’attention des développeurs, puis du testeur, et des résidus se propagent avec parfois des conséquences dramatiques.

Quelques bugs célèbres

Il y a quelques grands bugs connus dans l’histoire récente : l’explosion de la fusée Ariane 5 en 1996, due à un bug dans la centrale inertielle (voir la vidéo ci-dessous). Plus près de nous aujourd’hui, la fameuse affaire Solarwinds, qui est à l’origine de la compromission de données dans beaucoup d’entreprises majeures et au sein de gouvernements, et qui est liée à un bug dans le logiciel de l’entreprise, qui avait eu une faille de sécurité.

Les conséquences sont donc parfois extrêmement importantes, à la fois pour l’entreprise, mais aussi pour le reste du monde.

Ces exemples sont emblématiques et cataclysmiques, mais, au jour le jour, on rencontre des bugs moins spectaculaires mais tout aussi énervants.

Christophe m’indique que la plupart des utilisateurs ne s’arrêtent pas à la recherche de la cause quand ils rencontrent un bug, mais partent chercher le service ailleurs. Assembla confirme en précisant qu’1% seulement des utilisateurs remontent les bugs aux éditeurs.

En étant un peu facétieux, on pourrait ajouter que 0% des éditeurs répondent aux bugs remontés par les utilisateurs. Ou alors, ils le font bien souvent en recourant à la phrase toute faite sur les bugs et les fonctionnalités que nous avons vue ci-dessus.

Comment améliorer la qualité du code ?

La faillabilité du code est intrinsèque à la faillibilité de l’esprit humain, souligne Christophe

Mais si le code sans bug n’existe pas, comment faire néanmoins, pour aider les développeurs à faire moins d’erreurs ? Probablement au travers de ses outils, de son environnement de développement, du logiciel avec lequel il écrit du code, qui a très peu évolué depuis une vingtaine d’années.

Aujourd’hui, on écrit du code à peu près comme il y a 20 ou 30 ans : seul en face de sa machine, avant de lancer un compilateur

« La productivité a augmenté grâce à l’outillage. Il y a 25 ans, quand on lançait une compilation, on avait le temps d’aller boire un café avant d’avoir le résultat. Aujourd’hui, la compilation est instantanée, et l’éditeur de code indique instantanément si le code est syntaxiquement correct » ajoute Christophe Shaw.

La deuxième grande avancée est ce qu’on appelle IntelliSense, qui est la capacité à aider le développeur à écrire le bon code sans avoir à se souvenir de l’orthographe exacte, en appelant les bonnes API et les bons paramètres sur ces API.

Microsoft
IntelliSense sur Visualstudio par Microsoft on retrouve ce genre d’ « autocomplétion » quasiment partout et notamment dans Adobe Dreamweaver pour les fanatiques du HTML5 comme Visionary Marketing (imbattable en termes de rapidité et de souplesse au référencement).

Mais finalement, il s’agit toujours d’une personne qui écrit son code et qui est peu assistée pour savoir si son code est robuste, sécurisé et tolérant aux fautes.

Les apports de l’intelligence artificielle

L’intelligence artificielle peut aider le développeur dans ses tâches quotidiennes, en l’aidant à détecter plus vite de potentielles anomalies dans son code.

Nous mettons les réseaux neuronaux au service de la qualité du code et de la vélocité des développeurs pour qu’ils puissent se sentir plus sécurisés dans l’écriture de leur code.

Le premier cas d’usage que Ponicode à mis en œuvre aide les développeurs à écrire des tests unitaires, c’est-à-dire la plus petite unité de test qui soit, mais qui entraîne les régressions potentielles majeures.

Des tests unitaires sont générés avec l’utilisateur pour lui permettre de scanner chaque ligne de code. Pour cela, l’intelligence artificielle a été utilisée, en scrutant les meilleurs référentiels de code du monde, notamment des codes open source, pour déterminer quelle était la recette du test.

Ponicode a entraîné un modèle qui permet de deviner les paramètres qui permettent de couvrir l’ensemble du code de la fonction. Ce modèle est basé sur des réseaux neuronaux sur lesquels l’équipe de Ponicode, constituée de davantage de data scientists que de développeurs, travaille tous les jours.

Deux composantes essentielles : des data scientists et des données d’entraînement

Pour toute intelligence artificielle il faut deux composants essentiels : des data scientists talentueux, et des données d’entraînement qui soient les plus exhaustives possibles et les plus représentatives du monde que l’on recherche à atteindre.

Qu’est-ce qu’un test, sinon une série de paramètres qui vont être envoyés dans une fonction pour obtenir un résultat attendu ? Ponicode devine quels sont les bons paramètres à envoyer pour couvrir le code qui est exécuté par une fonction donnée.

Ils vont d’abord deviner le type de ce paramètre. De quoi s’agit-il ? Quelle est sa structure ? Et ensuite, deviner à l’intérieur de ces structures quelles sont les valeurs qu’il faut donner aux éléments « scalaires » à l’intérieur des structures (c’est-à-dire les plus petits éléments, un nombre et une chaîne de caractères).

Ponicode fait tout ce travail et devine par exemple que dans une fonction un paramètre attendu est un email. Une chaîne de caractères de forme email xx@zz.com et une autre chaîne de caractères qui n’a pas ce format sont envoyées, afin de voir comment la fonction se comporte quand elle ne reçoit pas les bons paramètres.

Intelligence artificielle, tests d’intégration et qualité du code

Le deuxième aspect du test est ce qu’on appelle les tests d’intégration, c’est-à-dire l’élément fondamental car il représente le produit fini, le moment où les différents éléments testés de manière unitaire vont être mis ensemble et où on va découvrir de nouveaux bugs dus le plus souvent à l’incompatibilité entre ces éléments ou leurs interactions.

La question est de savoir comment on améliore les processus de collaboration entre équipes pour qu’au moment de l’intégration, il y ait le moins de mauvaises surprises possibles

Chez Ponicode on s’est rendu compte que même si les tests unitaires au plus bas niveau avaient leur importance, on ne pouvait pas les décorrélés, justement, de ces tests d’intégration.

On est capable d’enregistrer le fonctionnement d’une application, d’intercepter tous les paramètres qui passent sur toutes les fonctions, pour ensuite réinjecter ces paramètres dans les tests unitaires.

Cela permet effectivement de transformer en tests unitaires des sessions entières qui ont été effectuées par les utilisateurs réels. Et s’il y a une divergence entre les tests unitaires faits par le développeur et ces tests unitaires générés à partir de l’intégration, c’est qu’on a effectivement un problème quelque part.

Donc, là aussi, on peut aider par l’outillage et par l’assistance des développeurs.

Quelle est la place du low code-no code dans tout cela ?

Pour Christophe, il n’y a aucun doute que le low code – no code permet de démocratiser la création d’applications par des non spécialistes des langages de développement.

Mais il n’imagine pas qu’il va couvrir tous les besoins de développement dans le futur, parce que l’interaction avec une machine a parfois besoin d’être optimisée.

Ensuite, il est impossible de tout décrire des interactions sans écrire du code. A ses yeux, ce besoin ne va pas disparaître. Il souligne que chez tous les grands éditeurs, la part du low code – no code est inférieure à 10 % de l’ensemble des logiciels produits dans le cadre de leur gamme de produits.

Chez les grands éditeurs, la part du low code – no code est inférieure à 10 % de l’ensemble des logiciels produits dans le cadre de leur gamme de produits

Peut-on imaginer qu’un jour l’informatique devienne enfin industrielle ?

C’est un besoin. L’informatique devient critique dans tous les domaines.

Aujourd’hui, une voiture  embarque de l’informatique dans plus de 200 processeurs. Ces processeurs sont programmés. Nos médicaments font participer du numérique dans leur conception. l’IT devient clé dans toutes les industries.

Le code a encore besoin d’être amélioré, même si de nouveaux concepteurs de véhicules comme Tesla ont démontré que cela était possible. Dessin par Henry Payne

Bien sûr qu’il faut aller dans un sens d’amélioration. Cette révolution a été faite dans l’industrie automobile, par exemple, dans les années 80-90, soit 100 ans après la naissance de cette industrie. Née dans les années 1870-1880, il aura fallu 100 ans avant qu’on ait un degré de maturité dans la qualité.

On peut espérer que dans l’informatique, on aille plus vite. Cette industrie est jeune, elle n’est pas encore mature, mais on va dans la bonne direction

Il y a encore des défauts dans les processus, dans les outils, et cela va s’améliorer. Christophe est convaincu que cette direction est inévitable dans les années à venir, compte-tenu de la criticité des composants informatiques et numériques dans tous les produits qui sont aujourd’hui conçus dans le monde.

Yann Gourvennec
Follow me

Comments