Les tests, les tests, les tests
L’importance des tests
Lors du développement d’une application, de quelque type que ce soit (Web ou autre), la partie la plus chronophage est celle des tests. De ce fait, ils sont souvent mis de côté, hélas…
En effet, si nous souhaitons mettre en production une application sans bug, nous devons nous assurer de son bon fonctionnement : elle doit répondre correctement aux actions des utilisateurs, les traitements de données doivent être corrects, les appels aux éléments extérieurs doivent fonctionner, etc.
Il nous faut donc tester et retester nos applications afin de les valider avant de les mettre à la disposition des utilisateurs, sans quoi nous risquons de passer plus de temps en support et en maintenance qu’en ajout de nouvelles fonctionnalités.
Les tests sont d’autant plus importants aujourd’hui avec l’expansion exponentielle de l’approche DevOps. Cette approche répond à la demande de l’utilisateur qui veut disposer le plus rapidement possible de son application et encore plus rapidement de ses nouvelles fonctionnalités.
Comment faire pour gagner du temps ? Automatisons la mise en production !
Comment automatiser la production et garantir que l’application fonctionnera sans aucun problème ? Automatisons les tests !
La typologie des tests
Tester une application est primordial, nous sommes d’accord. Mais que devons-nous tester ? Comment nous assurer que nous la testons correctement ?
Pour nous aider à bien développer une application, donc à la tester, il existe plusieurs types de tests à mettre en place. La pyramide des tests décrit les trois tests dont aucune application n’est exemptée, les autres tests dépendront du type de l’application.
1. La pyramide des tests
Mike Cohn a été le premier à décrire une pyramide de tests dans son livre Succeeding with Agile. Cette pyramide reprend la philosophie de la pyramide des besoins pour le développement des applications.
Comme nous pouvons le constater avec la figure ci-après, les tests fondamentaux sont les tests unitaires, puis viennent les tests d’intégration et enfin les tests fonctionnels.
Pyramide des tests
a. Les tests unitaires
Les tests unitaires sont le socle de la pyramide des tests. Ils assurent le bon traitement des données par les fonctions, les procédures et les méthodes du programme.
Chaque traitement sur une donnée doit avoir son test dédié.
Par exemple, si notre application permet aux utilisateurs de commander des livres, les tests unitaires doivent couvrir :
-
le calcul du montant de la commande ;
-
le fait qu’une commande doit contenir au moins un livre...
L’automatisation des tests
L’un des objectifs premiers de l’ordinateur est d’effectuer le travail rébarbatif à la place de l’être humain. Tester à la main chaque test possible est une charge de travail titanesque, chronophage, et pas forcément des plus passionnantes.
Servons-nous donc des programmes pour lancer automatiquement tous nos tests ! Soit en exécutant un programme pour lancer tous nos tests, soit en déclarant un déclencheur les lançant à notre place, comme c’est le cas en intégration continue (CI, Continuous Integration) dans la philosophie DevOps.
Le positionnement de Selenium
Pour automatiser les tests fonctionnels, il existe aujourd’hui une nuée de frameworks. Chacun de ces frameworks possède ses avantages et ses limites et la plupart se basent sur Selenium.
Selenium reste un outil technique open source pour simuler automatiquement les comportements utilisateur sur une application Web qui requiert de coder chaque interaction avec minutie. Cette minutie est souvent décrite comme le défaut majeur de Selenium. Cependant, c’est grâce à cette minutie que Selenium apporte une immense flexibilité dans l’écriture de nos tests fonctionnels, nous permettant de tester exactement le comportement que nous voulons, sur l’environnement que nous avons choisi. La limite de Selenium n’est que Selenium !