Tests d’intégration

Traditionnellement, les tests de logiciels sont considérés comme un moyen de trouver des bogues une fois qu’un produit utilisable a été créé. Cependant, au fur et à mesure que le processus de développement des logiciels a progressé et que les exigences relatives aux logiciels complexes ont évolué, le processus de test a également évolué.
Les tests ont été divisés en différents niveaux afin d’améliorer la couverture et la fiabilité des tests. Dans ce texte, nous allons d’abord passer rapidement en revue les différents niveaux de test, puis nous examinerons en détail les tests d’intégration, leurs types, leurs avantages et certains des outils de test d’intégration les plus courants.
Table des matières
Niveaux de test
Les types de tests de logiciels peuvent être divisés en deux grandes catégories : les tests statiques et les tests dynamiques. Dans le cas des tests statiques, nous n’exécutons pas l’application logicielle développée, mais nous utilisons diverses techniques pour tester l’application, telles que les vérifications, les tests intermédiaires, les examens informels et techniques.
Dans le cas des tests dynamiques, nous testons l’application logicielle en exécutant le code et en examinant son comportement dynamique, ce qui implique l’analyse de divers paramètres tels que le temps de réponse, l’utilisation de l’unité centrale, l’utilisation de la mémoire, etc. Actuellement, les tests dynamiques impliquent différents niveaux de tests qui commencent par des tests unitaires et se poursuivent par des tests d’intégration, de système et enfin d’acceptation.

