mardi, 16 avril 2024

Un nouveau type de test de logiciels à l’ancienne

Crédit : Dreamstime

Il existe peut-être un monde avec une application logicielle idéale, mais comme Chris de Google DiBona compose, ce monde n’est pas celui dans lequel nous vivons. En tant que tels, les développeurs sont confrontés à un compromis : soyez prudent et vérifiez soigneusement votre logiciel pour trouver tous les problèmes avant le déploiement, ou testez moins et expédiez beaucoup plus rapidement avec une tolérance plus élevée pour les bogues en production. Le camp précédent est rempli de designers travaillant dans des marchés contrôlés comme la santé et la finance ; ce dernier est peuplé d’adhérents au célèbre dicton « vous le construisez, vous l’exécutez » de Werner Vogels (voir le PDF sur le lien).

Ce compromis est l’un des conflits de productivité des développeurs les plus nuancés.

Où que les concepteurs se situent sur le spectre des tests, il n’existe pas de solution unique pour les tests de logiciels, ce qui conduit les développeurs à rechercher en permanence la meilleure combinaison de techniques de filtrage pour répondre à leurs besoins en évolution. Pour rendre les choses complexes, pour que l’une des approches de dépistage disponibles devienne pratique, les concepteurs doivent trouver le juste milieu à la fois pour résoudre un point d’inconfort majeur et ne pas être trop lent ou compliqué au point de ne pas l’utiliser.

Comme je l’ai récemment composé, le dépistage du système a trouvé ce domaine agréable. En tant que pratique de sélection de logiciels, elle permet aux équipes d’évaluer de petits morceaux de code séparés, ce qui garantit non seulement que l’application logicielle fonctionne conformément à ses spécifications désignées, mais permet aux développeurs de prendre en compte des parties de la base de code composées par d’autres concepteurs. Le dépistage du système existe depuis des années, mais il n’a été implanté que récemment, car l’automatisation a en fait rationalisé l’expérience utilisateur jusqu’au point d’utilisation réelle.

Aujourd’hui, il existe un autre type de dépistage qui , comparable au criblage de système, est en cours d’élaboration depuis des décennies, mais ne trouve que maintenant son domaine de prédilection à la fois en résolvant un problème nécessaire et en offrant aux concepteurs l’abstraction idéale pour une méthode considérablement simplifiée. Je parle des tests d’intégration.

La tâche d’un développeur consiste à coller les choses ensemble

Dans les systèmes d’architecture traditionnels à trois niveaux, les développeurs peuvent avoir une base de données et peut-être une ou deux API avec lesquelles communiquer, selon le niveau des composants tiers qu’ils ont touchés.

De nos jours, les développeurs ont tendance à décomposer un service en plusieurs parties différentes, dont la plupart n’ont pas été composées , dont la majorité n’a pas vu le code source, et dont la plupart sont composées dans divers langages de programmes.

Les développeurs composent moins de logique et investissent plus de temps à coller les choses ensemble. Aujourd’hui, le système de production moyen a des interactions avec plusieurs bases de données, API et autres microservices et points de terminaison.

Chaque fois que votre application logicielle doit communiquer avec une autre application logicielle, vous ne pouvez plus faire de suppositions faciles sur la façon dont votre système va se comporter. Chaque base de données, file d’attente de messages, cache et structure a ses propres états, directives et contraintes spécifiques qui identifient son comportement. Les développeurs ont besoin d’une méthode pour évaluer ces habitudes avant la publication, et cette classe de tests est appelée dépistage d’intégration.

« Les tests d’intégration déterminent si des systèmes logiciels développés séparément fonctionnent correctement lorsqu’ils sont connectés les uns aux autres,  » écrit Martin Fowler, qui a découvert le tramage combiné dans les années 1980.

Jusqu’à récemment, le tramage combiné signifiait que vous deviez reproduire votre environnement de production. La création manuelle de cet environnement de test était un processus incroyablement chronophage, avec un risque énorme de faire des erreurs. Il y avait des frais pour avoir des écarts entre le test et la production, et il y avait la préoccupation constante de devoir apporter des modifications à votre environnement de test chaque fois que vous apportiez une modification en production. Le filtrage combiné était si difficile à établir et à utiliser que pour de nombreux développeurs, il restait une discipline de filtrage d’applications logicielles inconnue et inaccessible.

C’était alors. C’est maintenant.

Testcontainers : améliorer le filtrage d’intégration

Richard North a produit Testcontainers en 2015 alors qu’il était ingénieur principal chez Deloitte Digital. Il a observé que la configuration désespérément compliquée du filtrage combiné – du développement d’environnements régionaux cohérents à la configuration de bases de données et à la gestion de nombreux autres problèmes – était une source constante de raclée pour les groupes de développeurs qui avaient besoin d’un moyen fiable d’évaluer leur code par rapport à une véritable production. dépendances.

North a développé Testcontainers en tant que bibliothèque open source qui permet aux concepteurs de « tester avec des conteneurs » par rapport aux magasins de données, aux bases de données ou à tout autre élément pouvant s’exécuter dans un conteneur Docker, composé de frameworks populaires tels qu’Apache Kafka . Testcontainers fournit aux concepteurs un moyen ergonomique et basé sur du code d’exploiter les conteneurs pour les tests d’intégration régionaux et continus, sans obliger chaque développeur à devenir un expert des nombreuses subtilités des conteneurs.

Aujourd’hui, Testcontainers est le Docker le plus populaire basée sur une bibliothèque de tests d’intégration, utilisée par des milliers d’entreprises, telles que Spotify, Google, Instana, Oracle et Zalando. Une partie de la popularité de Testcontainers est sa bibliothèque de modules pré-supportés qui se compose de pratiquement toutes les bases de données reconnues et de nombreuses innovations populaires, fréquemment ajoutées au travail de Testcontainers et directement conservées par les fournisseurs de bases de données et de technologies. Plus tôt cette année, Sergei Egorov, mainteneur de North and Core Testcontainers, a obtenu un financement de démarrage de 4 millions de dollars et a lancé AtomicJar pour continuer à étendre la communauté des modules Testcontainers pris en charge.

Échouer plus vite est un modèle gagnant

Il y aura toujours des débats passionnés sur la meilleure façon d’équilibrer la vitesse par rapport à la qualité du logiciel. L’un des facteurs de l’attrait formidable du compilateur Java et des innovations comparables a été leur capacité à aider les développeurs à découvrir les échecs plus près du point d’avancement afin qu’ils puissent les réparer rapidement.

Il y aura constamment des bogues diaboliques qui échappent votre dépistage, cependant, avec la facilité croissante du dépistage du système logiciel et des tests d’intégration aujourd’hui, il devient plus difficile de réfuter de manière crédible l’investissement de plus de cycles dans le test de votre code et de sa surface d’intégration avant de passer en production.

.

Toute l’actualité en temps réel, est sur L’Entrepreneur

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici