Les professionnels du logiciel excellent souvent à inventer des noms attrayants pour des concepts de bon sens. « Ingénierie de plateforme » en est un exemple récent, combinant des principes établis avec l’innovation des cadres cloud-native.
Au fond, l’ingénierie de plateforme consiste à unifier le développement logiciel en adoptant un ensemble d’outils gérés cohérent, posant ainsi les bases d’une productivité d’équipe accrue. D’autres secteurs plus matures le savent depuis déjà des décennies.
Qu’est-ce que l’ingénierie de plateforme ?
L’ingénierie de plateforme est la pratique consistant à concevoir, construire et gérer l’infrastructure logicielle et les systèmes fondamentaux pour les applications et les services. Elle englobe la gestion de l’infrastructure physique et cloud, l’automatisation des processus, l’intégration d’outils variés, l’assurance de la sécurité et de la conformité, la surveillance des performances, le maintien d’une haute disponibilité et la récupération après sinistre.
Ce domaine est essentiel pour garantir des environnements techniques robustes, évolutifs et sécurisés, permettant le développement et le déploiement efficaces des applications.
L’ingénierie de plateforme marque le passage d’efforts isolés à un écosystème harmonisé, améliorant l’expérience des développeurs ainsi que l’efficacité opérationnelle.
Le passage de l’excellence individuelle à la compétence collective
Un développeur individuel, ou « artisan logiciel », peut initialement surpasser un collectif grâce à ses outils personnalisés. Cependant, à mesure que l’entreprise logicielle prend de l’ampleur, l’art du travail en équipe — communication, collaboration et partage stratégique d’outils et de processus — devient prioritaire.
L’ingénierie de plateforme est une réponse sophistiquée à ces défis d’évolutivité. Elle consiste à sélectionner et gérer une suite d’applications et d’outils servant de fondation commune, en permettant aux développeurs d’innover par intégration et extension de modules préexistants.
Le rôle d’une équipe d’ingénierie de plateforme est de créer une Plateforme de Développement Interne (IDP) qui dépasse les limites du développement applicatif traditionnel en incorporant des cadres comme Kubernetes, favorisant un environnement en libre-service qui donne du pouvoir aux développeurs.
Le principe de l’artisan s’applique aussi au test : un testeur exploratoire compétent et capable d’automatisation est sans doute le QA le plus efficace que l’on puisse trouver. Néanmoins, le défi reste l’évolutivité. L’automatisation des tests existe souvent en silo, chaque individu fabriquant ses solutions à l’aide d’outils comme Selenium à sa propre manière. Le départ ou la promotion de ces personnes conduit souvent à une refonte complète des systèmes existants par leurs successeurs, qui peuvent avoir une approche différente dans l’utilisation des outils.
Plateformes de test partagées : encourager la collaboration
Une plateforme de test partagée permettrait en revanche une collaboration productive entre testeurs professionnels, utilisateurs métiers et développeurs. Une telle plateforme, comme Copado Robotic Testing, faciliterait non seulement le partage et la réutilisation des tests, des données et des résultats, mais aussi la transparence dans l’évaluation de la qualité. Avec l’infrastructure-as-code (encore un nom tendance pour une évidence), les environnements de test peuvent être déployés efficacement dans le cloud, offrant un accès à la demande et une transparence à tous les acteurs concernés.
À l’ère des microservices, la fonctionnalité des composants individuels, orchestrés par des plateformes comme Docker et Kubernetes, doit être examinée en tenant compte de la charge cognitive et de l’impact utilisateur. Ici, les principes du Site Reliability Engineering (SRE) entrent en jeu, garantissant la fiabilité des systèmes et dotant les équipes d’exploitation d’outils d’alerte puissants comme Puppet et de solutions de monitoring pour garantir l’observabilité.
Défis de l’ingénierie de plateforme
Malgré ses bénéfices apparents, la mise en place d’une plateforme n’est pas sans obstacles. Elle exige une gestion minutieuse et une évolution continue. Bon nombre d’entreprises de produits performantes peinent à développer une plateforme commune pour leurs produits, il est donc irréaliste d’attendre des départements informatiques qu’ils disposent naturellement de telles compétences. C’est pourquoi les plateformes applicatives généralistes, comme Salesforce, et les plateformes de développement, comme Git ou Azure DevOps, gagnent du terrain. Il en va de même pour les plateformes de test, mais un peu plus lentement.
Puisque les applications sont assemblées à partir de composants issus d’une plateforme commune, la qualité et la robustesse de cette plateforme deviennent essentielles. Tout problème de plateforme peut potentiellement affecter toutes les applications qui en dépendent. Ainsi, la plateforme et les applications doivent évoluer de manière concomitante, la plateforme gardant toujours une avance pour garantir la stabilité.
Les tests de la plateforme doivent être distincts de ceux des applications, que vous soyez en test en production ou non. Les premiers sont généralement plus techniques, axés sur les tests unitaires, les API, la scalabilité et la performance, tandis que les seconds relèvent davantage de processus métier et de tests de bout en bout.
Maintenir la qualité tout au long du cycle de vie de la plateforme
À mesure que les organisations adoptent des approches cloud-native, la robustesse de leur plateforme devient primordiale. Toute problématique au sein de la plateforme peut avoir de vastes répercussions, c’est pourquoi il est essentiel de distinguer clairement les tests de la plateforme et les tests applicatifs. Cette séparation permet une démarche ciblée de la montée en charge et des performances, la première se concentrant sur les aspects techniques comme les API, la seconde sur les fonctionnalités destinées à l’utilisateur final.
Logiciels et outils d’ingénierie de plateforme expliqués
En ingénierie de plateforme, divers outils logiciels permettent de gérer et de rationaliser les processus liés à la construction, au déploiement et à la maintenance de l’infrastructure et des applications.
Prenons l’exemple d’un outil comme Postman. Développé à l’origine comme un projet parallèle pour simplifier les flux de travail d’API lors du développement et des tests, Postman est un excellent outil pour les testeurs individuels. Cependant, lorsqu’il est intégré à un workflow d’intégration et livraison continues (CI/CD), ses capacités s’élargissent et il sert un objectif bien plus vaste au sein d’une plateforme cloud. Il permet de tester les API rapidement et simplement, offrant un retour immédiat à l’utilisateur.
Lorsque l’équipe s’agrandit, les limites de Postman se font sentir. S’il excelle pour les tests manuels et l’exploration, il atteint ses limites dans des environnements collaboratifs où des tests automatisés, reproductibles et évolutifs deviennent nécessaires. À mesure que l’exploitation logicielle prend de l’ampleur, des éléments comme la communication, le partage et la réutilisation deviennent primordiaux, prenant souvent le pas sur la performance individuelle.
Parmi les autres outils clés en ingénierie de plateforme, on retrouve :
- Outils de conteneurisation
- Docker : Pour créer, déployer et exécuter des applications dans des conteneurs.
- Kubernetes : Une plateforme d’orchestration de conteneurs pour automatiser le déploiement, la montée en charge et l’exploitation des conteneurs applicatifs sur des grappes de machines hôtes.
- Outils d’Infrastructure as Code (IaC):
- Terraform : Utilisé pour construire, modifier et versionner l’infrastructure de manière sûre et efficace.
- Ansible : Un outil open-source pour le déploiement logiciel, la gestion de configuration et le provisionnement d’applications.
- Puppet : Un autre outil populaire de gestion de configuration.
- Outils d’Intégration Continue/Déploiement Continu (CI/CD):
- Jenkins : Un serveur d’automatisation open-source utilisé pour automatiser certaines parties du développement logiciel.
- GitLab CI/CD : Offre une solution simplifiée pour automatiser les étapes du cycle de développement applicatif.
- CircleCI : Propose une intégration continue et une livraison continue pour permettre aux équipes de développement de livrer rapidement du code.
- Outils de surveillance et d’observabilité:
- Prometheus : Un système de surveillance open-source avec base de données en séries temporelles.
- Grafana : Pour visualiser et surveiller les métriques.
- Elasticsearch, Logstash et Kibana (ELK Stack) : Très utilisés pour la journalisation et la visualisation de données.
- Fournisseurs de services cloud:
- Amazon Web Services (AWS) : Propose un large éventail de services cloud.
- Microsoft Azure : Fournit des services d’informatique en nuage.
- Google Cloud Platform (GCP) : Propose une suite de services d’informatique en nuage.
- Systèmes de gestion de versions:
- Git : Un système de gestion de versions distribué pour suivre les modifications du code source.
- GitHub : Une plateforme d’hébergement et de gestion des dépôts Git.
- Outils de sécurité et conformité:
- HashiCorp Vault : Pour sécuriser, stocker et contrôler l’accès aux jetons, mots de passe, certificats, clés d’API et autres secrets.
- SonarQube : Évalue la qualité du code et identifie les vulnérabilités.
- Outils de service mesh:
- Istio : Une plateforme ouverte pour connecter, gérer et sécuriser les microservices.
- Linkerd : Apporte observabilité, fiabilité et sécurité aux microservices.
- Frameworks serverless:
- AWS Lambda : Permet d’exécuter du code sans avoir à approvisionner ou gérer des serveurs.
- Serverless Framework : Simplifie la création d’applications avec une architecture serverless.
- Gestion des bases de données
- MongoDB : Une base de données NoSQL populaire.
- PostgreSQL : Une base de données relationnelle open source avancée.
La promesse de l’ingénierie de plateforme
Bien que l’ingénierie de plateforme promette une hausse de la productivité des développeurs, réaliser ce potentiel est loin d’être évident. La plateforme doit être gérée de manière rigoureuse, testée pour sa stabilité, et ne doit pas devenir un point de blocage. Cet objectif ambitieux exige des efforts concertés au sein des équipes DevOps, du ou de la spécialiste DevOps jusqu’à l’équipe produit. Une mise en œuvre réussie dépend d’une orchestration fluide, de l’efficacité des pipelines et d’un engagement envers l’intégration et le déploiement continus. Des pratiques de test efficaces et une boîte à outils orientée vers l’automatisation sont des prérequis indispensables pour réussir l’ingénierie de plateforme.
Vous souhaitez en savoir plus sur l’IA et les tests logiciels ? Abonnez-vous à la newsletter QA Lead pour rester informé(e) des dernières tendances.