Tests unitaires – Il s’agit du premier niveau de test où des modules individuels ou de plus petits blocs de construction de l’application sont testés de manière isolée. L’avantage est que, comme nous ne nous concentrons que sur des modules plus petits, il est plus facile de tester complètement et exhaustivement un module donné. En outre, les erreurs détectées à ce niveau peuvent être corrigées rapidement et facilement avec moins de ressources.
Tests d’intégration – Il s’agit du deuxième niveau de tests que nous allons aborder dans cet article. Il comprend l’essai des modules intégrés dans leur ensemble et de leur interconnexion.
Test du système – Le troisième niveau de test consiste à tester l’ensemble de l’application de bout en bout. Il permet de vérifier les exigences avant le test final par le client.
Test d’acceptation – Il s’agit du quatrième et dernier niveau de test, au cours duquel le client ou les parties prenantes vérifient si l’application répond ou non à leurs exigences professionnelles.
Maintenant que nous connaissons les tests statiques et dynamiques et les différents niveaux de test, nous pouvons passer à l’apprentissage détaillé des tests d’intégration.
Qu’est-ce qu’un test d’intégration ?
Le test d’intégration est le deuxième niveau de test effectué après le test unitaire, dans lequel nous testons l’interconnexion entre les modules en même temps que les composants intégrés. Il peut être réalisé à l’aide de techniques de test boîte blanche et boîte noire.
Pourquoi effectuer des tests d’intégration ?
- Un module peut fonctionner parfaitement de manière isolée, mais peut rencontrer des problèmes d’intégration lorsqu’il interagit avec un autre module.
- Il peut y avoir des problèmes de type de données ou de plage de données valides entre les modules.
- Dans les grandes équipes où les modules sont créés par différents développeurs ou même par des équipes, cela est très nécessaire car il peut y avoir un décalage dans la compréhension des différents développeurs.
Avantages des tests d’intégration
- Comme indiqué plus haut, il permet d’identifier les problèmes d’intégration entre les modules.
- Il permet de s’assurer que les modules intégrés fonctionnent correctement avant de passer aux tests de l’application à l’échelle du système.
- Les bogues trouvés à ce niveau sont plus faciles à résoudre que les bogues trouvés dans les étapes ultérieures des tests – tests du système et tests d’acceptation.
- Il améliore la couverture des tests et offre un niveau de fiabilité supplémentaire.
Types de tests d’intégration
nous en connaissons 4 types :
L’intégration du big-bang
Dans le cas d’une intégration de grande envergure, tous les modules doivent d’abord être complétés, puis intégrés. Après l’intégration, l’unité intégrée dans son ensemble est testée. Il diffère du test du système car il se concentre sur l’interconnexion/communication entre les modules.
Avantage – Elle convient aux projets de moindre envergure, pour lesquels tous les modules peuvent être développés avant le début des tests d’intégration.
Inconvénient – Il est très difficile de l’intégrer car il n’est pas pratique ou commode d’avoir tous les modules prêts avant de commencer les tests d’intégration.
Test d’intégration descendant
L’intégration descendante est une approche de test d’intégration incrémentale dans laquelle le flux de test part des modules de haut niveau (modules les plus élevés dans la hiérarchie) vers les modules de niveau inférieur. Comme il est très probable que les modules de niveau inférieur ne soient pas développés avant que les modules de niveau supérieur ne soient lancés, des plugins (stubs) sont utilisés dans ce cas.
Les modules proxy sont des modules fictifs qui simulent le fonctionnement d’un module en acceptant les paramètres reçus par le module et en fournissant un résultat acceptable. En général, les stubs ont des entrées et des sorties codées en dur qui permettent de tester les autres modules qui y sont intégrés.
Avantage – Avec l’utilisation des stubs, nous ne devons pas attendre le développement de tous les modules. Nous pouvons également donner la priorité aux tests des modules intégrés critiques.
Inconvénient – Cette technique nécessite la création de nombreux modules enfants pour simuler les modules de niveau inférieur. Il peut également arriver que les modules de niveau inférieur ne soient pas suffisamment testés.
Tests d’intégration ascendants
L’intégration ascendante est également basée sur une approche incrémentale, partant des modules de niveau inférieur pour aller vers les modules de niveau supérieur. Là encore, les modules de niveau supérieur peuvent ne pas être développés au moment où les modules de niveau inférieur sont testés. Dans ce cas, des pilotes sont utilisés. Ces pilotes simulent la fonctionnalité des modules de niveau supérieur pour tester les modules de niveau inférieur.
Avantage: comme pour les tests descendants, il n’est pas nécessaire d’attendre que tous les modules soient développés avant de commencer les tests.
Inconvénient – Les modules de haut niveau qui sont testés à des stades ultérieurs peuvent ne pas être suffisamment testés et contenir des bogues.
Test d’intégration hybride
L’approche d’intégration hybride est également appelée approche sandwich. Cette approche est une combinaison de tests d’intégration descendants et ascendants. Dans cette approche, l’intégration commence par la couche intermédiaire et les tests sont effectués dans les deux sens – vers les modules de niveau supérieur (vers le haut) et vers les modules de niveau inférieur (vers le bas). Cette méthode intègre les avantages des approches descendante et ascendante et permet de tester plus rapidement les interfaces des modules.
Avantage – Puisque nous pouvons aller de haut en bas, c’est la méthode la plus efficace en termes de temps, avec la possibilité de prioriser les modules au niveau supérieur ou inférieur.
Inconvénient – cette approche est difficile à mettre en œuvre car il faut intégrer et déplacer dans les deux sens le module testé.
Défis liés aux tests d’intégration
- Difficile à exécuter – il est très difficile à exécuter par rapport aux tests de systèmes, où l’on peut considérer l’application comme une boîte noire.
- Consommation de temps – Le test de toutes les interconnexions entre les différents modules liés prend beaucoup de temps et de ressources.
- Effort supplémentaire – Nécessite la création de sous-groupes et de pilotes qui, s’ils ne sont pas créés correctement, peuvent donner lieu à des tests inadéquats.
Outils de test d’intégration
Rational Integration Tester – Rational Integration Tester est un outil de test d’intégration d’IBM. Il fournit un environnement sans code pour développer des tests d’intégration.
TESSY – Tessy de Razorcat Development GmbH permet d’automatiser le cycle de test unitaire et d’intégration des logiciels embarqués en C et C++.
LDRA – La suite d’outils LDRA permet d’effectuer des tests unitaires, d’intégration et de système. Il est principalement utilisé pour des applications logicielles critiques telles que l’aérospatiale, les appareils médicaux, l’automobile, etc.
Protractor – Protractor est un framework de test open-source pour les applications Angular et AngularJS supportant les scripts Javascript.
Citrus Integration Testing – Citrus est un cadre de test open-source qui aide à développer des tests d’intégration automatisés pour les protocoles et formats de messages HTTP REST, TCP/IP, SOAP, FTP, XML, JSON, etc.
Steam – Steam est un cadre d’automatisation des tests open-source qui permet de réaliser des tests d’intégration sans tête.
Jasmine – Jasmine est un framework BDD open-source qui peut être utilisé pour automatiser n’importe quelle application basée sur Javascript.