Excelent document about tests design on a project. It's in french, i will translate it sooner as possible.
Source: http://www-igm.univ-mlv.fr/~dr/XPOSE/TesTs/
Organiser des Tests dans un Projet
« Tester consiste à exécuter un programme dans le but de faire apparaître des anomalies enfuies. »
Différents types de test
Mise en œuvre d'un plan de test
Préparation
Planification
Analyse du risque
Concevoir des jeux d'essai
Analyse des résultats
Le test appartient à l'activité de Vérification et de Validation d'une application, qui consiste à déterminer si cette dernière a été développée correctement en fonction des exigences.
Les tâches liées à l'activité de Vérification et de Validation démarrent avec le projet et s'adaptent à chaque phase de développement.
Toutefois on peut se demander pourquoi chercher des anomalies si on suit une démarche organisée.
Les réponses sont nombreuses :
Des erreurs ont peut-être été commises au cours du développement,
Les possibilités d'utilisation sont très nombreuses,
Le logiciel n'a peut-être pas été correctement conçu.
Ainsi, une démarche organisée de la phase de test permettra de mettre en évidence la qualité de l'application développée.
Différents types de tests
Tests unitaires
Tests d’intégration
Tests fonctionnels
Tests de non-régression
Tests IHM
Tests de configuration
Tests de performance
Tests d’installation
Les tests unitaires
Les tests unitaires consistent à tester individuellement les composants de l’application. On pourra ainsi valider la qualité du code et les performances d'un module.
Les tests d'intégration
Ces tests sont exécutés pour valider l'intégration des différents modules entre eux et dans leur environnement exploitation définitif.
Ils permettront de mettre en évidence des problèmes d'interfaces entre différents programmes.
Les tests fonctionnels
Ces tests ont pour but de vérifier la conformité de l'application développée avec le cahier des charges initial. Ils sont donc basés sur les spécifications fonctionnelles et techniques.
Les tests de non-régression
Les tests de non-régression permettent de vérifier que des modifications n'ont pas altérées le fonctionnent de l'application.
L'utilisation d'outils de tests, dans ce dommaine, permet de facilité la mise en place de ce type de tests.
Les tests IHM
Les tests IHM ont pour but de vérifier que la charte graphique a été respectée tout au long du développement.
Cela consiste à contrôler :
la présentation visuelle : les menus, les paramètres d'affichages, les propriétés des fenêtres, les barres d'icônes, la résolution des écrans, les effets de bord,…
la navigation : les moyens de navigations, les raccourcis, le résultat d'un déplacement dans un écran,…
Les tests de configuration
Une application doit pouvoir s'adapter au renouvellement de plus en plus fréquent des ordinateurs. Il s'avère donc indispensable d'étudier l'impact des environnements d'exploitation sur son fonctionnement.
Voici quelques sources de problèmes qui peuvent surgir lorsque l'on migre une application vers un environnement différent :
L’application développée en 16 bits migre sur un environnement 32 bits,
Les DLL sont incompatibles,
Les formats de fichiers sont différents,
Les drivers de périphériques changent,
Les interfaces ne sont pas gérées de la même manière...
Ainsi, pour faire des tests efficaces dans ce contexte, il est nécessaire de fixer certains paramètres comme par exemple :
la même résolution graphique,
le même nombre de couleurs à l'écran,
une imprimante identique,
les mêmes paramètres pour le réseau...
Les tests de performance
Le but principal des tests de performance est de valider la capacité qu'ont les serveurs et les réseaux à supporter des charges d'accès importantes.
On doit notamment vérifier que les temps de réponse restent raisonnables lorsqu'un nombre important d'utilisateurs sont simultanément connectés à la base de données de l'application.
Pour cela, il faut d'abord relever les temps de réponse en utilisation normale, puis les comparer aux résultats obtenus dans des conditions extrêmes d’utilisation.
Une solution est de simuler un nombre important d'utilisateur en exécutant l'application à partir d'un même poste et en analysant le trafic généré.
Le deuxième objectif de ces tests est de valider le comportement de l'application, toujours dans des conditions extrêmes. Ces tests doivent permettent de définir un environnement matériel minimum pour que l'application fonctionnement correctement.
Les tests d'installation
Une fois l'application validée, il est nécessaire de contrôler les aspects liés à la documentation et à l'installation.
Les procédures d'installation doivent être testées intégralement car elles garantissent la fiabilité de l'application dans la phase de démarrage.
Bien sûr, il faudra aussi vérifier que les supports d'installation ne contiennent pas de virus.
Préparer des tests
Définir les ressources humaines
Choisir une plate-forme de test
Choisir un outil de test
Définir une politique pour le suivi des anomalies
On organise la phase de test de la même manière qu’on organise un projet.
Ainsi, le premier travail consiste à définir toute la partie ressources, d’une parte, et l’organisation des campagnes de tests, d’autre part.
Définir les ressources humaines
On se pose souvent la question de savoir qui doit participer aux tests.
S’il n’y a pas de réponse tranchée à cette question (cela dépend du projet), on peut tout de même définir les rôles suivants :
Tout comme un chef de projet, le chef des tests a pour mission d’assurer la bonne réussite des tests. C’est pourquoi on choisira la personne qui a la vue la plus global du projet.
Le concepteur des jeux d'essais
On prendra de préférence un programmeur ayant une grande expérience de l’environnement d’exploitation et de l’application.
Pour préparer les jeux d’essai ce concepteur devra s’appuyer sur les spécifications techniques et le cahier des charges.
Les testeurs
Ce peut être toutes personnes impliquées dans le développement et le déploiement de l’application.
Le profil idéal du testeur est un utilisateur expérimenté et motivé, ayant une bonne connaissance du logiciel. Toutefois, on évitera de faire participer les développeurs eux-mêmes.
Choisir une plate-forme de test
Afin d’éviter tout problème lié à une différence entre l’environnement de tests et d’exploitation réel, une méthode est de fixer dans le cahier des charges la configuration matérielle minimale.
Ainsi, les tests seront effectués sur plusieurs plates-formes, dont la configuration minimum.
Choisir un outil de test
Les outils de test ont pour vocation de rejouer des scénarios de tests pour mettre en évidence des problèmes de régression ou de dégradation des performances. Cependant, comme tous les logiciels, ils présentent des avantages et des inconvénients :
Avantage
Détection des problèmes de régression en rejouant entièrement des scénarios de tests identiques à chaque version d’une application.
Inconvénient
Temps d’apprentissage et de mise en œuvre
Investissement
Définir une politique pour le suivi des anomalies
La façon dont va circuler les anomalies doit être définie dès cette phase. Il s’agit de se mettre d’accord sur la façon dont seront réalisées les corrections et par qui.
De plus, les anomalies déclarées suite aux tests seront consignées sur des formulaires avec l’état de progression de la correction.
Planifier des tests
Objectif d’un plan de test
Structure d’un plan de test
Objectif d’un plan de test
L’activité de planification est productrice d’idées et d’organisation. Elle exige une grande imagination, car elle nécessite de formaliser des processus qui sont en général menés de manière intuitive.
Le plan de test recense les objectifs et les moyens pour réaliser les tests. Il permet l’organisation technique des tests, il planifie leur déroulement dans le temps et définit les points de repère, en particulier les conditions d’arrêt. Il sert aussi de document de validation de la qualité finale du logiciel et fait partie des documents contractuels du projet, au même titre que les spécifications techniques ou les besoins fonctionnels. Il est conçu par le responsable des tests et validé par le chef de projet.
Structure d’un plan de test
Introduction
L’introduction présente les informations générales du plan :
Présentation de l’application
Contexte de réalisation
Choix technologiques
Coordonnées du responsable des tests
Projet à tester
Il s'agit ici de décrire précisément le projet
Liste des modules et/ou des lots
Date de livraison
Documents joints
Documents généraux
Documents techniques
Documentation
Environnement de test
Ce paragraphe présentera une description la plus précise possible des plateformes, en indiquant si elles sont représentative des plates formes utilisateurs.
Sites de test
Configurations matérielles
Outils de test
Bases de test
Données de test
Coordonnées de l’administrateurs de la bases de données
Coordonnées du responsable du parc micro
Tests à réaliser
Listes des modules à tester
Objectif des tests
Exigences
Analyse du risque
Matrice Exigences/Risques pour définir les priorités
Jeux d’essais
Estimation de la charge
Stratégie de tests
On décrira dans ce paragraphe la démarche mise en œuvre pour réaliser les tests
Description de l’approche générale
Phase de tests
Champagne de test
Ordre d’exécution des tests
Condition d’arrêt
Critères retenus et pourquoi
Gestion des fiches d’anomalies
Modèles des fiches d’anomalie
Actions et états
Gestion des flux
Liste des intervenants
Ressources humaines
Nom et responsabilité
Informations utiles
Planning des tests
Planning
Acteurs
Analyse du risque
Les facteurs de risque
Priorité du risque
Une fois les objectifs de test recensés, il faut définir les objectifs les plus importants et ceux qui présentent le plus grand risque.
Comme les tests ne pourront pas éliminer toutes les anomalies de l'application, on sera toujours amené à faire des choix mais on ne voudra pas éliminer des tests les plus importants. A cet effet, on définira pour chaque objectif de test une priorité qui dérivera directement du facteur de risque.
On peut définir le facteur de risque comme étant la combinaison de :
La probabilité d'apparition d'un dysfonctionnement,
L’impact de ce dysfonctionnement sur les utilisateurs ou sur l'environnement.
En fait, cela consiste à prendre chaque objectif de test, donc chaque fonction principale de l'application, et à définir si la fonction est souvent utilisée et quel sera impact d'un éventuel dysfonctionnement.
Le résultat de cette analyse du risque conduit à attribuer une priorité à chaque objectif de test qui fera l'objet d'un paragraphe séparé du plan de test.
Le risque s'applique à des catégories particulières qui peuvent être :
Fonctionnalité la fonction testée ne correspond pas aux besoins.
performance- les temps de réponse sont inacceptables,
Instabilité les fonctions ne sont pas reproductibles,
Coût financier - le coût du dysfonctionnement est important,
Planning- la correction de l'anomalie induira un retard important de la livraison,
Fiabilité -le nombre constaté d'anomalies et leur sévérité pose problème.
Le dernier maillon de la chaîne lié au risque est le sujet, c'est-à-dire les personnes qui seront directement influencée par ce facteur risque. On distingue :
L’utilisateur du logiciel,
Le concepteur,
L’exploitant.
Les facteurs de risque
Probabilités d'apparition
C'est la première étape de l'analyse du risque. On parcourt l'ensemble des objectifs et on définit le degré d'utilisation de chaque fonction. On peut, par exemple, définir les degrés suivants :
Inévitable - Une partie de l'application que tous les utilisateurs rencontreront nécessairement. Exemple : écran d'accueil.
Fréquent - Une partie de l'application utilisée par les utilisateurs, mais pas dans toutes les sessions. Exemple : impression d'un document.
Occasionnel - Une partie de l'application qu'un utilisateur moyen n'utilisera pas, mais qui peut être utilisée par un utilisateur expérimenté en cas de besoin. Exemple : paramétrage des options.
Rare - Une partie de l'application qui n'apparaît que dans certains cas, dans le cadre d'opérations complexes. La majorité des utilisateurs ne l'utilisent pas, mais elle joue un rôle dans certaines situations. Exemple : modifications de barres d'outils.
Cette analyse des probabilités d'apparition s'effectuera au niveau de chaque objectif de test. Elle guidera les testeurs vers les fonctionnalités les plus utilisées.
Impact
Une fois les zones importantes identifiées, il faut analyser l'impact d'un dysfonctionnement sur l'utilisateur ou sur l'environnement externe à l'application.
De même, on pourra définir, selon impact des anomalies, les niveaux suivants :
Catastrophique. Exemple : la machine s'arrête, le logiciel dans son ensemble ne fonctionne plus, on ne peut pas sauvegarder, etc.
Grave - Si cette fonction ne marche pas, l'application peut continuer, mais le risque de perdre des données ou d'utiliser des données corrompues est important. Il est nécessaire de relancer l'ordinateur pour résoudre le problème. Exemple : la communication vers l'ordinateur hôte s'interrompt, et les données ne sont plus mises à jour.
Modéré - Le problème rencontré perturbe l'utilisateur, mais ce dernier peut le contourner en effectuant des actions complémentaires. Exemple : la disquette de sauvegarde est pleine, l'utilisateur doit passer par le disque dur pour finir la sauvegarde.
Ennuyeux - Si cette fonction ne marche pas, on peut continuer à utiliser l'application, mais elle peut poser des problèmes ultérieurement. Exemple : on veut entrer un nom de fichier de dix caractères, mais l'application ne permet pas d'en entrer que cinq.
Le fait de combiner les probabilités d'usage avec les impacts sur les utilisateurs va permettre de classer les objectifs de tests par priorités.
Priorité du risque
La priorité servira à valoriser l'importance que l'on accorde à chaque objectif de test.
Une priorité élevée définira les problèmes qui doivent impérativement être résolus,
une priorité moyenne les problèmes qui pourront être résolus ultérieurement, mais qu'il ne faut pas négliger, et en fin une priorité basse les problèmes dont la solution peut attendre et qui seront traités en dernier.
L'action suivante est d'assigner ces priorités aux objectifs de test. Cette démarche s'effectue en deux étapes : définir une table de risque, puis assigner des priorités en fonction de cette table, comme le décrit le tableau ci-dessous :
|
Inévitable |
Fréquent |
Occasionnel |
Rare |
Catastrophique |
Elevée |
Elevée |
Elevée |
Moyenne |
Grave |
Elevée |
Elevée |
Moyenne |
Basse |
Modéré |
Moyenne |
Moyenne |
Basse |
Basse |
Ennuyeux |
Moyenne |
Basse |
Basse |
Basse |
La dernière étape de l'analyse du risque est la constitution de la matrice de risque pour l'ensemble des objectifs de tests. Cette matrice contient les champs suivants :
Objectif de test
Probabilité d'usage
Impact
Catégorie
Sujet
RISQUE
Concevoir des jeux d’essai
Validation d’un champ
Graphe de cause à effet et tables de décision
Plan d’un jeu d’essai
« Un jeux d’essai est une description d’une suite d’action et de résultats attendus, ayant pour objectif la validation d’une fonctionnalité de l’application. »
On créera donc des jeux d’essai qui décrivent une situation possible, plausible ou bien probable d’utilisation.
Validation d’un champ
Les champs numériques
Lors des tests de champs numériques, on veillera tout particulièrement à ceux que seul le format décrit dans les spécifications soit acceptée. Par exemple, si un champ n’accepte que les valeurs numériques positives, on validera les cas suivants :
|
Résultats |
Chiffres uniquement |
Cas normal |
Lettres uniquement |
Non accepter |
Nombre négatif |
Non accepter |
Nombre positif incluant une virgule |
Cas normal |
Les abréviations
Dans le cas où certains champs de l’application accepte des abréviations, il s’agira de s’assurer que seul les abréviations autorisées sont acceptées.
Graphe de cause à effet et tables de décision
On modélise souvent le fonctionnement d’une application sous la forme d’un diagramme d’état transition décrivant les transitions possibles entre deux états ou deux écrans. On associe à chaque transition des conditions à respecter pour assurer cette transition.
Les graphes de cause à effet définissent, sous forme graphique et logique, les conditions de ces transitions.
Exemple de diagramme état transition :
On peut passer de l’état 1 soit à l’état 2 soit à l’état 4 en fonction d’une condition.
Plan d’un jeu d’essai
Nom de l’application :
Référence de scénario de test :
Date :
Action |
Résultats attendus |
Clique sur le menu |
La fenêtre d’accueil apparaît |
Choisir une option |
Le choix est exécuté |
Ce plan montre qu’il est tout à fait possible de découper les tests en une suite d’actions de bases, dont on contrôlera la progression en fonction des résultats obtenus.
Analyse des résultats
Cycle de test
Rapport de test
Interprétation des résultats
Cycle de test
Le cycle de test correspond à la période durant laquelle un ensemble de tests est exécuté. Ainsi à la fin de chaque cycle, un examen des résultats obtenus permettra de définir si l’on peut passer ou non au cycle suivant.
Organiser ces cycles dans un tableau permettra de simplifier l’analyse des résultats.
Si l’application développée est une version n+1 d’une application existante, on sera amené à en vérifier la non-régression. Pour cela, on pourra définir un cycle de non-régression qui consistera à rejouer des scénarios de test de la version précédente.
Rapport de test
On trouve en général cinq familles de rapport dans ce domaine :
Les rapports de synthèses,
Les rapports de couverture de test,
Les rapports d’avancement,
Les rapports de performance,
Les rapports d’anomalies.
Rapports de couverture des tests
Ils mettent en relation les scénarios de test avec les objectifs et les règles de gestion. Toutefois, même avec l'aide de ce rapport il reste en général difficile d'affirmer que toute l'application a été testée.
Rapports d'avancement
Afin de pouvoir évaluer l’avancement des tests, on générera des rapports visualisant les scénarios enregistrés, ceux qui contiennent des bogues, par rapport à l’ensemble des procédures.
On pourra également lister les scénarios qui auront été exécutés sans problème.
Comme les rapports de couverture de test, les rapports d’avancement doivent faire référence aux objectifs de tests.
Rapports de performance
Les performances sont liées aux temps de réponse observés lors des tests de montée en charge ou des tests en mode dégradé.
Afin de simplifier la lecture de ces rapports, les résultats obtenus pourront être présentés sous la forme de graphiques appropriés.
Rapports d’anomalies
Ces rapports doivent faciliter le suivit d’une anomalie.
De plus, ils permettront de déterminer quels sont les modules les plus fiables de l’application.
Interprétation des résultats
Une fois les rapports de tests écrits, il faut se prononcer sur leur signification.
Le premier critère à prendre en compte est lié à la phase de test que l’on vient d’exécuter.
Si on se trouve dans des phases préliminaires, on aura la possibilité de corriger les anomalies détectées sans trop perturber la suite des tests et le développement ultérieur de l'application.
Si au contraire on se trouve dans une phase de test avancée, il est important de prendre en compte l'impact de la correction des anomalies sur les tests ultérieurs.
Dans tous les cas, on veillera spécialement à qualifier correctement les anomalies, surtout celles qui ont été définies comme bloquantes et on recherchera les modules provoquant le plus grand nombre d'anomalies.
Enfin, avant de définir les conditions de test du cycle suivant, il faudra préciser quelles sont les anomalies que l'on voudra suivre tout particulièrement pour vérifier si elles ont bien été corrigées.
Écrire commentaire