400 likes | 801 Views
Tests et Validation du logiciel. 02/2007 – 06/2007. Tests de validation. Dès la fin des tests d’intégration Objectif : « Vérifier qu’on a fait le bon logiciel » Point de vue du développeur point de vue du client Tests boîtes noires Aspect contractuel Utilisation des spécifications.
E N D
Tests et Validation du logiciel 02/2007 – 06/2007
Tests de validation • Dès la fin des tests d’intégration • Objectif : « Vérifier qu’on a fait le bon logiciel » • Point de vue du développeur point de vue du client • Tests boîtes noires • Aspect contractuel • Utilisation des spécifications
Tests de validation • 1ère Stratégie • Identification de toutes les fonctions du logiciel et les tester séquentiellement • 2nde Stratégie • Tests des caractéristiques du logiciel • Interfaces (conformité avec les spécifications : écrans, fichiers, messages d’erreurs, …) • Ergonomie • Performance, endurance (temps de réponse, utilisation des ressources) • Robustesse, sûreté (mode dégradé) • Installation, configuration • …
Tests de validation • Validation dans un environnement le plus proche possible de celui de production (ex de la jvm) • Données réelles
Conception et tests • Préoccupation des tests avant la production de code • Préparation des dossiers de test dès la stabilisation des spécifications • Penser « tests » en • Ecrivant les spécifications. • Pensant l’architecture. • Ecrivant le code.
Conception et tests • Spécification : • 1 paragraphe fonctionnel de 50 lignes -> 20 lignes individuelles représentant chacune une règle de gestion • Architecture : • Penser une architecture facilitant le test et a fortiori l’identification de problèmes • Ex : centraliser les accès aux données dans une module unique • Code : • If … XOR if … and ….
Techniques de test Introduction Classification des techniques Approche fonctionnelle Approche structurelle Plan
Techniques de tests - Introduction Premier type d’approche • Tests boîtes noires • Tests fonctionnels • Méconnaissance de l’implémentation technique du besoin fonctionnel • Les jeux d’essai dépendent des spécification du besoin • Tests boîtes blanches • Tests structurels • Les jeux d’essai dépendent de l’analyse du code source
Techniques de tests - Introduction Second type d’approche • Tests dynamiques : Produire des DT, à partir du code source et spécification, qui exécuteront un ensemble de comportements, comparer les résultats avec ceux attendus… • Techniques de couverture du graphe de contrôle • Couverture du flot de contrôle • Couverture du flot de données • Test mutationnel (test par injection de défaut) • Exécution abstraite • Test évolutionniste (algorithme génétique) • Tests statiques : pas d’exécution de code • Revue de code • Estimation de la complexité • Preuve formelle (prouveur, vérifieur ou model-checking) • Exécution symbolique • Interprétation abstraite
Techniques de tests - Introduction • Approche dynamique • Limité par l’exécution partielle de l’exhaustivité des comportement du programme • Approche statique • Détection d’erreurs indépendantes de l’application • Vue globale algorithmique • Limites tests statiques (être dissociés de l’exécution réelle du programme)
Techniques de tests - Introduction • Test positif • Test négatif
Techniques de tests - Introduction • Exemple : test d’une voiture • Vérification du comportement extérieur du véhicule par rapport aux spécification (vitesse maximal, freinage, fonctionnement ordinateur de bord, …) • tests fonctionnels, boîte noire
Techniques de tests - Introduction • Examen du moteur : Vérification de la structure interne du véhicule. • Tests structurels • Moteur démarré • Tests accélération : Test dynamique • Moteur arrêté • Montage pistons, angle de serrage du berceau, etc..). Test statique
Techniques de tests - Introduction • Positif – négatif • Débrancher un des composants du régulateur de vitesse
Techniques de tests • Avantage - inconvénient des techniques Function sum (x as integer, y as integer) as integer If (x=600) and (y = 500) then sum := x-y Else sum := x+y End
Techniques de tests • Test fonctionnel • Pas d’accès au code source • Quasi impossibilité de détecter le défaut du logiciel • Test structurel • Exemple : couverture de toutes les instructions • Erreur sur 600+500=100 au lieu de 1100 • Problématique de l’oracle !
Techniques de tests • Erreurs commises (comission error) • tests structurels • Erreurs d’omission (omission error) • tests fonctionnels • Analogie correcteur d’orthographe • Analyse du texte : erreurs commises et pas les phrases absentes
Techniques de tests • Efficacité des techniques de tests / facteurs dépendants • La chance (et oui) • Le type d’application • L’expérience du testeur • L’environnement matériel • Type d’erreur recherchée • Méthode de développement • La documentation • Précision de la localisation d’erreur de le technique de tests • Localisation de l’anomalie • Structurel : localisation assez précise • Fonctionnel : localisation floue…
Classification des techniques de tests • Nécessité d’au moins un des objets : • Spécifications du programme • Code source du programme • Code binaire correspondant
Classification des techniques • Fonctionnelles (boîtes noires): • Classes 1,4,5 • Structurelles (boîtes blanches) • Classes 2,3,6,7 • Dynamiques • Classes 1,3,5,7 • Statiques • Classes 2,4,6
Classification des techniques • Il n’existe pas de classification officielle !Chaque ouvrage, auteur, site défini à sa manière les différentes techniques de test.
Techniques de test Introduction Classification des techniques Approche fonctionnelle Approche classique Analyse partitionnelle Test aux limites Graphes cause-effet Tests syntaxiques Tests aléatoires … Approche structurelle Comparaison des approches Efficacité des techniques de tests Plan
Approche fonctionnelle classique • Objectifs • « tester que le logiciel fait effectivement ce qu’il est censé faire ». • Test de chacune des fonctions que le composant doit accomplir sans ce soucier de la structure interne du programme. • Boite Noire • Doc de spécifications / cahier des charges • Approche privilégiée à ce jour.
Approche fonctionnelle classique • Exemple : Logiciel d’écoute de port • La bouton de validation permet d’ouvrir le port indiqué dans la zone de saisie concernée • Le logiciel trace : • L’ouverture du port • Les ouvertures de connexion cliente • Les fermeture de connexion cliente • Le texte reçu à chaque réception du caractère CR ou LF • La réception du mot « QUIT », case sensitive, met fin à la communication • préparer dossier de test + DT
Une classe d’équivalence correspond à un ensemble de données de tests supposées tester le même comportement, c’est-à-dire activer le même défaut. L’analyse partitionnelle
L’analyse partitionnelle • Se base sur le domaine de variation des données en entrée du composant logiciel. • Segmente les cas fonctionnels en supposant que touts cas d'un segment se comporte comme les autres • Axiome: si le test est validé pour un cas A , il est forcément bon pour tout cas du même ensemble. Établissement de classes de données équivalents. • Une DT = au moins un choix quelconque d'un représentant de chaque Classe
L’analyse partitionnelle • Méthode : Trois phases • Pour chaque donnée d ’entrée, calcul de classes d ’équivalence sur les domaines de valeurs, • Choix d’un représentant de chaque classe d’équivalence, • Composition par produit cartésien sur l’ensemble des données d ’entrée pour établir les DT.
L’analyse partitionnelle • Règles de partitionnement des domaines • Si la valeur appartient à un intervalle, construire : • une classe pour les valeurs inférieures, • une classe pour les valeurs supérieures, • n classes valides. • Si la donnée est un ensemble de valeurs, construire : • une classe avec l ’ensemble vide, • une classe avec trop de valeurs, • n classes valides. • Si la donnée est une obligation ou une contrainte (forme, sens, syntaxe), construire : • une classe avec la contrainte respectée, • une classe avec la contrainte non-respectée
L’analyse partitionnelle - Exemples • Soit F, fonction qui calcule la valeur absolue du produit des entrées E1 et E2 de type INT. • Deux données en entrée : E1 et E2.
L’analyse partitionnelle - Exemple • Le programme à spécifier reçoit en entrée trois valeurs entières censées représenter les longueurs des cotés d’un triangle. Il doit vérifier si ces valeurs peuvent définir un triangle. • Si la réponse est positive, le programme doit calculer le type du triangle : • scalène, isocèle, équilatéral. • Des valeurs entières x, y et z peuvent définir un triangle si et seulement si elles vérifient les inégalités suivantes : • x < y + z &&y < z + x &&z < x + y
L’analyse partitionnelle - Exemple • L’instruction FOR n’accepte qu’un seul paramètre en tant que variable auxiliaire. Son nom ne doit pas dépasser 2 caractères non blancs. Une borne supérieure et une borne inférieure doivent être précisées: la borne inférieure est précédée du mot-clé ‘=‘ et la borne supérieure est précédée par le mot-clé ‘TO’. Les bornes sont des entiers positifs.
Classe d’équivalence : Nombre de paramètres DT (0,1,2) Nombre de caractères du nom DT (‘A’,’AB’,’ABC’) Borne Inférieure DT (précédée par = , non précédée par =) Borne Supérieure DT (précédée par To, non précédée par To) For A=1 to 10 For =1 to 10 For A,B =1 To 10 For AB=1 to 10 For ABC=1 to 10 For A 1 to 10 For a=1 10 L’analyse partitionnelle - Exemple