Test dans le monde DevOps

DevOps est une fusion des pratiques de développement et d'exploitation pour le développement et la livraison de logiciels.

Les testeurs impliqués dans le modèle de livraison DevOps commencent à poser des questions telles que:

  • Où se situent les tests dans un modèle DevOps?
  • En quoi les tests et l'assurance qualité dans DevOps sont-ils différents des tests dans les modèles Agile et en cascade?
  • En tant que QA, quelles compétences supplémentaires suis-je censé connaître?

Cet article traite des outils, stratégies et pratiques que nous devons mettre en œuvre pour tester efficacement dans un monde DevOps, en intégrant l'automatisation et les tests continus dans DevOps.




Contrôle qualité et tests dans DevOps

Comment les tests ont-ils évolué de Waterfall à Agile en passant par DevOps?

Modèle de cascade

Les pratiques de test et d'assurance qualité ont connu un changement considérable par rapport à l'époque de la cascade, Agile et maintenant DevOps. Dans le modèle en cascade, les tests étaient considérés comme une phase du cycle de vie du développement logiciel. Les testeurs et les efforts de test étaient très cloisonnés, les testeurs faisant auparavant partie d'une équipe de test et souvent séparés de l'équipe de développement.


Les testeurs possédaient le stratégie de test et étaient considérés comme les gardiens de la qualité. Les tests étaient en grande partie manuels et avaient lieu après le développement complet du logiciel et juste avant sa mise en production.

De même, les logiciels prenaient beaucoup de temps à être livrés. Une équipe d'exploitation distincte était responsable de la mise en production du logiciel, ce qui, au mieux, se produisait tous les quelques mois. Il n'y avait pas ou peu de communication / collaboration entre l'équipe Ops et l'équipe de développement.

Modèle agile

Le modèle Agile a créé un changement dans l'espace de développement et de test ainsi que dans la fréquence de publication. Le logiciel a été développé de manière itérative et incrémentielle. Scrum, qui est une méthodologie du modèle de livraison Agile, est rapidement devenu très populaire.

L'effort de développement a été divisé en une série d'itérations courtes, d'une durée généralement de 2 à 4 semaines. Chaque itération créerait un logiciel potentiellement livrable en ajoutant de nouvelles fonctionnalités ou en améliorant les fonctionnalités existantes.


Les testeurs sont devenus une partie de l'équipe de développement et les tests sont devenus une activité parallèle au développement logiciel, plutôt qu'une phase à la fin du SDLC. L'activité de test est devenue une responsabilité partagée et la qualité a été détenue par l'équipe de développement.

Le modèle Agile a fusionné les pratiques de développement et de test et a ouvert la voie à une livraison plus rapide des logiciels, cependant, le déploiement réel en production était toujours effectué par une équipe TechOps distincte.

Bien que l'équipe TechOps ait une connaissance des serveurs, des réseaux et du déploiement, elle était normalement inconsciente des détails de chaque version. Les retours à l'équipe de développement ont été lents. Si un bogue existait dans la version, il faudrait normalement quelques heures à l'équipe de développement pour en prendre connaissance.

Modèle DevOps

DevOps pousse le modèle Agile encore plus loin en rapprochant les activités de lancement et de déploiement de celles de développement et de test. Cela signifie qu'une équipe agile est responsable à elle seule du développement, des tests et de la publication du logiciel qu'elle crée.




Stratégie de test DevOps

Les tests dans DevOps couvrent tout le cycle de vie du développement et de la livraison de logiciels. Les testeurs ne se concentrent plus uniquement sur les tests fonctionnels et la vérification des fonctionnalités.

En tant que testeurs, nous devrions également être impliqués dans les tests d'exploitation, les tests de performance, les tests de sécurité de base, ainsi que dans la capacité de surveiller et d'analyser les données et les journaux de production.

Dan Ashby a un excellent post sur les tests dans DevOps dans lesquels il décrit

Vous pouvez voir pourquoi les gens ont du mal à comprendre où se situe le test dans un modèle qui ne le mentionne pas du tout. Pour moi, les tests s'adaptent à chaque point de ce modèle.


En effet, les tests peuvent et doivent avoir lieu à chaque étape d'un modèle DevOps. Dans le Article sur la stratégie de test agile , nous avons décrit comment les tests s'intègrent dans le modèle Agile.

La stratégie de test DevOps peut étendre cela en ajoutant les sections suivantes:

Automatisation des tests et tests continus dans DevOps

Le choix des outils et des technologies devient de plus en plus important dans le modèle DevOps. Le choix des outils permet à une organisation de fournir des applications et des services à grande vitesse.


L'accent est mis davantage sur les tests automatisés dans DevOps, car nous voulons créer une culture dans laquelle nous pouvons pousser le code vers le bas des systèmes rapidement et en toute confiance.

En plus des tests fonctionnels automatisés, nous devrions également avoir un ensemble de tests de performance ainsi que des tests de sécurité / résilience dans le pipeline de livraison.

Inutile de dire qu'avant de pouvoir mettre en œuvre l'un des tests automatisés ci-dessus, il faut avant tout créer un pipeline de construction et de livraison automatisé dans un outil d'intégration continue, tel que Jenkins.

Essais en production

Tester en production ne signifie pas nécessairement exécuter vos scripts de test fonctionnel / de performance sur un système en direct sur lequel les utilisateurs utilisent l'application.

Nous pouvons commencer par analyser les tendances des tests A / B ou multivariants. Nous pouvons également surveiller les serveurs pour tout comportement étrange, tel que des fuites de mémoire, une utilisation élevée du processeur, etc.



Impact de DevOps sur les tests

Comment tout cela a-t-il changé le rôle des testeurs et des tests dans DevOps?

On attend désormais des testeurs qu'ils possèdent au moins les connaissances et compétences suivantes pour pouvoir mener efficacement les activités de test

  • Connaissances de base en réseau
  • Script de base Unix / Shell, par exemple bash, python
  • Intégration continue / livraison continue, par ex. Jenkins,
  • Outils de test de performance tels que JMeter ou Gatling
  • Prêt pour les opérations et les tests de résilience
  • Connaissance des conteneurs, Docker, Kubernetes
  • Interroger des outils de surveillance tels que Splunk
  • Services cloud, par ex. AWS, Azure