Test (informatique)
Un article de Wikipédia, l'encyclopédie libre.
En informatique, un test (anglicisme) désigne une procédure de vérification partielle d'un système informatique : le but est de s'assurer que le système informatique réagit de la façon prévue par ses concepteurs.
Sommaire |
[modifier] Définition
Cette définition est issue de la norme IEEE 829 :
Le test est un processus manuel ou automatique, qui vise à établir qu’un système vérifie les propriétés exigées par sa spécification, ou à détecter des différences entre les résultats engendrés par le système et ceux qui sont attendus par la spécification.
Ainsi le test vise à mettre en évidence les erreurs d’un logiciel. Cependant il n'a pas pour objectif de :
- diagnostiquer la cause des erreurs,
- corriger les erreurs,
- prouver la correction d’un programme.
[modifier] Qualité du test
Les phases de test dans le cycle de développement d'un produit logiciel permettent d'assurer un niveau défini de qualité en accord avec le client. Une procédure de test peut donc être plus ou moins fine, et par conséquent l'effort de test plus ou moins important et coûteux selon le niveau de qualité requis.
[modifier] Procédure de test
On applique sur tout ou une partie du système informatique un échantillon de données d'entrées et d'environnement, et on vérifie si le résultat obtenu est conforme à celui attendu. S'il ne l'est pas, cela veut dire que le système informatique testé présente une anomalie de fonctionnement.
[modifier] Classification des tests
Il existe différentes façon de classer les tests informatiques. On peut classer ces façons selon trois axes : le niveau de détail (qui dépend essentiellement de l'endroit où l'on se situe dans le cycle de vie), le niveau d'accessibilité (boîte noire ou blanche) et la caractéristique (fonctionnelle ou performance etc.).
[modifier] Classification selon le niveau de détail
- tests unitaires : vérification des fonctions une par une,
- tests d'intégration : vérification du bon enchaînement des fonctions et des programmes,
- tests de non-régression : vérification qu'il n'y a pas eu de dégradation des fonctions par rapport à la version précédente.
[modifier] Classification selon le niveau d'accessibilité
- boîte noire : à partir d'entrée définie on vérifie que le résultat final convient,
- boîte blanche : on a accès à l'état complet du système que l'on vérifie à chaque ligne.
[modifier] Classification selon la caractéristique
On ne peut pas être exhaustif, on se contentera de quelques exemples :
- tests de performance : vérification que les performances annoncées dans la spécification sont bien atteintes,
- test fonctionnel : vérification que les fonctions sont bien atteintes,
- test de robustesse : vérification de la robustesse du logiciel.
En dehors du cas très particulier de systèmes extrêmement simples, il est impossible de tester exhaustivement un logiciel, car le nombre de configurations possibles croît comme 2n où n est le nombre de bits dans la mémoire du calculateur ; le nombre de configurations accessibles, bien qu'inférieur, reste tout de même prohibitif. La réussite des tests ne permet donc pas de conclure au bon fonctionnement du logiciel. On essaye cependant, heuristiquement, de faire en sorte que si un bogue est présent, le test le mette en évidence, notamment en exigeant une bonne couverture des tests :
- couverture en points de programme : chaque point de programme doit avoir été testé au moins une fois
- couverture en chemins de programme : chaque séquence de points de programme possible dans une exécution doit avoir été testée au moins une fois (impossible en général).
Si l'on veut des assurances plus fortes de bon fonctionnement, on peut utiliser des méthodes formelles.
Les librairies de tests telles JUnit en langage Java, permettent de faciliter l'écriture de tests unitaires par l'apport des méthodes "assert" permettant de vérifier le comportement du programme.
Selon la complexité du logiciel, des séquences de vérification globale peuvent s'avérer nécessaires. Celles-ci mettent en jeu la maîtrise d'ouvrage et toutes les composantes du projet, au-delà du logiciel lui-même (processus, organisation, formation, accompagnement du changement) : réception, qualification, certification, homologation, simulation, VABF (vérification d'aptitude au bon fonctionnement)... les termes varient selon les contextes.
PS : différence entre tests d'application et tests d'API ?
[modifier] Voir aussi
[modifier] Articles connexes
[modifier] Lien externe
- (en) testingfaqs.org, an information resource for software testers
- (en) junit.org, Testing resources for eXtreme Programming