L’usine logicielle moderne : l’état de l’art (2/3)
21 décembre 2022

Introduction

En tant que responsable de la plateforme de l’entreprise Alliance4U, j’ai été amené à préparer un webinar sur les usines logicielles. Afin de partager cette connaissance, j’ai décidé de découper le webinar en articles et les publier sur mon Medium.

Dans cet article, nous sommes partis des années 1960, avec le succès de la mission Appollo, jusqu’à aujourd’hui. Nous avons notamment mis en avant l’explosion technologique des années 2010 avec l’arrivée du Cloud Computing, les applications en mode SAAS, l’approche Mobile First et le responsive, les architectures micro-services, les objets connectés et les enjeux de la donnée… On parle de 4ème révolution industrielle.

Dans tout ça, l’usine logicielle est devenue un enjeu majeur des entreprises. La force des entreprises modernes qui proposent du logiciel n’est pas que dans l’offre commerciale. La plus value d’une entreprise réside aussi dans la manière d’apporter cette offre, grâce à une usine logicielle moderne.

Une question se pose alors : quelles sont les caractéristiques de l’usine logicielle en 2022 ? Je vous propose une réponse, et je serai ravi d’en débattre avec vous dans les commentaires !

L’usine logicielle moderne

Le challenge principal des entreprises est de diminuer le time-to-market, c’est à dire, le temps entre l’idée et la mise à disposition de la solution à l’utilisateur final. Les entreprises doivent créer rapidement des services digitaux efficients et prêts à l’emploi, et ce n’est pas une mince affaire !

Dans tout ça, le rôle de l’usine logicielle est de fournir aux équipes de développement un environnement leur permettant de répondre rapidement aux besoins des clients et des utilisateurs en réduisant les risques et le temps de livraison. On optimise ainsi le travail de l’équipe de développement, fluidifie et automatise les procédures pour assurer une rapidité de livraison.

Afin de répondre à ces points, l’usine logicielle moderne se doit d’être…

… Agile !

Alors oui, ça parait bateau de dire ça en 2022. Je l’admets. Mais il existe encore beaucoup de pratiques anti-agiles. Quand Jean Michel de la DSI décide de mettre en production tous les 6 mois parce qu’on doit faire passer 3 mois de tests de non régression, on ne peut pas parler d’agilité…

Aujourd’hui, une entreprise se doit de répondre rapidement à un nouveau besoin utilisateur et d’offrir de nouvelles expériences, rapidement. Si on veut tenir face à la concurrence, il faut annoncer des nouveautés et il faut tenir parole. Et pour cela, rien de mieux que le développement agile. Que ce soit en suivant le cadre Scrum ou simplement en mettant en place du Kanban, l’objectif est de proposer des mises en production régulières pour tester l’utilisation en conditions réelles, récupérer le feedback des utilisateurs et améliorer le produit.

L’usine logicielle moderne doit faciliter la mise en place et l’utilisation efficace de l’agilité en agissant comme support. Vous allez me demander “Comment ?”. Je pourrai vous offrir 1000 réponses à cette question et transformer chacune d’entre elles pourraient faire l’objet d’un livre. Dans le cadre de cette article, je peux déjà vous mettre en avant des éléments de réponse simples :

  • L’utilisation d’un outil de gestion de projet agile, comme Jira, de la suite Atlassian. La gestion du backlog, la customisation des workflows, le suivi des Sprints… Jira propose une grande flexibilité à travers ses nombreuses fonctionnalités et est particulièrement adapté au développement logiciel en agilité.
  • Favoriser le travail collaboratif, avec des outils comme Git et des méthodes / pratiques comme Git Flow. Grâce à des outils comme Gitlab, le travail en équipe devient fluide et agréable au quotidien.
  • Mettre en place des outils et méthodes de tests rapides et efficaces. Pratiquer le Test Driven Development (TDD) permet aux équipes de garder un haut niveau de qualité tout en gagnant en productivité.
  • etc.

