Software Test and Analysis in a Nutshell - IGL601
Transcription
Software Test and Analysis in a Nutshell - IGL601
IGL601 – Hiver 2015 Révision Brève révision Jonathan Guay Département d’informatique Faculté des sciences [email protected] http://igl601-jg.espaceweb.usherbrooke.ca/ Pourquoi la vérification validation du logiciel? Validation Construisons-nous le bon produit? Choisissons-nous les bonnes propriétés? Vérification Construisons-nous le produit correctement? Traduisons-nous correctement ces propriétés? Plus une erreur est découverte tardivement plus elle coûte cher à réparer. Copyright 2015 Jonathan Guay Pourquoi la gestion des configurations? Les logiciels: sont de plus en plus gros sont de plus en plus complexes sont de plus en plus variés possèdent de plus en plus d’artéfacts doivent s’exécuter sur les plateformes variées La durée de vie des logiciels est de plus en plus longue Copyright 2015 Jonathan Guay Cycle de vie du logiciel vs vérification/validation Copyright 2015 Jonathan Guay Source: Luc Lavoie IGL601 Procédés de développement logiciel Trois familles importantes de procédés 1. Prédictifs Réactifs Cascade V … Itératifs Cascade itératif RUP … 2. Synthétiques XP, Scrum, Kaban, … 3. Rétro-ingénierie Copyright 2015 Jonathan Guay Introduction à la vérification et validation Nécessité des tests pour vérifier et valider le logiciel Propriétés et critères Validité Fiabilité Robustesse Tolérance aux pannes Disponibilité Performance Coût de traitement Sécurité Sureté Etc… Copyright 2015 Jonathan Guay Introduction à la vérification et validation (suite) Qu’est-ce qu’un test? Définitions Anomalie Défaillance Erreur Défaut Essai (Test suite) Type de défauts Calcul, Logique, Traitement de données, Définition des données, Interface (interne et externe) Copyright 2015 Jonathan Guay Introduction à la vérification et validation (suite 2) Classification des essais Essai unitaire Essai d’intégration Essai de système Essai contractuel (livraison, acceptation, qualification, certification) Essai de mise en exploitation Essai de non-régression Copyright 2015 Jonathan Guay Introduction à la vérification et validation (suite 3) Classification des tests Unitaire, intégration, système, non-régression, … Peu utile: le même test peut être utilisés dans plus d’un essai Selon l’objet testé Spécification, code source, code exécutable Selon la technique utilisée Fonctionnelle vs structurelle Statique vs dynamique Vérification vs validation Copyright 2015 Jonathan Guay Introduction à la vérification et validation (suite 4) Que faut-il pour faire un essai? Banc d’essai Un jeu de données d’essai Une procédure d’essai Un cahier d’essai Un guide d’interprétation des résultats … un oracle Copyright 2015 Jonathan Guay Techniques de tests Tests fonctionnels dynamiques Analyse axiomatique (types abstraits algébriques) Analyse partitionnelle Tests aux limites Tests syntaxiques Tests aléatoires Graphes fonctionnels Graphes de causes à effets Analyse transactionnelle Algorithmique qualitative Analyse combinatoire Tests structurels dynamique Analyse de flot Flot de données Flot de contrôle Copyright 2015 Jonathan Guay Techniques de tests (suite) Copyright 2015 Jonathan Guay Source: Pezzè and Young Techniques de tests (suite 2) Tests structurels dynamique Avantages: Augmentation du niveau de confiance de la complétude de notre jeu de tests Permet de tester des cas qu’on ne pourraient déduire uniquement à l’aide des spécifications. Exemple d’un flot de contrôle: Source image: Pezzè and Young Copyright 2015 Jonathan Guay Techniques de tests (suite 3) Tests structurels dynamiques Type de tests structurels dynamiques Ligne de code Branche d’exécution Condition Branche et condition combiné Branche et condition modifié (MC/DC) Chemins Chemins intérieurs Linéaire et saut (LCSAJ) Cyclique Appel de fonctions Exemple de calcul du critère de couverture par ligne de code: # de ligne de code exécuté / # de ligne de code total Copyright 2015 Jonathan Guay Types abstraits algébriques Il est nécessaire de définir de manière non ambigüe le comportement d’une routine. Composer d’une signature et d’un système d’axiomes Composer à l’aide de règles d’écritures Le développement d’un TA rend la programmation plus facile. Source: Luc Lavoie IGL601 Copyright 2015 Jonathan Guay Inadéquation Vocabulaire Spécification de test Obligation de test Cas de test Essai Séance d’essai Critères d’inadéquation Pourquoi l’adéquation est inatteignable? Problème de la programmation défensive Z = 10; if (z < 0) { throw new ErreurInterne( “z aurait dû être positif !”) } Pourcentage de couverture Dominance des critères de couverture Copyright 2015 Jonathan Guay Gestion des versions Objectifs: Conservation Maîtrise de l’évolution Traçabilité Service Centralisé Décentralisé Gestion des conflits Verrouillage Fusion Hybride Copyright 2015 Jonathan Guay Revues logicielles Vocabulaire: Revue Inspection (contrôle) Audit À quel moment doit-on faire la revue? Qui sont les réviseurs? Comment élaborer une bonne grille de revues? Revue de code oui, mais aussi, de tous les types d’artéfacts Copyright 2015 Jonathan Guay Gestion des essais Le plan d’essai Techniques de test Procédures de tests Critères de tests Ressources requises Compétences requises Facteurs qui influenceront le plan de tests Gestion des risques généraux et spécifiques Suivi ODC, RCA Gestion des équipes Gestion des réunions Gestion des résultats Gestion des suites à donner Amélioration des processus Gestion des anomalies Gestion des configurations Cahier des essaies Copyright 2015 Jonathan Guay Gestion des anomalies Procédé typique de gestion des anomalies entres les différents intervenants Chargé de projet, programmeur, testeur, utilisateur, l’administrateur). Normes IEEE 1044 et ITIL Copyright 2015 Jonathan Guay Gestion des anomalies (suite) Cycle de vie d’une anomalie: Source: Luc Lavoie IGL601 Copyright 2015 Jonathan Guay Gestion des configurations Objectif de la gestion des configurations Nécessité de la gestion des configurations Tout au long du cycle de vie du logiciel Gestions des configurations Gestion des sources Gestion des versions Gestion matériel Gestion de la documentation Définition d’une configuration Normes IEEE, DoD et ITIL Composante élémentaire Configuration de référence Besoins de la gestion des configuration Difficultés Copyright 2015 Jonathan Guay Procédés de verification et validation Tests unitaires Tests d’intégration Tests de système Tests de non-régression Procédé prédictif simple Normes IEEE Procédés de développement logiciels et la VV Copyright 2015 Jonathan Guay Procédés de verification et validation (suite) Procédé prédictif simple Source: Pezzè and Young Copyright 2015 Jonathan Guay Amélioration des processus Aperçu des différents processus d’amélioration des processus PSP, TSP, CMMI, SPICE (RCA) TPI Niveau de maturité et de compétence du CMMI et du PSP Copyright 2015 Jonathan Guay Techniques de flux de données Objectifs Détecter automatiquement et systématiquement Anomalies Incohérences Notion de dominance Notion de dépendance (def-use pairs) Notation en fonction des nœuds immédiats Reach(E) = ReachOut(D) … Notion Avail (disponibilité d’une variable) Notion Live (durée de vie d’une variable) Classification des analyses Avant/Arrière Any-Path vs All-Path Notion de sensibilité du flux Copyright 2015 Jonathan Guay Techniques de flux de données (suite) Notion de dépendance (def-use pairs) Copyright 2015 Jonathan Guay Source: Pezzè and Young Techniques de flux de données (suite 2 ) Graphe de dépendance directe de données Source: Pezzè and Young Copyright 2015 Jonathan Guay Tests combinatoires But de l’analyse combinatoire Approches Tests partionnels basés sur la catégorie Tests par paires Tests basés sur un catalogue Copyright 2015 Jonathan Guay Bonne chance! Copyright 2015 Jonathan Guay