Définitions

Objectifs

  • Comprendre ce qu'est un test automatisé ;

  • Connaître les deux principaux types de tests.

Mise en situation

La notion de test est souvent sous-estimée par les développeurs. Ils se lancent dans des projets qui ont pour vocation à grandir et négligent l'atout que représente les tests pour maintenir leur développement. Pour comprendre leur nécessité, il faut d'abord comprendre ce que sont ces tests.

DéfinitionTest automatisé

Un test automatisé est un programme chargé d'en tester un autre.

Pour réaliser ces tests, les tests comparent la valeur retournée par le programme testé avec une valeur prévue fournie lors de l'écriture du test. Si les deux valeurs ne sont pas égales, le test échouera.

Remarque

Il existe de nombreux types de tests : unitaires, fonctionnels, d'intégrité, d'intégration, etc.

Nous nous concentrerons sur les deux types les plus communs : unitaires et fonctionnels.

FondamentalMaintenir son code

Ces tests sont utilisés afin de maintenir le code.

Lorsqu'un développeur créer ou modifie une fonction, il arrive que des effets de bord apparaissent. Un effet de bord est un impact indirect et imprévu sur le fonctionnement attendu d'un morceau de code. Par effet de cascade, le fonctionnement complet du programme pourrait être compromis.

Lorsqu'un projet grandit, il possède un nombre de fonctionnalités si important qu'il n'est plus possible des les tester manuellement et de s'assurer que les évolutions ne provoquent pas d'effets de bord. Les tests automatisés deviennent stratégiques afin de vérifier l'intégrité du projet à chaque modification majeure.

DéfinitionRégression

L'introduction d'un bug sur une fonctionnalité existante lors d'une mise à jour s'appelle une régression : les tests servent également à éviter les régressions.

DéfinitionTest unitaire

Le but d'un test unitaire est de vérifier le bon fonctionnement d'une composante d'un programme, le plus souvent une fonction.

Le test unitaire essaiera d'être exhaustif en testant tous les types de scénarios possibles pour une fonction. Par exemple, si une fonction contient une condition, il faudra au moins deux tests : un dans lequel la condition est vraie et l'autre dans lequel la condition est fausse.

Une telle exhaustivité permet aussi de vérifier que chaque partie du code est utile et atteignable dans des scénarios réalistes.

DéfinitionTest fonctionnel

Le but d'un test fonctionnel est de vérifier le bon fonctionnement d'une fonctionnalité complète.

Le test sera effectué sur une boîte noire, c'est-à-dire sans accès aux détails du code.

Ainsi, contrairement au test unitaire qui étudie une composante de code isolée, le test fonctionnel étudie le comportement d'un programme complet. Il s'agit donc d'un test plus global qui ne sera pas aussi exhaustif que le test unitaire, mais validera que les composantes du programme sont correctement assemblées.

ExempleComprendre la différence entre fonctionnel et unitaire

Pour comprendre la différence entre test unitaire et test fonctionnel, prenons un exemple simple : un bouton d'achat sur un site de e-commerce. Lors d'un clic sur la bouton Acheter, un message est envoyé au serveur pour lui dire d'acheter le produit. Le serveur se charge de l'opération et renvoie un message de réussite ou d'erreur. Voici ce que seraient les différents tests dans ce cas :

  • Test unitaire : ce test consistera à vérifier qu'un clic sur le bouton résulte bien sur un message envoyé au serveur.

  • Test fonctionnel : ce test consistera à vérifier l'ensemble de la chaîne en testant la nature de la réponse du serveur suite au clic sur le bouton.

Souvent, les tests unitaires sont développés en premier. La validation des tests unitaires est en général requise avant de dérouler les tests fonctionnels, car les fonctionnalités globales s'appuient sur les composantes du code.

MéthodeQuand développer un test ?

Il est recommandé de développer des tests à chaque fois qu'on livre une nouvelle fonctionnalité. Ces tests permettront d'une part de faire comprendre le fonctionnement de la fonctionnalité à un autre développeur et d'autre part d'assurer que la fonctionnalité ne sera pas compromise par des modifications futures.

ComplémentLes frameworks de test

Il existe des frameworks de test qui encadrent et facilitent l'écriture et l'utilisation de tests. Ils complexifient l'écriture des programmes, mais dans le cadre de projets professionnels, il est vivement recommandé d'utiliser ces frameworks.

  • En Python, les deux frameworks principaux sont unittest et pytest. Le premier est le framework historique inclus par défaut à l'installation de Python. Le second est le plus récent et commence à faire l'unanimité dans la communauté Python.

  • En JavaScript, il existe de nombreux frameworks mais les plus populaires sont : Mocha et Jasmine.

À retenir

  • Les tests automatisés sont des outils très puissants pour maintenir son code et éviter les régressions.

  • Les tests unitaires se concentrent sur le fonctionnement d'un morceau de code isolé

  • Les tests fonctionnels se concentrent les fonctionnalités attendues du programme global