Globalement, favorisez les outils collaboratifs et assurez-vous que l’usine permet aux équipes de développement de mettre en production régulièrement et sereinement, pour éviter l’effet tunnel et obtenir du feedback utilisateur le plus rapidement possible.

Et pour réduire le time-to-market, il faut aller plus vite et gagner du temps. En tant que feigna.. experts informaticiens ! Nous pouvons faire ce qui se fait de mieux, en mettant en place une usine logicielle…

… Automatisée.

La grande force de l’informatique, c’est l’automatisation. Quand vous devez faire une tâche répétitive, le plus simple est de la faire faire par un robot. Cela fonctionne dans l’industrie automobile et s’adapte très bien au monde du développement logiciel. C’est ce que nous allons voir dans cette partie.

Vous avez forcément entendu parler des pratiques DevOps ou des chaînes d’intégration continue, et c’est tout le sujet de cette partie. L’usine logicielle moderne doit mettre en œuvre les pratiques DevOps pour diminuer le time-to-market. Cela peut être réalisé de plusieurs manières :

  • En automatisant l’intégration (Continuous Integration / CI). A chaque fois qu’un développeur veut partager son code, un scanner de code (comme SonarQube) vient vérifier le respect des bonnes pratiques, la duplication de code, la dette technique, etc. Il est également possible de lancer automatiquement les tests unitaires, voire même les tests d’intégration. L’objectif est de valider la qualité au plus tôt, car plus le problème est détectée tard, plus il faut remonter la chaîne pour le corriger !
  • En automatisant le packaging de l’application (Continuous Delivery / CD) : c’est ce que l’on appelle la livraison continue. Quand le code est validé, on le “package” dans un fichier unique qui est déposé dans un repository dédié, dans un outil comme Nexus ou Artifactory. Il n’y a plus qu’à venir le chercher pour le déployer.
  • En automatisant le déploiement (Continuous Deployment / CD) : on parle ici de déploiement continu, et il peut être réalisé automatiquement sur les environnements de développement ou de pré-production. Peu d’entreprises le mettent en place sur les environnements de production car le risque est trop grand, mais ce serait le Graal de l’automatisation !

Niveau outillage, ce n’est pas ce qui manque. L’un des outils les plus utilisés est Jenkins. Mais avec l’avènement du Cloud Computing, il est maintenant possible de configurer l’automatisation en codant. A titre d’exemple, l’outil Gitlab CI, que nous utilisons à Alliance4U, est un outil de CI/CD as Code. Le développeur code la chaîne d’intégration, la livraison et le déploiement. Ce code est versionné, soumis lui-même à des étapes de vérification, comme tout le code de l’applicatif.

En résumé, l’idéal serait d’automatiser entièrement le cycle de développement du logiciel. Toutes les actions répétitives et récurrentes doivent être réalisées par un robot : l’exécution des tests, le packaging, le déploiement, etc. La chaîne d’intégration doit être configurée et permettre de valider le code, tester le fonctionnel, packager et si possible, mettre en (pré)production automatiquement les nouvelles fonctionnalités.

L’usine doit donc être agile et favoriser l’automatisation. Cependant, ce n’est pas suffisant, elle doit également être…

… Sécurisée.

Les risques en termes de cybersécurité sont de plus en plus présents, et, pour faire le lien avec le point précédent, il existe des moyens pour automatiser la vérification à ce niveau. La sécurité doit être dans l’ADN des développeurs et cela doit transparaître dans l’usine logicielle moderne, avec des scanners de code intégrés dans les processus de développements qui détectent au plus tôt les failles de sécurité et autres vulnérabilités.

On parle ici du mouvement DevSecOps qui vise à intégrer la sécurité au plus tôt dans le cycle du développement applicatif. Ce mouvement favorise la collaboration entre les équipes de développement (Dev) et les équipes en charge de l’infrastructure (Ops) mais avec un focus particulier sur les sujets liés à la sécurité. Les applications concrètes du DevSecOps se retrouvent souvent dans l’usine logicielle.

