differences between unit testing
Une comparaison détaillée des tests unitaires, d'intégration et fonctionnels:
Pour toute application logicielle, les tests unitaires, ainsi que les tests d'intégration, sont très importants car chacun d'eux utilise un processus unique pour tester une application logicielle.
Mais aucun ou même les deux ne peuvent remplacer les tests fonctionnels à aucun moment.
Ce que vous apprendrez:
- Tests unitaires vs tests d'intégration vs tests fonctionnels
- Qu'est-ce que le test unitaire?
- Qu'est-ce que le test d'intégration?
- Tests unitaires vs tests d'intégration
- Test fonctionel
- Différence exacte
- Conclusion
- lecture recommandée
Tests unitaires vs tests d'intégration vs tests fonctionnels
Test unitaire signifie tester des modules individuels d'une application de manière isolée (sans aucune interaction avec les dépendances) pour confirmer que le code fait les choses correctement.
Test d'intégration signifie vérifier si différents modules fonctionnent correctement lorsqu'ils sont combinés en tant que groupe.
Test fonctionel signifie tester une partie des fonctionnalités du système (peut interagir avec les dépendances) pour confirmer que le code fait les bonnes choses.
Les tests fonctionnels sont liés aux tests d'intégration, cependant, ils signifient les tests qui vérifient la fonctionnalité de l'application entière avec tout le code en cours d'exécution, presque un test de super intégration.
Les tests unitaires considèrent la vérification d'un seul composant du système, tandis que les tests de fonctionnalités envisagent de vérifier le fonctionnement d'une application par rapport aux fonctionnalités prévues décrites dans la spécification des exigences du système. D'autre part, les tests d'intégration considèrent la vérification des modules intégrés dans le système.
Et surtout, pour optimiser le retour sur investissement (ROI), votre base de code doit avoir autant de tests unitaires que possible, moins de tests d'intégration et le moins de tests fonctionnels.
Ceci est illustré le mieux dans la pyramide de test suivante:
Les tests unitaires sont plus faciles à écrire et plus rapides à exécuter. Le temps et les efforts nécessaires pour implémenter et maintenir les tests augmentent entre les tests unitaires et les tests fonctionnels, comme indiqué dans la pyramide ci-dessus.
référence indéfinie au c ++ principal
Exemple:
Comprenons ces trois types de tests avec un exemple simplifié à l'extrême.
Par exemple . Pour un téléphone mobile fonctionnel, les principales pièces requises sont la «batterie» et la «carte sim».
Exemple de test unitaire - La batterie est vérifiée pour sa durée de vie, sa capacité et d'autres paramètres. La carte SIM est vérifiée pour son activation.
Exemple de test d'intégration - La batterie et la carte SIM sont intégrées, c'est-à-dire assemblées pour démarrer le téléphone mobile.
Exemple de test fonctionnel - La fonctionnalité d'un téléphone mobile est vérifiée en termes de fonctionnalités et d'utilisation de la batterie ainsi que des fonctionnalités de la carte SIM.
Nous avons vu un exemple en termes simples.
Prenons maintenant un exemple technique de page de connexion:
Presque toutes les applications Web exigent que leurs utilisateurs / clients se connectent. Pour cela, chaque application doit avoir une page de «connexion» contenant les éléments suivants:
- Nom d'utilisateur du compte
- Mot de passe
- Bouton de connexion / connexion
Pour les tests unitaires, les cas suivants peuvent être les cas de test:
- Longueur du champ - champs du nom d'utilisateur et du mot de passe.
- Les valeurs des champs de saisie doivent être valides.
- Le bouton de connexion n'est activé qu'après la saisie de valeurs valides (Format et dans le sens de la longueur) dans les deux champs.
Pour les tests d'intégration, les éléments suivants peuvent être les cas de test:
- L'utilisateur voit le message de bienvenue après avoir saisi des valeurs valides et appuyé sur le bouton de connexion.
- L'utilisateur doit être dirigé vers la page d'accueil ou la page d'accueil après une entrée valide et en cliquant sur le bouton Connexion.
Maintenant, une fois les tests unitaires et d'intégration terminés, voyons les cas de test considérés pour les tests fonctionnels:
- Le comportement attendu est vérifié, c'est-à-dire que l'utilisateur peut se connecter en cliquant sur le bouton de connexion après avoir entré un nom d'utilisateur et un mot de passe valides.
- Y a-t-il un message de bienvenue qui doit apparaître après une connexion réussie?
- Y a-t-il un message d'erreur qui devrait apparaître sur une connexion invalide?
- Existe-t-il des cookies de site enregistrés pour les champs de connexion?
- Un utilisateur inactivé peut-il se connecter?
- Existe-t-il un lien «mot de passe oublié» pour les utilisateurs qui ont oublié leur mot de passe?
Il y a beaucoup plus de cas de ce genre qui viennent à l'esprit d'un testeur fonctionnel lors de l'exécution de tests fonctionnels. Mais un développeur ne peut pas prendre en charge tous les cas lors de la création de cas de test unitaires et d'intégration.
Ainsi, de nombreux scénarios doivent encore être testés, même après des tests unitaires et d'intégration.
Il est maintenant temps d'examiner les tests unitaires, d'intégration et fonctionnels un par un.
Qu'est-ce que le test unitaire?
Comme son nom l’indique, ce niveau consiste à tester une «unité».
Ici, l'unité peut être la plus petite partie d'une application qui est testable, que ce soit la plus petite fonction individuelle, méthode, etc. Les développeurs de logiciels sont ceux qui écrivent les cas de test unitaires. Le but ici est de faire correspondre les exigences et le comportement attendu de l’unité.
Vous trouverez ci-dessous quelques points importants sur les tests unitaires et leurs avantages:
- Les tests unitaires sont effectués avant les tests d'intégration par les développeurs de logiciels utilisant techniques de test en boîte blanche .
- Les tests unitaires ne vérifient pas seulement le comportement positif, c'est-à-dire la sortie correcte en cas d'entrée valide, mais également les échecs qui se produisent avec une entrée invalide.
- Trouver des problèmes / bogues à un stade précoce est très utile et réduit les coûts globaux du projet. Comme les tests unitaires sont effectués avant l'intégration du code, les problèmes rencontrés à ce stade peuvent être résolus très facilement et leur impact est également très moindre.
- Un test unitaire teste de petits morceaux de code ou des fonctions individuelles afin que les problèmes / erreurs détectés dans ces cas de test soient indépendants et n'affectent pas les autres cas de test.
- Un autre avantage important est que les cas de test unitaires simplifient et facilitent le test du code. Ainsi, il devient plus facile de résoudre les problèmes à un stade ultérieur, car seule la dernière modification du code doit être testée.
- Le test unitaire permet d'économiser du temps et de l'argent, et il est réutilisable et facile à entretenir.
JUnit ( Framework Java ), PHPUnit (framework PHP), NUnit (framework .Net) etc. sont des outils de tests unitaires populaires qui sont utilisés pour différents langages.
Qu'est-ce que le test d'intégration?
Les tests d'intégration testent l'intégration de différentes parties du système ensemble. Deux parties ou modules différents du système sont d'abord intégrés, puis des tests d'intégration sont effectués.
Le but des tests d'intégration est de vérifier la fonctionnalité, la fiabilité et les performances du système une fois intégré.
Le test d'intégration est effectué sur les modules qui sont d'abord testés unitairement, puis le test d'intégration définit si la combinaison des modules donne ou non la sortie souhaitée.
Les tests d'intégration peuvent être effectués par des testeurs indépendants ou également par des développeurs.
Il existe 3 types différents d'approches de test d'intégration. Parlons brièvement de chacun d'eux:
a) Approche d'intégration du Big Bang
Dans cette approche, tous les modules ou unités sont intégrés et testés dans leur ensemble en même temps. Ceci est généralement effectué lorsque l'ensemble du système est prêt pour les tests d'intégration à un moment donné.
Veuillez ne pas confondre cette approche des tests d'intégration avec les tests du système, seule l'intégration des modules ou des unités est testée et non le système entier comme cela est fait dans les tests du système.
L’approche du big bang est majeure avantage est que tout ce qui est intégré est testé en même temps.
Un majeur désavantage c'est qu'il devient difficile d'identifier les échecs.
Exemple: Dans la figure ci-dessous, les unités 1 à 6 sont intégrées et testées en utilisant l'approche Big Bang.
b) Approche descendante
L'intégration des unités / modules est testée du haut vers le bas pas à pas.
La première unité est testée individuellement en écrivant test STUBS . Après cela, les niveaux inférieurs sont intégrés un par un jusqu'à ce que le dernier niveau soit assemblé et testé.
L'approche descendante est une manière très organique d'intégrer car elle est cohérente avec la façon dont les choses se passent dans l'environnement réel.
Le seul préoccuper avec cette approche, c'est que la fonctionnalité principale est testée à la fin.
c) Approche ascendante
Les unités / modules sont testés de bas en haut, étape par étape, jusqu'à ce que tous les niveaux d'unités / modules soient intégrés et testés comme une seule unité. Programmes de stimulation appelés CONDUCTEURS sont utilisés dans cette approche. Il est plus facile de détecter les problèmes ou les erreurs aux niveaux inférieurs.
Le principal désavantage de cette approche est que les problèmes de niveau supérieur ne peuvent être identifiés à la fin que lorsque toutes les unités ont été intégrées.
Tests unitaires vs tests d'intégration
Après avoir suffisamment discuté des tests unitaires et des tests d'intégration, passons rapidement en revue les différences entre les deux dans le tableau suivant:
Test unitaire | Test d'intégration |
---|---|
Effectué lors de la phase initiale des tests, puis peut être effectué à tout moment | Doit être effectué après les tests unitaires et avant les tests du système |
Teste le composant unique de l'ensemble du système, c'est-à-dire teste une unité de manière isolée. | Teste les composants du système fonctionnant ensemble, c'est-à-dire teste la collaboration de plusieurs unités. |
Plus rapide à exécuter | Peut courir lentement |
Aucune dépendance extérieure. Toute dépendance externe est simulée ou supprimée. | Nécessite une interaction avec des dépendances externes (par exemple, base de données, matériel, etc.) |
Simple | Complexe |
Réalisé par le développeur | Réalisé par un testeur |
C'est un type de test de boîte blanche | C'est un type de test de boîte noire |
Maintenance bon marché | Maintenance coûteuse |
Commence par la spécification du module | Commence par la spécification de l'interface |
Les tests unitaires ont une portée étroite car ils vérifient simplement si chaque petit morceau de code fait ce qu'il est censé faire. | Il a une portée plus large car il couvre toute l'application |
Le résultat des tests unitaires est une visibilité détaillée du code | Le résultat des tests d'intégration est la visibilité détaillée de la structure d'intégration |
Découvrez les problèmes dans la fonctionnalité des modules individuels uniquement. N'expose pas les erreurs d'intégration ou les problèmes à l'échelle du système. | Découvrez les bogues qui surviennent lorsque différents modules interagissent les uns avec les autres pour former le système global |
Test fonctionel
À technique de test de boîte noire , où la fonctionnalité de l’application est testée pour générer la sortie souhaitée en fournissant une certaine entrée est appelée «test fonctionnel».
Dans notre processus de test logiciel , nous faisons cela en écrivant des cas de test selon les exigences et les scénarios. Pour toute fonctionnalité, le nombre de cas de test écrits peut varier de un à plusieurs.
Les cas de test comprennent essentiellement les parties suivantes:
- Résumé du test
- Prérequis (le cas échéant)
- Étapes d'entrée du cas de test
- Données de test (le cas échéant)
- Production attendue
- Notes (le cas échéant)
«Basé sur les exigences» et «Basé sur des scénarios commerciaux» sont les deux formes de tests fonctionnels qui sont effectués.
Dans les tests basés sur les exigences, les cas de test sont créés selon les exigences et testés en conséquence. Dans un test fonctionnel basé sur un scénario d'entreprise, le test est effectué en gardant à l'esprit tous les scénarios d'un point de vue commercial.
Cependant, le principal désavantage des tests fonctionnels est la redondance probable des tests et la possibilité de manquer certaines erreurs logiques.
Différence exacte
Regardons leurs différences.
Voici quelques-uns des principaux:
Test unitaire | Test d'intégration | Test fonctionel | |
---|---|---|---|
Définition et objectif | Test des plus petites unités ou modules individuellement. | Tester l'intégration de deux unités / modules ou plus combinés pour effectuer des tâches. | Tester le comportement de l'application conformément à l'exigence. |
Complexité | Pas du tout complexe car il comprend les plus petits codes. | Légèrement plus complexe que les tests unitaires. | Plus complexe que les tests unitaires et d'intégration. |
Techniques de test | Technique de test de boîte blanche. | Technique de test boîte blanche et boîte noire. Test de la boîte grise | Technique de test de la boîte noire. |
Attention majeure | Modules ou unités individuels. | Intégration de modules ou d'unités. | Fonctionnalité complète de l'application. |
Erreur / Problèmes couverts | Les tests unitaires détectent des problèmes qui peuvent se produire fréquemment dans les modules. | Les tests d'intégration détectent des problèmes pouvant survenir lors de l'intégration de différents modules. | Les tests fonctionnels détectent des problèmes qui ne permettent pas à une application d'exécuter ses fonctionnalités. Cela inclut également certains problèmes basés sur des scénarios. |
Problème d'échappement | Aucune chance d'échapper au problème. | Moins de chance d'échapper au problème. | Plus de chances d'échapper au problème car la liste des tests à exécuter est toujours infinie. |
Lire aussi => Qu'est-ce que le test des fonctionnalités
meilleur nettoyeur et réparation d'ordinateur gratuit
Conclusion
Tous ces trois types de tests sont corrélés.
Pour atteindre une couverture complète, il est nécessaire de réaliser des tests unitaires pour les chemins / lignes de code, des tests fonctionnels et d’intégration pour garantir que les «unités» fonctionnent ensemble de manière cohérente.
J'espère que cet article vous aurait donné une idée claire des tests unitaires, d'intégration et fonctionnels ainsi que de leurs différences, bien qu'il y ait beaucoup plus dans ces formes de test !!
lecture recommandée
- Meilleurs outils de test de logiciels 2021 (Outils d'automatisation des tests QA)
- Spock pour l'intégration et les tests fonctionnels avec le sélénium
- Test fonctionnel vs test non fonctionnel
- Téléchargement du livre électronique sur les tests
- Top 10 des outils de test d'intégration pour écrire des tests d'intégration
- Différences clés entre les tests de boîte noire et les tests de boîte blanche
- Guide de test fonctionnel complet avec ses types et son exemple
- Test fonctionnel vs test de performance: doit-il être fait simultanément?