IA : les développeurs dopés dans leur productivité
L’intelligence artificielle assiste déjà assez efficacement les développeurs aux différents niveaux du processus de développement logiciel. Ce phénomène est en train de s’accélérer avec des outils tels que Colab de Google et la « famille » Codey ou Github Copilot et Intellicode de Microsoft. Nous allons voir dans cet article quels rôles L’IA peut réellement jouer dans ce processus.
L’ intelligence artificielle est en train de révolutionner la manière de travailler des développeurs. Elle peut entraîner une augmentation significative de la productivité et de la qualité du code. En partant de la planification et de l’estimation du coût et de la durée des projets jusqu’à la livraison du produit et à la satisfaction des utilisateurs, en passant par les tests, tout peut bénéficier des algorithmes de L’IA. Plus les organisations s’intéresseront aux technologies de L’IA, plus elle affectera l’avenir du développement de logiciels. Les entreprises les plus avancées dans ce domaine, comme Google et Microsoft, mais aussi de plus petites structures comme Open AI, définissent d’ors et déjà des stratégies en la matière. Gartner prévoit que les outils D’IA devraient fournir plus de 3000 milliards de dollars en valeur d’entreprise dans un avenir proche. Néanmoins, si elles veulent mettre en oeuvre une véritable stratégie en matière d’intelligence artificielle, les entreprises doivent commencer par comprendre qu’elle peut être sa réelle fonction dans le développement logiciel et examiner avec précision les secteurs et les processus qu’elle peut véritablement améliorer.
Redéfinir le rôle des développeurs
Le rôle des développeurs de logiciels est en train d’évoluer considérablement. Il pourrait bien, d’ici une dizaine d’années, être très différent de ce qu’il est actuellement. Cela ne veut pas dire pour autant, n’en déplaise à certains chefs de projet qui auraient bien aimé que ce soit le cas, que la technologie pourra complétement remplacer les développeurs. Il coulera encore beaucoup de lignes de code dans les programmes avant d’en arriver là, c’est- à- dire qu’une IA soit capable d’écrire quasiment seule du code complexe et performant. De là à dire que cela n’arrivera jamais… nous resterons prudents, car il est toujours difficile d’évaluer jusqu’où la science est capable d’aller, et L’IA est bien un domaine dans lequel nombre de pythies numériques se sont « salement vautrées » dans leurs prédictions.
Dans un avenir raisonnablement proche, disons quelques dizaines d’années, il est plus probable que
les programmeurs soient susceptibles d’exécuter des activités plus fonctionnelles et d’acquérir des compétences pour collaborer efficacement avec L’IA. En un peu plus clair, ils ne disparaîtront pas, voire ils seront encore plus indispensables, mais leur métier évoluera grandement en phase avec ce nouvel outillage. Ils seront capables d’exécuter plus de tâches, de créer des applications plus sûres, plus complexes et plus faciles à maintenir. Les différents défis de développement de logiciels que L’IA a contribué — et va continuer à contribuer — à relever sont nombreux. Voyons ce qu’il en est déjà.
Qualité du code améliorée grâce à la révision et à l’optimisation automatique
L’intelligence artificielle devrait devenir un outil utilisé par les développeurs afin d’acquérir de nouvelles connaissances, d’optimiser les différents processus de conception pour, au final, produire un code de meilleure qualité. L’une des principales améliorations dans ce domaine est représentée par les applications de développement ( IDE ou EDI, environnement de développement intégré) ayant recours à L’IA et intégrant la saisie semi- automatique ( comme l’intellicode de Microsoft) dans le processus de conception logiciel en vue d’augmenter la vitesse et la précision d’écriture du code. Parmi les autres solutions, une fonctionnalité de mentorat basée sur L’IA permet par exemple aux développeurs n’ayant pas les compétences de base pour cela de créer des applications en temps réel. Dans un futur de plus en plus proche, ces technologies devraient démocratiser grandement le développement et surtout permettre aux programmeurs de consacrer plus de temps à la résolution de problèmes complexes, à la conception et à la créativité plutôt que de le gaspiller avec du débogage plus basique comme de la maintenance corrective ou de la réorganisation du code. Les effets bénéfiques devraient aussi se voir dans le déploiement de logiciels, particulièrement dans le paradigme de développement dit CI/ CD ( intégration et déploiement en continu). Certes, des solutions efficaces existent déjà avec des outils tels que Gitlab ou Jenkins, mais ils nécessitent souvent un paramétrage long et fastidieux qui gagnerait à être simplifié et automatisé grâce à L’IA. Les taches de mise à niveau des applications vers des versions plus récentes ou les tâches de contrôle de déploiement devraient y gagner beaucoup. Il y a souvent des risques importants de régression et de déstabilisation de l’application si celle- ci n’a pas été correctement testée, et les tests sont parfois très difficiles à être effectués de façon satisfaisante avant la mise en production. Des progrès réels ont été faits dans ce domaine même sans l’aide de L’IA, mais un environnement de production est parfois très difficile à reproduire dans des contextes industriels complexes. L’IA peut prévoir bien plus de cas de figure problématiques, améliorer la couverture des tests et simuler des environnements de production même compliqués à mettre en oeuvre dans des containers ou autres et réduire ainsi les probabilités d’échec du déploiement. L’avantage qu’a l’intelligence artificielle dans ce contexte est qu’elle permet, grâce aux algorithmes d’apprentissage automatique, d’examiner le processus de déploiement à travers ses itérations précédentes et d’en déduire des solutions optimisées. Les algorithmes d’apprentissage automatique permettront au logiciel d’apprendre comment se comportent des utilisateurs spécifiques ou quoi faire lorsqu’ils rencontrent telle ou telle situation particulière. Ce comportement appris progressivement au fil des
déploiements va l’aider à répondre à différentes actions en diffusant un contenu potentiellement variable. Une réponse de ce type se traduira par une expérience logicielle dynamique consistant à extraire des données d’interaction utilisateur en temps réel et de les utiliser afin de générer automatiquement des améliorations au fur et à mesure que les développeurs modifient le code.
Sécurité des applications
Celle- ci se décompose en plusieurs parties : la sécurisation du code, l’évaluation des vulnérabilités présentes, l’analyse de la sécurité statique et dynamique et la sécurité du code open source employé dans les projets. La sécurité des logiciels a toujours été une fonctionnalité essentielle devant être prise en compte tout au long du cycle de développement. Elle est encore plus critique actuellement au vu de l’exploitation de plus en plus fréquente des failles de sécurité de toute sorte par des hackers. Plusieurs approches sont possibles, l’essentiel étant qu’elles soient complètes et efficaces. La collecte de données à partir, par exemple, de sniffeurs réseau comme Wireshark et/ ou de logiciels installés côté client en font partie, mais sont loin d’être suffisants. Là encore, L’IA peut être employée afin d’étudier les données issues des traitements. Le ML ( Machine Learning ou apprentissage automatique) permettra de discerner un comportement anormal d’un comportement classique. Les services et les sociétés de développement logiciel ayant intégré L’IA dans leur processus de développement pourront éviter au maximum les avertissements tardifs, les notifications erronées et surtout les attaques de pirates destinées à compromettre la sécurité des applications, leur bon fonctionnement et à dérober des données. La qualité de la programmation progresse et s’améliore lorsque les développeurs et les testeurs ne perdent pas leur temps à examiner et réexaminer des fichiers exécutables et du code source truffé d’erreurs et de défauts de conception. Il sera en principe beaucoup plus facile de détecter et de corriger rapidement les dits défauts. Les tests d’assurance qualité, en particulier, ont toujours et représentent encore un processus manuel très fastidieux et pas toujours très fiable, avec une large marge d’erreur potentielle. C’est sans doute l’un des avantages les plus importants de L’IA : l’amélioration du testing, avec des tests plus rapides à effectuer et plus précis, améliorant très considérablement le processus de détection et de correction des bogues. Il est essentiel de faire tout cela avant la mise en production afin de raccourcir le cycle de développement et de garantir un produit final de bien meilleure qualité. Les technologies D’IA sont justement là pour automatiser certaines tâches difficiles. Les concepteurs pourront aussi, par exemple, utiliser un assistant de conception IA leur permettant de mieux comprendre les désirs et les préférences du client pour employer ensuite ces informations en vue de concevoir un projet plus approprié.
Avantages concrets de L’IA dans le développement de logiciels
Le développement « traditionnel » de logiciels ne disparaîtra certainement pas, mais il a forcément vocation à évoluer et à se moderniser grâce à l’intelligence artificielle. Un logiciel standard doit pouvoir gérer facilement tous les composants clefs tels que les interfaces, la sécurité et l’administration des données. L’IA contribuera à améliorer le fameux cycle de vie du développement logiciel ( SDLC pour Software Development Life Cycle), produisant des logiciels de meilleure qualité en prenant en charge ces fonctions essentielles que sont les estimations, la prise de décision et le prototypage rapide.
Estimations précises
La conception de logiciels dépasse assez souvent le budget et les délais initialement prédéterminés. Des estimations vraiment fiables nécessitent à la fois un haut niveau d’expertise, une connaissance très approfondie du contexte fonctionnel et une assez bonne connaissance de l’équipe de développement — point également crucial s’il en est. Nous mettrons ici de côté les problématiques de recrutement de développeurs compétents, leur disponibilité sur une longue période et les éléments humains et d’ordre plus RH ( ressources humaines) permettant de les garder, même si elles ne sont pas du tout anodines. L’apprentissage automatique permettra de faciliter la modélisation des données grâce à l’étude des projets précédents. Ces projets peuvent inclure des histoires utilisateurs ( les fameuses User Stories), des descriptions de fonctionnalités et des estimations quant à leur réalisation. Il pourrait même être possible que les logiciels se modifient dynamiquement face à une erreur dans une réponse sans aucune interaction humaine. Les développeurs gagneront ainsi du temps en utilisant des assistants de programmation intelligents leur fournissant des conseils et des recommandations instantanés comme des best practices ( meilleures pratiques) ou des stubs ( des exemples de code) évolués.
Prise de décision stratégique
Déchargés des tâches les plus fastidieuses, les développeurs pourront travailler sur plus de produits et de fonctionnalités différents. Il leur sera ainsi plus facile d’évaluer ce qui doit être priorisé et ce qui n’a pas besoin de l’être, voire qui doit être éliminé. Des plateformes d’intelligence artificielle pourront alors être formées par les entreprises, accumulant l’expérience des précédents projets de conception, les problèmes rencontrés, les erreurs pénalisantes en vue d’aider à l’évaluation des performances des applications actuelles et futures.
Prototypage rapide
Beaucoup de temps ( et donc d’argent), de réflexion et de stratégie sont nécessaires pour transformer des exigences commerciales en solutions techniques. Grâce à l’apprentissage automatique, les développeurs pourront raccourcir considérablement ce processus en permettant aux professionnels du domaine technique/ métier de mettre en place leur idées et projets d’innovations à l’aide d’interfaces visuelles en langage naturel. Le « dégrossissage » des applications pourra ainsi être fait rapidement par des non- professionnels du développement, et leur travail repris directement par les « vrais » développeurs. Des solutions de ce type existent, mais elles sont encore à améliorer car elles ne permettent généralement pas une reprise directe du travail effectué par ces béotiens non programmeurs ( le no code / low code) ou produisent des solutions trop lourdes et difficiles à faire évoluer ( des AGL — ateliers de génie logiciel — comme Windev).