Tests unitaires
Les tests unitaires (également appelés tests de modules ou tests de composants) sont utilisés dans le développement logiciel. Leur objectif est de vérifier que les composants logiciels individuels fonctionnent comme prévu.
Pourquoi les tests unitaires sont-ils utiles ?
Les tâches suivantes sont accomplies dans le cadre de l'assurance qualité grâce aux tests unitaires :
- Les tests unitaires détectent les erreurs et les modifications accidentelles de fonctionnalité au sein d'un logiciel.
- Lors d'extensions de fonctionnalités, les tests unitaires révèlent les impacts non intentionnels sur le système existant.
- Grâce aux tests unitaires, les erreurs sont détectées dès la phase de développement, ce qui permet d'éviter des coûts de correction.
- La détection et la correction précoces des erreurs accélèrent le développement du logiciel.
- Les tests unitaires peuvent être exécutés beaucoup plus rapidement que les tests manuels (surtout lorsqu'ils sont automatisés). Cela permet de franchir plus rapidement les étapes de développement et de raccourcir les cycles de release.
- Les tests unitaires aident à documenter le système en montrant les fonctions et réactions attendues du module testé. Si les objets sont nommés de manière pertinente (Clean Code), des mesures de documentation supplémentaires deviennent inutiles.
Tests unitaires automatisés
Dans le développement logiciel selon les méthodes agiles, les tests unitaires sont fréquemment réalisés dans le cadre du développement piloté par les tests et du refactoring, afin de trouver rapidement les erreurs et d'améliorer la qualité. Pour que les tests ne représentent pas un travail supplémentaire et puissent être effectués à moindre coût, les tests unitaires sont exécutés de manière automatisée grâce à des outils d'automatisation des tests.
À l'origine, ce type d'automatisation a été proposé par Kent Beck sous forme d'un petit framework destiné à faciliter la création de tests unitaires automatisés. C'est ainsi qu'est né le framework SUnit pour différents langages de programmation, dont est issu plus tard le framework JUnit pour JavaScript.
Les frameworks de test appellent les différentes classes de test et exécutent leurs tests de composants. La plupart du temps, les résultats des tests sont affichés par les frameworks sous forme de résumé graphique.
Qu'est-ce qui compte lors du développement de tests unitaires ?
Si toi et ton équipe souhaitez écrire vos propres tests unitaires, veillez aux points suivants :
- Les tests doivent fonctionner indépendamment les uns des autres, afin que les résultats ne s'influencent pas mutuellement. Si c'est le cas, l'ordre des tests n'a pas d'importance non plus.
- Les tests unitaires doivent être conçus de manière courte et facilement compréhensible, et ne tester qu'une seule propriété à la fois.
- Les tests doivent être entièrement automatisés pour pouvoir être exécutés aussi souvent que possible.
- Les tests unitaires ne doivent tester que le code vraiment pertinent (donc pas les getters ou setters par exemple) et sont regroupés autour d'une fixture de test (pas autour d'une classe).
- Les tests unitaires doivent - surtout dans le cadre du développement piloté par les tests - être écrits avant le code à tester. Cet effort d'implémentation supplémentaire doit toujours être pris en compte lors de la planification de nouvelles fonctionnalités.
Comment fonctionnent les tests unitaires ?
La plupart des tests suivent une structure de base similaire :
- Un état initial est initialisé.
- L'opération à tester est exécutée.
- Le résultat est comparé à une valeur attendue dérivée de la spécification.
Qui écrit les tests unitaires ?
Dans certaines entreprises, le développement logiciel et l'assurance qualité sont encore séparés, de sorte que les tests unitaires ne sont pas écrits par les développeurs eux-mêmes.
Si ton entreprise travaille selon des méthodes agiles, l'ensemble de la responsabilité du développement et du fonctionnement du logiciel devrait rester au sein de la même équipe, autrement dit : l'équipe qui écrit le code du logiciel développe également les tests unitaires correspondants.
Conclusion sur les tests unitaires
Même si les tests unitaires ne permettent de trouver que les erreurs attendues dans les applications (car les tests ne sont écrits que pour celles-ci), ils se sont imposés comme une mesure importante d'assurance qualité des logiciels. Le test automatisé des unités en particulier accélère le processus de détection et de correction précoces des erreurs et soutient notamment dans le développement logiciel agile le travail itératif, le prototypage et l'amélioration continue des produits.