Retrouvez-nous le 14 mai au Google Cloud Summit à l'Accor Arena - Paris !

logo saagie red

Tests unitaires, tests d’intégration… comment tester votre code ?

Vous développez, mais vous testez peu votre code ? Pourquoi et comment réaliser les vérifications de votre code ? 

Faire des tests en amont, c’est vérifier qu’une partie de son logiciel fonctionne comme attendu. Un processus de test permet de vérifier que le logiciel répond au besoin, est bien défini et ne fait pas d’erreur même dans les limites de son utilisation. 

Nous avons, dans l’article La phase pilote, étape de validation essentielle en DataOps avant le passage en production, défini les trois phases des projets data : l’exploration, la phase pilote et la mise en production. Ces trois phases comptent chacune différents essais fonctionnels à réaliser pour mener le projet à bien.

Pourquoi réaliser des tests sur le code ?

Les tests permettent de garantir que l’application développée correspond bien aux besoins exprimés. Dans le cas d’ajout de fonctionnalités ou de mise à jour d’un outil ou logiciel, il faut également faire des tests de « non-régression » afin de s’assurer que les changements réalisés n’altèrent pas une fonctionnalité existante. 

 

On parle de « régression » lorsqu’une fonctionnalité qui était opérationnelle auparavant ne l’est plus après un changement de code ou une évolution. Les tests permettent donc de modifier un logiciel en toute confiance. 

 

Réaliser des tests est cependant coûteux et nécessite du travail, il est donc parfois tentant de s’en affranchir. Il ne s’agit pourtant pas toujours d’un bon calcul. On citera, par exemple, le cas du vol 501 d’Ariane 5. Le 4 juin 1996, Ariane 5 explosait en plein vol pour son premier lancement, 37 secondes après son décollage, à 4 000 mètres d’altitude. Afin d’économiser plus d’un milliard de francs, le programme de gestion conçu pour Ariane 4 n’avait pas été testé sur Ariane 5. Une incompatibilité entre le logiciel et les composants matériels a causé l’autodestruction de l’appareil. Cela a occasionné la perte de 2,5 milliards de francs. 

Dans le cadre d’une politique de CI/CD, c’est-à-dire d’intégration et de déploiement continus, tester son code est fondamental pour coder et déployer rapidement en évitant les régressions.

Tests unitaires

Un test unitaire permet de tester le bon fonctionnement d’une partie précise et ciblée d’un programme. Il permet de vérifier que le comportement d’une application est correct. 

Les tests unitaires représentent environ 70 % du plan de test et présentent plusieurs avantages :

Cependant, la plupart du temps, les composants sont simulés et ces tests ne peuvent donc pas refléter exactement la réalité.

Test d’intégration

Les tests d’intégration représentent environ 20 % du plan de test et sont plus longs et difficiles à écrire que les tests unitaires, car ils reposent sur des composants tiers. 

Certains composants sont réels, d’autres sont simulés. Ces tests sont beaucoup plus fidèles que les tests unitaires. Ils permettent également de vérifier l’aspect fonctionnel, les performances et la fiabilité du logiciel.

Tests d’interface

Ils représentent environ les 10 % restants du plan de test. Ce sont les plus fidèles, car ils permettent de tester l’application dans des environnements réels, c’est-à-dire comme un vrai utilisateur, mais ils sont très longs à écrire.

Tests manuels et tests automatisés

Les tests manuels sont réalisés par une personne expérimentée qui va naviguer dans l’application comme le feront les futurs utilisateurs.

Les tests automatisés sont des tests exécutés avec des outils, des algorithmes ou des logiciels. Ils comparent ainsi les résultats obtenus avec ceux normalement attendus pour repérer des anomalies. Il faut donc définir en amont les scripts de tests.

Contrairement aux tests automatiques et donc faits par des robots, les tests manuels vont permettre de tester à la fois le fonctionnement et l’expérience utilisateur avec notamment tout ce qui concerne l’affichage. Les tests automatisés, quant à eux, seront plus efficaces lorsqu’il s’agit de tester les mêmes fonctionnalités un grand nombre de fois. Les tests manuels et automatisés sont donc complémentaires dans de nombreux projets. 

 

Les tests ont pris une place importante dans le cycle de développement. Il existe même une approche de développement basée sur les tests, le Test-Driven Development (TDD). Cette méthode consiste à concevoir les tests avant d’écrire le code. Pour approfondir le sujet des tests, nous vous conseillons le cours Testez votre application

Tester son code avec des tests unitaires, d’intégration ou d’interface, qu’ils soient manuels ou automatisés, est donc fondamental et ne doit pas être négligé. Codez, testez !