Quelle est la différence entre les tests unitaires, fonctionnels, d'acceptation et d'intégration? [fermé]

Quelle est la différence entre les tests unitaires, fonctionnels, d'acceptation et d'intégration (et tous les autres types de tests que j'ai omis de mentionner)?

724
demandé sur Mogsdad 2011-02-05 02:59:14

8 réponses

Selon l'endroit où vous regardez, vous obtiendrez des réponses légèrement différentes. J'ai beaucoup lu sur le sujet, et voici ma distillation; encore une fois, ceux-ci sont légèrement laineux et d'autres peuvent être en désaccord.

Les Tests Unitaires

Teste la plus petite unité de fonctionnalité, généralement une méthode / fonction(par exemple, étant donné une classe avec un état particulier, l'appel de la méthode x sur la classe devrait provoquer y). Les tests unitaires doivent être axés sur une caractéristique particulière (par exemple, appeler la méthode pop lorsque la pile est vide devrait lancer un InvalidOperationException). Tout ce qu'il touche doit être fait en mémoire; cela signifie que le code de test et le code testé ne doit pas:

  • appel à des collaborateurs (non triviaux)
  • accéder au réseau
  • appuyez sur une base de données
  • Utiliser le système de fichiers
  • faire tourner un fil
  • etc.

Tout type de dépendance lente / difficile à comprendre / à initialiser / à manipuler devrait être stubbed / mocked / whatevered en utilisant les techniques appropriées afin que vous puissiez vous concentrer sur ce que fait l'Unité de code, pas sur ce que font ses dépendances.

En bref, les tests unitaires sont aussi simples que possible, faciles à déboguer, fiables (en raison de facteurs externes réduits), rapides à exécuter et aident à prouver que les plus petits blocs de construction de votre programme fonctionnent comme prévu avant d'être assemblés. La mise en garde est que, bien que vous puissiez prouver qu'ils fonctionnent parfaitement isolément, les unités de code peuvent souffler lorsque combiné qui nous apporte ...

Les Tests D'Intégration

Les tests D'intégration s'appuient sur des tests unitaires en combinant les unités de code et en testant que la combinaison résultante fonctionne correctement. Cela peut être soit les entrailles d'un système, soit combiner plusieurs systèmes ensemble pour faire quelque chose d'utile. Aussi, une autre chose qui différencie les tests d'intégration des tests unitaires est l'environnement. Les tests d'intégration peuvent et utiliseront des threads, accéderont à la base de données ou feront tout ce qui est nécessaire pour s'assurer que tout le code et les différents changements d'environnement fonctionneront correctement.

Si vous avez construit du code de sérialisation et que l'unité a testé ses entrailles sans toucher le disque, comment savez-vous que cela fonctionnera lorsque vous chargez et enregistrez sur le disque? Peut-être que vous avez oublié de rincer et de disposer filestreams. Peut-être que vos autorisations de fichier sont incorrectes et que vous avez testé les entrailles en utilisant dans les flux de mémoire. La seule façon de savoir à coup sûr est de tester il "pour de vrai" en utilisant un environnement qui est le plus proche de la production.

Le principal avantage est qu'ils trouveront des bogues que les tests unitaires ne peuvent pas tels que des bogues de câblage (par exemple, une instance de classe A reçoit de manière inattendue une instance nulle de B) et des bogues d'environnement (il fonctionne bien sur ma machine à processeur unique, mais la machine 4 core de mon collègue ne peut pas Le principal inconvénient est que les tests d'intégration touchent plus de code, sont moins fiables, les échecs sont plus difficiles à diagnostiquer et les tests sont plus difficiles maintenir.

En outre, les tests d'intégration ne prouvent pas nécessairement qu'une fonctionnalité complète fonctionne. L'utilisateur peut ne pas se soucier des détails internes de mes programmes, mais je le fais!

Les Tests Fonctionnels

Les tests fonctionnels vérifient l'exactitude d'une caractéristique particulière en comparant les résultats d'une entrée donnée à la spécification. Les tests fonctionnels ne se préoccupent pas des résultats intermédiaires ou des effets secondaires, juste du résultat (ils s'en fichent après avoir fait x, objet y a l'état z). Ils sont écrits pour tester une partie de la spécification telle que "appeler la fonction Square(x) avec l'argument de 2 renvoie 4".

Essais De Réception

Les tests D'acceptation semblent être divisés en deux types:

Les tests d'acceptation Standard consistent à effectuer des tests sur l'ensemble du système (par exemple en utilisant votre page web via un navigateur web) pour voir si la fonctionnalité de l'application satisfait aux spécifications. Par exemple, "cliquer sur une icône de zoom devrait agrandir la vue du document de 25%."Il n'y a pas de véritable continuum de résultats, juste un résultat positif ou négatif.

L'avantage est que les tests sont décrits en anglais simple et garantit que le logiciel, dans son ensemble, est complet. L'inconvénient est que vous avez déplacé un autre niveau vers le haut de la pyramide de test. Les tests d'acceptation touchent des montagnes de code, donc traquer un échec peut être difficile.

En outre, dans le développement de logiciels agiles, les tests d'acceptation des utilisateurs impliquent la création de tests pour refléter les histoires utilisateur créées par/pour le client du logiciel pendant le développement. Si les tests passent, cela signifie que le logiciel doit répondre aux exigences du client et que les histoires peuvent être considérées comme complètes. Une suite de tests d'acceptation est essentiellement une spécification exécutable écrite dans un langage spécifique au domaine qui décrit les tests dans la langue utilisée par les utilisateurs du système.

Conclusion

Ils sont tous complémentaires. Parfois il est avantageux de se concentrer sur un tapez ou pour les éviter entièrement. La principale différence pour moi est que certains des tests regardent les choses du point de vue d'un programmeur, tandis que d'autres utilisent une orientation client/utilisateur final.

1269
répondu Mark Simpson 2014-03-09 15:18:05

L'important est que vous sachiez ce que ces termes signifient pour vos collègues. Différents groupes auront des définitions légèrement différentes de ce qu'ils signifient lorsqu'ils disent des tests "complets de bout en bout", par exemple.

Je suis tombé récemment sur le système de nommage de Google pour leurs tests, et je l'aime plutôt-ils contournent les arguments en utilisant simplement Small, Medium et Large. Pour décider dans quelle catégorie un test s'inscrit, ils examinent quelques facteurs-combien de temps faut-il pour s'exécuter, y a-t-il Accès le réseau, base de données, système de fichiers, systèmes externes et ainsi de suite.

Http://googletesting.blogspot.com/2010/12/test-sizes.html

J'imagine que la différence entre Petit, Moyen et grand pour votre lieu de travail actuel pourrait varier de Google.

Cependant, il ne s'agit pas seulement de portée, mais de but. Le point de Mark sur les différentes perspectives pour les tests, par exemple programmeur vs client / utilisateur final, est vraiment important.

77
répondu testerab 2011-02-05 16:39:23

Http://martinfowler.com/articles/microservice-testing/

Le billet de blog de Martin Fowler parle de stratégies pour tester le code (en particulier dans une architecture de micro-services), mais la plupart s'applique à n'importe quelle application.

Je vais citer de sa diapositive de résumé:

  • tests unitaires-exercer les plus petits morceaux de logiciels testables dans l'application pour déterminer si elles se comportent comme prévu.
  • tests D'intégration-vérifier la communication chemins et interactions entre les composants pour détecter les défauts d'interface.
  • tests de composants-limiter la portée du logiciel exercé à une partie du système testé, en manipulant le système à travers interfaces de code internes et utilisation de doubles de test pour isoler le code en vertu de test à partir d'autres composants.
  • tests de contrat-vérifier les interactions à la limite d'un service externe affirmant qu'il répond au contrat attendu par un consommateur service.
  • tests de bout en bout-vérifier qu'un système répond aux exigences externes et atteint ses objectifs, en testant l'ensemble du système, à partir de de bout en bout.
56
répondu Maxim 2015-02-21 22:08:00

Unit Testing - comme son nom l'indique, cette méthode teste au niveau de l'objet. Les composants logiciels individuels sont testés pour toute erreur. La connaissance du programme est nécessaire pour ce test et les codes de test sont créés pour vérifier si le logiciel se comporte comme il est prévu.

les Tests Fonctionnels - Est effectuée sans aucune connaissance du fonctionnement interne du système. Le testeur va essayer d'utiliser le système en suivant les exigences, en fournissant différents entrées et test des sorties générées. Ce test est également connu sous le nom de test en boîte fermée ou boîte noire.

Test D'acceptation - Il s'agit du dernier test effectué avant la remise du logiciel au client. Il est effectué pour s'assurer que le logiciel développé répond à toutes les exigences du client. Il existe deux types de tests d'acceptation - l'un qui est effectué par les membres de l'équipe de développement, connu sous le nom de tests d'acceptation interne (test Alpha), et le d'autres, qui est effectuée par le client ou l'utilisateur final connu sous le nom (Bêta test)

Integration Testing - les modules individuels déjà soumis à des tests unitaires sont intégrés les uns aux autres. Généralement les deux approches sont suivies :

1) De Haut En Bas
2) Bottom-Up

25
répondu Shah 2015-11-11 13:59:19

C'est très simple.

  1. Tests unitaires: il s'agit des tests effectués par les développeurs qui ont des connaissances en codage. Ce test est effectué à la phase de codage et fait partie des tests en boîte blanche. Quand un logiciel vient pour le développement, il est développé dans le morceau de code ou des tranches de code connu comme une unité. Et les tests individuels de ces unités appelées tests unitaires effectués par les développeurs pour découvrir une sorte d'erreurs humaines comme l'absence de couverture de déclaration etc..

  2. Test fonctionnel: ce test est effectué à la phase de test (QA) et fait partie des tests de boîte noire. L'exécution réelle des cas de test précédemment écrits. Ce test est fait par les testeurs, ils trouvent le résultat réel de toute fonctionnalité dans le site et comparent ce résultat au résultat attendu. S'ils ont trouvé une disparité, c'est un bug.

  3. Essais D'acceptation: savoir comme UAT. Et cela effectivement fait par le testeur ainsi que les développeurs, équipe de gestion, auteur, écrivains, et tous ceux qui sont impliqués dans ce projet. Pour s'assurer que le projet est enfin prêt à être livré avec des bugs gratuits.

  4. Tests D'intégration: les unités de code (expliquées au point 1) sont intégrées les unes aux autres pour compléter le projet. Ces unités de codes peuvent être écrites dans une technologie de codage différente ou peuvent être de version différente de sorte que ce test est effectué par les développeurs pour s'assurer que toutes les unités du code sont compatibles avec d'autres et il n'y a aucune question de l'intégration.

16
répondu Rakesh Kumar 2017-07-02 00:59:43

Test unitaire: le test d'un module individuel ou d'un composant indépendant dans une application est connu pour être un test unitaire, le test unitaire sera effectué par le développeur.

Test D'intégration: combinant tous les modules et tester l'application pour vérifier la communication et le flux de données entre les modules fonctionnent correctement ou non, ce test également effectué par les développeurs.

Funcional test vérification de la fonctionnalité individuelle d'une application est dire tests fonctionnels

Tests D'acceptation ce test est effectué par l'utilisateur final ou le client , que l'application de construction soit conforme aux exigences du client et aux spécifications du client, ce qui est connu pour être des tests d'acceptation

4
répondu malini 2014-04-26 12:33:27

Je vais vous expliquer cela avec un exemple pratique et pas de trucs théoriques:

Un développeur écrit le code. Aucune interface graphique n'est encore implémentée. Le test à ce niveau, vérifie que les fonctions fonctionnent correctement et les types de données sont corrects. Cette phase de test est appelée test unitaire.

Lorsqu'une interface graphique est développée et que l'application est affectée à un testeur, il vérifie les exigences métier avec un client et exécute les différents scénarios. Ceci est appelé le test fonctionnel. Ici, nous mappent les exigences du client avec des flux d'application.

Test D'intégration: disons que notre application comporte deux modules: RH et Finance. Le module RH a été livré et testé précédemment. Maintenant Finances est élaboré et est disponible pour tester. Les fonctionnalités interdépendantes sont également disponibles maintenant, donc dans cette phase, vous allez tester les points de communication entre les deux et vérifier qu'ils fonctionnent comme demandé dans les exigences.

Le test de régression est une autre phase importante, qui est fait après tout nouveau développement ou corrections de bugs. Son but est de vérifier les fonctions de travail antérieures.

4
répondu fahad shaikh 2017-01-06 18:38:59