Comment associer DevOps et l’automatisation de tests en continu (par Cognizant)
Les entreprises ont certes compris le poids de DevOps dans leur cycle de développement, mais quelle place accorder aux tests, fonctionnels ou pas, dans cette équation et comment gérer leur automatisation, si essentielle à DevOps. Andreas Golze, testeur professionnel chez Cognizant, pose le problème sous la forme d'un jeu de questions / réponses.
Quels sont les facteurs qui encouragent les entreprises à adopter le DevOps ?
De nombreuses organisations, notamment certains grands groupes, peinent à mettre en œuvre des plates-formes de communication et de collaboration efficaces entre leurs équipes informatiques et métier. Dans le cadre de leur démarche d'amélioration de la collaboration entre les forces opérationnelles et de développement, elles sont séduites par les pratiques DevOps, qui mettent l’accent sur « l’humain et la culture ». Le DevOps attire également les entreprises qui ont besoin de procéder à des lancements plus rapides en bénéficiant d’un feedback.
Quels sont les défis auxquels les organisations sont confrontées lors de la mise en œuvre du DevOps ?
Les entreprises nées à l’ère du cloud ont tendance à adopter le DevOps de façon automatique. Les pratiques qui constituent la culture du DevOps s’inscrivent en effet dans leur ADN. En revanche, le cloisonnement des systèmes qui caractérisent les organisations plus anciennes peut ralentir l’adoption du DevOps. Cela tient au fait que, la plupart des anciennes applications dont dépendent les grandes entreprises sont extrêmement complexes et isolées et qu’elles ont été mises à jour et enrichies au fil des années. Ces dernières disposent également de processus et de pratiques de développement, d’exploitation et de test qui ont été définis depuis longtemps et avec lesquelles il est difficile d’interférer.
Autre difficulté à laquelle les entreprises sont confrontées : le niveau d’engagement. Le changement est permanent. Cela signifie qu’il convient de tester de nouveaux concepts et de mener une veille concurrentielle afin de saisir les idées des concurrents et d’évaluer les réussites obtenues. Pour que le DevOps fonctionne, les organisations doivent adopter une démarche de prototypage, en se remettant constamment en question et en se réinventant. Le DevOps impose un changement de culture indispensable afin de parvenir à un équilibre entre la perception actuelle de l’entreprise par le marché et la façon dont celle-ci envisage son avenir.
Quels sont les avantages du DevOps ?
Le DevOps peut jouer un rôle clé pour fédérer différents groupes, stimuler la collaboration entre plusieurs business units et améliorer l’efficacité du déploiement logiciel. Cela se traduit par une réduction du délai de commercialisation de nouveaux produits et services et, plus important encore, par l’amélioration globale de l’expérience client.
Concrètement, le DevOps s'attache à supprimer les structures d’équipes traditionnellement cloisonnées qui ne sont pas en mesure de répondre aux multiples besoins des entreprises d’aujourd'hui. Il permet également d’assurer un alignement plus efficace des équipes de développement, de test et d’exploitation, en améliorant la communication, la collaboration et l’intégration. Autre atout essentiel : il contribue à accélérer le déploiement de multiples technologies, ce qui constitue un facteur capital à l’heure où de plus en plus d’entreprises cherchent à intégrer le digital au sein de leurs offres.
Quelles sont les mesures que les organisations peuvent adopter pour assurer un déploiement réussi d’une stratégie DevOps ?
Lors du déploiement du DevOps au sein d’une organisation, la première étape consiste logiquement à procéder à un test en continu (TC). Le TC fournit un mécanisme de rétroaction continu qui pilote le déploiement d’un logiciel tout au long de son cycle de développement. Un feedback systématique à chaque point de passage active automatiquement le processus suivant dans la chaîne de production si les voyants sont au vert. Dans l’hypothèse toutefois où le feedback serait négatif, le processus est immédiatement arrêté et des mesures correctives sont apportées.
Pour nombres d’équipes en charge de l'exécution de tests, la pratique courante consistait à sauvegarder les scripts d'automatisation dans des outils de gestion de tests ou au sein d’une structure de dossiers partagés. Toutefois, le code source de l’automatisation, tout comme le code source d’une application, doit s'appuyer sur un référentiel de gestion des versions. La suite d’automatisation doit être intégrée à l’outil de déploiement des versions pour permettre la centralisation de l’exécution et du reporting. Pour assurer un feedback plus rapide à chaque point de contrôle, il est indispensable de structurer la suite d’automatisation en plusieurs couches de tests automatisés, tels que les « essais intégrés », les « health checks », les « smoke tests » et les « tests de régression complets », qui vérifient que les services et les caractéristiques du système sont opérationnels et pleinement fonctionnels. Dans certains cas, lorsque le délai de réalisation pour l’ensemble des tests de régression est particulièrement élevé, le test continu perd de son efficacité car les cycles de feedback sont plus longs. Dans une telle situation, des tests de régression complets peuvent être exécutés la nuit ou pendant le week-end en fonction de l'alignement avec la fréquence intégrées des versions.
Toutefois, en dépit des atouts qu’offre l’automatisation des tests sur leur exécution manuelle, il n’en demeure pas moins certaines difficultés à résoudre. Ainsi, au fil du temps, les tests élaborés à partir d’outils commerciaux peuvent souvent devenir plus longs à exécuter, du fait de l’architecture de ces outils. L’automatisation est également réalisée avec des outils différents, notamment pour l’interface utilisateur, les API et la couverture mobile. De plus, l’influence des équipes métier sur la définition des tests de régression pousse souvent les équipes à développer de longs tests. Les outils de conception de tests automatisés peuvent rendre les interactions entre l’informatique et le métier très ciblées et simplifier pour l’entreprise la compréhension de l'étendue des tests de régression.
Pour assurer une plus grande efficacité de ces tests d'automatisation, ces derniers ainsi que les tests de migration existants doivent être menés en ayant davantage recours aux outils open source, tels que Selenium qui automatise les navigateurs Web sur de nombreuses plates-formes. Cela contribuera à renforcer l’efficacité du DevOps et garantira une meilleure intégration avec les outils de développement. Les entreprises devraient également envisager de construire une infrastructure basée sur le cloud afin de tirer le meilleur parti des ressources disponibles et d’être en mesure d’effectuer des tests de charge à la demande, sans aucun gaspillage de temps ni de ressources.
Quel est le rôle des tests non fonctionnels ?
Le principe de base du TC consiste à effectuer des tests sur chaque modification apportée à l’application, et ce le plus en amont possible. Toutefois, si le dispositif de TC ne prévoit pas de tests non fonctionnels, tels que les tests de performances et de sécurité, l’entreprise résout simplement une partie de l’équation. Dans le cas où ces problèmes ne font pas l’objet de tests et sont découverts tardivement, toute amélioration en termes de productivité peut être réduite à néant et le calendrier de publication se trouver compromis. À l’heure où les pratiques de TC évoluent et s’affinent, peu de concepts de TC (tels que les tests de performances précoces) sont intégrés. Bien que considérée comme une bonne pratique essentielle, l’intégration de tous les tests non fonctionnels dans l’ensemble du processus reste néanmoins marginale.
Pour autant, l’intégration de ce type de tests dans le processus de TC pose certains problèmes connus, notamment pour les tests de charge tels que l’indisponibilité de serveurs dédiés pour générer la charge utilisateur souhaitée. Les organisations peuvent aussi faire face à des contraintes bridant la capacité à dimensionner l’environnement de TC, des difficultés à supporter le poids des tests de charge, ou encore à s’adonner à l’utilisation à la demande d’outils de surveillance pour identifier des goulots d’étranglement.
Pour parvenir à utiliser efficacement les ressources disponibles et réunir les capacités nécessaires pour mener à bien des tests de charge à la demande, sans aucun gaspillage de temps ni de ressources, les entreprises doivent envisager de bâtir une infrastructure cloud. Des outils tels qu’Apache JMeter s’imposent de plus en plus comme des solutions de choix pour la réalisation de tests de performances dans les environnements utilisant les pratiques DevOps.
Quelles sont les mesures envisageables pour permettre aux entreprises d’accroître l’efficacité du DevOps ?
La souplesse de réalisation des tests est essentielle pour garantir la réussite du test en continu. Les nouvelles techniques en matière de virtualisation des services et de gestion des données de tests ne peuvent qu’accroître l’efficacité du DevOps.
De plus, encourager l’automatisation au travers d’outils open source ou de solutions commerciales flexibles s’intégrant parfaitement aux activités en amont et en aval contribuera à accroître l’efficacité d’une configuration DevOps. La création de modèles de régression intelligents, tels que « lundi à vendredi – week-end », est essentielle pour fournir un feedback de test précoce au sein du processus de TC. Ce modèle particulier s’attache à encourager une qualité continue par une automatisation accrue au cours des phrases de construction et de tests du cycle lundi-vendredi. Il utilise également les tests de régression automatisés pour les tests d’assurance qualité finale en amont du lancement de la production le week-end. L’utilisation d’un périmètre de régression dynamique pour chaque intégration basée sur le type de changement de code constitue également une excellente tactique, qui permet aux notes de versions générées automatiquement d’être insérées aux tests de régression.
Conjuguées à un cadre d’automatisation des tests intelligent, toutes ces mesures permettent aux entreprises d’être idéalement positionnées pour tirer parti de la collaboration qu’offre une stratégie de DevOps correctement déployée. L’automation de ces pratiques peut également fournir aux organisations des données pertinentes leur permettant de continuer à améliorer leurs processus de test.