A titre d’exemple, vous pouvez mettre en place l’outil SonarQube qui est principalement connu pour vérifier la qualité du code. Avec les dernières versions, l’outil vérifie également les dépendances obsolètes,, les vulnérabilités connues (CVE), l’exposition de données sensibles, la mauvaise configuration, etc. D’autres outils, comme Checkmarx, font de l’analyse de code statique. On peut aussi parler de OWASP ZAP, poussé par la fondation OWASP pour Open Web Application Security Project, une communauté en ligne qui sensibilise et participe à la sécurisation du web dans son ensemble.

La sécurité est donc un enjeu majeur, tout comme l’agilité et l’automatisation. Mais pour rester concurrentiel en 2022, ce n’est pas suffisant ! L’usine logicielle moderne doit aussi être…

… Data.

La mine d’or des années 2010, c’est la donnée, et avec la croissance forte dans le domaine de l’intelligence artificielle, ce n’est pas prêt de s’arrêter ! Des entreprises comme Google, Meta ou encore Tesla gagnent de l’argent grâce à une bonne utilisation de la donnée. Que ce soit par souci d’éthique ou tout simplement de culture, beaucoup d’entreprises n’ont pas encore passé ce cap qui est pourtant primordial pour réussir un bon produit ou développer des business model complémentaire. On parle de Data Factory, et si vous n’avez jamais entendu ce nom, il est temps de s’y mettre !

A titre d’exemple, grâce à sa flotte de voiture et leurs capteurs, Tesla possède une quantité de données considérable. Les ingénieurs de Tesla récoltent, consolident, analysent les données dans l’objectif de développer leur système de pilotage automatique. Plus globalement, ils utilisent la donnée pour améliorer l’expérience utilisateur et proposent des mises à jour, payantes ou non, à leurs clients pour qu’ils bénéficient des dernières nouveautés.

Autre exemple d’utilisation de la donnée, avez-vous entendu parler de l’AB Testing ? C’est une approche par la donnée qui permet de prendre des décisions business sur des indicateurs réels, et non pas des suppositions. L’idée est d’expérimenter en proposant deux versions d’un élément de l’application (un thème, une fonctionnalité, etc) à deux populations, afin de déterminer quelle version a le plus d’impact (la plus utilisée, la plus vue, etc). Pour les utilisateurs de Facebook dans les années 2010, vous avez peut-être eu le nouveau thème avant vos amis ? C’est de l’AB Testing. La pratique a plein de bénéfices comme la réduction du taux de rebond ou l’amélioration de l’expérience utilisateur. Elle permet aussi d’apporter des modifications sans risques.

Globalement, les développeurs doivent avoir les outils pour analyser, monitorer, suivre l’activité sur les applications, pouvoir réagir rapidement et proposer une solution qui répond au plus proche du besoin. Au niveau de l’usine logicielle, cela passe par la mise en place de systèmes de récolte de données (Elastic, Logstash), la création de dashboard (Kibana), le suivi des actions de vos utilisateurs (installation de sondes), etc. La stack ELK est une solution, mais des solutions clé-en-main, comme Azure Monitoring, commencent à apparaitre sur le marché.

Si cette partie était trop technique, retenez la phrase suivante : dans une usine logicielle moderne, la donnée générée doit être valorisée !

L’usine logicielle moderne est donc : agile, automatisée, sécurisée et permet de valoriser sa donnée. Et qu’en est-il de l’usine logicielle de demain ? C’est ce que nous aborderons dans le troisième et dernier article de cette série.

Merci d’avoir lu cet article, et s’il vous a plu, n’hésitez pas à le liker et le partager sur les réseaux sociaux ! 🙌

Rédigé par Ludovic YOL Responsable de l’offre Plateforme chez Alliance4U  

Actualités

From Zero to ISO

From Zero to ISO

Contexte C’est bon ! Nous l’avons fait ! La startup Hygia, dont les développements sont réalisés...