Test de l'unité? Test d'intégration? Test de régression? Test d'admission?

98

Y a-t-il quelqu'un qui puisse définir clairement ces niveaux de test car je trouve difficile de faire la différence lorsque je fais du TDD ou des tests unitaires. S'il vous plaît, si quelqu'un peut expliquer comment et quand les mettre en œuvre?

Donny
la source

Réponses:

129

Brièvement:

Test unitaire - Vous testez chaque morceau de code individuellement. Pensez à chaque fichier ou classe.

Test d'intégration - Lorsque vous assemblez plusieurs unités qui interagissent, vous devez effectuer des tests d'intégration pour vous assurer que l'intégration de ces unités ensemble n'a pas introduit d'erreurs.

Test de régression - après l'intégration (et peut-être la correction), vous devriez réexécuter vos tests unitaires. Il s'agit de tests de régression pour s'assurer que d'autres changements n'ont pas cassé les unités déjà testées. Les tests unitaires que vous avez déjà effectués ont produit les tests unitaires qui peuvent être exécutés encore et encore pour les tests de régression.

Tests d'acceptation - lorsqu'un utilisateur / client / entreprise reçoit la fonctionnalité, il (ou votre service de test) effectuera des tests d'acceptation pour s'assurer que la fonctionnalité répond à ses exigences.

Vous voudrez peut-être également étudier les tests en boîte blanche et en boîte noire. Il y a aussi des tests de performance et de charge, et des tests des «ilities» à considérer.

Mikey
la source
Pour info, dans les tests unitaires , les unités testées peuvent être de différentes tailles. Vous pouvez par exemple tester un groupe de classes, une seule méthode ou même une seule méthode. Source: BlueJ chaptor 9.3 "Tests unitaires dans BlueJ".
Sebastian Nielsen
113

Test unitaire: lorsqu'il échoue, il vous indique quelle partie de votre code doit être corrigée.

Test d'intégration: en cas d'échec, il vous indique que les éléments de votre application ne fonctionnent pas ensemble comme prévu.

Test d'acceptation: en cas d'échec, il vous indique que l'application ne fait pas ce que le client attend d'elle.

Test de régression: en cas d'échec, il vous indique que l'application ne se comporte plus comme avant.

Mathias
la source
19

Voici une explication simple pour chacun des tests mentionnés et quand ils sont applicables:

Test unitaire Un test unitaire est effectué sur une unité autonome (généralement une classe ou une méthode) et doit être effectué chaque fois qu'une unité a été mise en œuvre ou que la mise à jour d'une unité est terminée.

Cela signifie qu'il est exécuté chaque fois que vous avez écrit une classe / méthode, corrigé un bogue, changé de fonctionnalité ...

Test d' intégration Le test d'intégration vise à tester l'interaction entre plusieurs unités. Ce type de test doit être effectué chaque fois qu'une nouvelle forme de communication a été établie entre les unités ou que la nature de leur interaction a changé.

Cela signifie qu'il est exécuté chaque fois qu'une unité récemment écrite est intégrée dans le reste du système ou chaque fois qu'une unité qui interagit avec d'autres systèmes a été mise à jour (et a réussi ses tests unitaires).

Test de régression Des tests de régression sont effectués chaque fois que quelque chose a été modifié dans le système, afin de vérifier qu'aucun nouveau bogue n'a été introduit.

Cela signifie qu'il est exécuté après tous les correctifs, mises à niveau, corrections de bogues. Les tests de régression peuvent être considérés comme un cas particulier de test unitaire combiné et de test d'intégration.

Test d' acceptation Les tests d'acceptation sont effectués chaque fois qu'il est pertinent de vérifier qu'un sous-système (éventuellement l'ensemble du système) répond à toutes ses spécifications.

Cela signifie qu'il est principalement exécuté avant de terminer un nouveau livrable ou d'annoncer l'achèvement d'une tâche plus importante. Considérez cela comme votre dernier contrôle pour voir que vous avez vraiment atteint vos objectifs avant de courir vers le client / patron et d'annoncer la victoire.

C'est du moins ainsi que j'ai appris, même si je suis sûr qu'il existe d'autres points de vue opposés. Quoi qu'il en soit, j'espère que cela vous aidera.

Agentlien
la source
Je ne peux pas vraiment faire la différence entre les tests de régression et les tests unitaires. Je veux dire qu'après chaque changement / validation, vous avez toujours vos tests unitaires en cours d'exécution ... et ils peuvent attraper les erreurs introduites par le nouveau code. Droite?
Honey
@Honey Eh bien, la suite de tests de régression est principalement une sélection de tout ou partie de vos tests unitaires et d'intégration. C'est une question de politique, combien de tests de régression vous voulez faire. La principale différence est que les tests unitaires sont effectués en développement actif tandis que les tests de régression sont plus quelque chose que vous utilisez pour vérifier que les projets précédents ne se cassent pas lorsque vous y retournez et les corrigez.
Agentlien
AFAIK vous ne devriez en fait pas de méthodes de test unitaire. Si vous testez une classe, vous devez la traiter comme un tout, donc vous testez l'interface publique de la classe, pas ses détails d'implémentation. Bien que vous puissiez tester la fonction autonome, c'est très bien.
Qback
14

J'essaierai:

  1. Test unitaire: un développeur en écrirait un pour tester un composant ou une classe individuel.
  2. Test d'intégration: un test plus poussé qui impliquerait plusieurs composants ou packages qui doivent collaborer
  3. Test de régression: apporter une seule modification à une application vous oblige à réexécuter TOUS les tests et à vérifier TOUTES les fonctionnalités.
  4. Test d'acceptation: les utilisateurs finaux ou le contrôle qualité effectuent ces opérations avant de signer pour accepter la livraison d'une application. Il dit "L'application répond à mes exigences".
duffymo
la source
14

Test unitaire: ma méthode unique fonctionne-t-elle correctement? (PAS de dépendances, ou de dépendances simulées)

Test d'intégration: mes deux modules développés séparément fonctionnent-ils correctement lorsqu'ils sont assemblés?

Test de régression: ai-je cassé quelque chose en changeant / en écrivant un nouveau code? (l'exécution de tests unitaires / d'intégration avec chaque commit est un test de régression techniquement (automatisé)). Plus souvent utilisé dans le contexte du contrôle qualité - manuel ou automatisé.

Test d'acceptation : test effectué par le client, qu'il "accepte" le logiciel livré

Andrejs
la source
0

Je ne peux pas commenter (réputation trop basse: - |) alors ...

@Andrejs fait un bon point sur les différences entre les environnements associés à chaque type de test.

Les tests unitaires sont généralement exécutés sur la machine des développeurs (et éventuellement pendant la construction de CI) avec des dépendances simulées avec d'autres ressources / systèmes.

Les tests d'intégration doivent par définition avoir (un certain degré) de disponibilité de dépendances; les autres ressources et systèmes étant appelés ainsi l'environnement est plus représentatif. Les données à tester peuvent être simulées ou constituer un petit sous-ensemble obscur de données de production réelles.

Les tests UAT / d'acceptation doivent représenter l'expérience du monde réel pour les équipes d'assurance qualité et commerciales acceptant le logiciel. Il faut donc une intégration complète et des volumes de données réalistes et des ensembles de données complets masqués / obscurcis pour offrir des performances réalistes et une expérience utilisateur finale.

D'autres "ilities" sont également susceptibles d'avoir besoin que l'environnement soit aussi proche que possible de la réalité pour simuler l'expérience de production, par exemple les tests de performance, la sécurité, ...

mhaselup
la source