1 Test de logiciels | Table des matières |
Le test est la principale méthode de validation utilisée en génie logiciel. Le test d'un logiciel a pour buts :
Le test est une activité importante dans le développement d'un logiciel, qui prend autant de temps, sinon plus, que la programmation de ce logiciel. Le test d'un programme nécessite la conception et le développement d'un grand nombre de tests, que l'on regroupe en jeux de tests, selon les types de tests et les objectifs recherchés. L'ensemble de ces jeux de test forme une campagne de test.
Le test unitaire de programme est un type de test qui porte sur une petite portion du programme, comme une procédure, une méthode, une classe, un petit nombre de classes ou encore un paquetage. Le test d'intégration porte sur l'intégration d'un certain nombre de classes ou paquetages ; le test système consiste à tester le programme dans son ensemble, dans les conditions « normales » d'utilisation. Le test unitaire présente les avantages suivants.
Le test unitaire a l'inconvénient de nécessiter l'écriture de lanceurs et de bouchons.
Dans le cas général, il est impossible de tester entièrement le domaine d'entrée d'un programme, car celui-ci est trop grand ou infini. On cherche donc à définir un sous-ensemble de ce domaine de taille réaliste. Un critère de test est un objectif qui permet la sélection de données pertinentes.
En test boîte noire ou fonctionnel, la sélection des données est basée sur les spécifications du programme. On cherche à vérifier que toutes les fonctionnalités du programme sont correctement implantées. Les données de test sont sélectionnées sans examiner le programme, qui est considéré comme une « boîte noire » pour laquelle on peut fournir des entrées et récupérer les sorties.
Le test boîte blanche ou test structurel sélectionne les entrées du programme à partir de la structure du programme. Les données sont choisies de façon à exécuter différentes portions du programme.
Les tests fonctionnels et les tests structurels sont complémentaires et permettent de mettre en évidence différents défauts du programme. Les tests fonctionnels permettent principalement de détecter des défauts dus à une mauvaise compréhension des spécifications du logiciel. Les tests structurels permettent de détecter des défauts lié à la programmation.
Le problème de l'oracle consiste à vérifier que les sorties du programme, en fonction des entrées, sont conformes aux spécifications. Cette vérification peut être effectuée manuellement par un testeur, ce qui est long et fastidieux. On peut également automatiser une partie de ce travail en écrivant des procédures de test qui vérifient elles-mêmes que le programme fournit des résultats corrects. Ce procédé a ses limites puisqu'écrire une procédure générale qui vérifie automatiquement que, pour une entrée quelconque, la sortie est correcte, est aussi difficile que d'écrire le programme lui-même.
Dans certains cas, vérifier que pour une entrée donnée, la sortie est correcte est un problème difficile. Par exemple, si on cherche à tester un compilateur sur un programme donné, on doit montrer que le code produit est correct, ce qui est en général indécidable.
L'exécution des tests peut être automatisée : on peut écrire des programmes qui permettent d'enchaîner l'exécution de plusieurs tests, et qui vérifient que le résultat est correct. On peut ainsi facilement faire des tests de non régression, c'est-à-dire ré-exécuter un ensemble de tests et ainsi vérifier que les fonctionnalités déjà testées continuent à produire les résultats attendus.
JUnit (http://www.junit.org
)
est un ensemble de classes Java réutilisables, qui permet
d'enchaîner l'exécution de tests de programmes Java.
Junit permet en particulier :
1 Test de logiciels | Table des matières |