Pourquoi et comment tester aujourd hui??"?"?" ("?"?" Fabrice Bouquet Séminaire "Informatique Scientifique de Besançon" 3 Décembre 2015 INRIA / CNRS Université de Franche-Comté Fabrice Bouquet Test 1 / 41
Plan 1 Pourquoi 2 Test Structurel 3 Test fonctionnel 4 Test non fonctionnel 5 Synthèse Fabrice Bouquet Test 2 / 41
Plan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Introduction 1 Pourquoi Introduction Dans les faits Dans le cycle de vie Bilan 2 Test Structurel Principe Couverture Bilan 3 Test fonctionnel Exemple Comment? 4 Test non fonctionnel Test de sécurité / vulnérabilité Test de performances / charges Test d IHM 5 Synthèse Fabrice Bouquet Test 3 / 41
... Introduction Pourquoi tester Motivation Ariane 5, Carte à puce, Réseau Orange, open SSL... Complexité des comportements Erreur dans les spécifications, la conception, ou le programme Défaut (faute) dans le logiciel Défaillance (anomalie de fonctionnement) du programme Quelques chiffres Coût des bogues informatiques : 60 Milliards e/ an 22 Milliards économisés si processus tests Fabrice Bouquet Test 4 / 41
Test? Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Introduction IEEE (Standard Glossary of Software Engineering Terminology) "Le test est l exécution ou l évaluation d un système ou d un composant par des moyens automatiques ou manuels, pour vérifier qu il répond à ses spécifications ou identifier les différences entre les résultats attendus et les résultats obtenus". G. Myers (The Art of Software testing) "Tester, c est exécuter le programme dans l intention d y trouver des anomalies ou des défauts". Edsgar W. Dijkstra. Notes on structured programming. Academic Press, 1972 "Tester peut révéler la présence d une anomalie mais jamais son absence". Fabrice Bouquet Test 5 / 41
Plan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Dans les faits 1 Pourquoi Introduction Dans les faits Dans le cycle de vie Bilan 2 Test Structurel Principe Couverture Bilan 3 Test fonctionnel Exemple Comment? 4 Test non fonctionnel Test de sécurité / vulnérabilité Test de performances / charges Test d IHM 5 Synthèse Fabrice Bouquet Test 6 / 41
... Dans les faits Réalité du test Le test est une activité de validation du logiciel Est-ce que le logiciel a été développé correctement en fonction des différentes exigences? Test est une activité pas très populaire Difficultés d ordre psychologique ou culturel : Le développement est constructif car on cherche à établir des résultats corrects Le test est destructif car un bon test est un test qui trouve une anomalie Cependant, le test est une activité centrale : C est un élément principal d amélioration de la qualité logiciel Il peut représenter jusqu à 60% du coût complet du logiciel : 1/3 durant le développement du logiciel 2/3 durant la maintenance du logiciel Fabrice Bouquet Test 7 / 41
... Dans les faits Test dans les technologies de l information Maturité fonction QA/Test : passer d une approche ad hoc vers une approche réfléchie et cohérente 1 : Top 4 des points d amélioration Europe de l ouest Choisir une méthodologie s intégrant dans un développement agile/composant. Fournir une couverture automatisée de test automatique pour permettre l agilité dans le test Plus se concentrer sur les aspects non-fonctionnels comme la performance, la disponibilité, la sécurité, etc Avoir une stratégie de test qui optimise l usage de services de tests (traditionnel ou cloud). 1. Source IDC European Services, Enterprise Application Testing Survey, March 2011 Fabrice Bouquet Test 8 / 41
Plan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Dans le cycle de vie 1 Pourquoi Introduction Dans les faits Dans le cycle de vie Bilan 2 Test Structurel Principe Couverture Bilan 3 Test fonctionnel Exemple Comment? 4 Test non fonctionnel Test de sécurité / vulnérabilité Test de performances / charges Test d IHM 5 Synthèse Fabrice Bouquet Test 9 / 41
... Dans le cycle de vie Développement logiciel et Niveau de test Besoin%client% Test%d accepta)on% Exigences% Test%Système% Concep)on% Test%d intégra)on% Code% Test%unitaire% Fabrice Bouquet Test 10 / 41
... Dans le cycle de vie Cycle de développement en V Fabrice Bouquet Test 11 / 41
... Dans le cycle de vie Méthode Scrum Fabrice Bouquet Test 12 / 41
Coût Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Dans le cycle de vie Mise(en( produc'on( Mise(en( Prod.(1( Mise(en( Prod.(2( Mise(en( Prod.(3( Mise(en( Prod.(n( Coût( Concep'on( Développement( Test( Maintenance( Coût( Concep'on( Développement( Test( Etape(du(projet( Etape(du(projet( Fabrice Bouquet Test 13 / 41
... Dans le cycle de vie Développement Guidé par les Tests (TDD) Développement Dirigé par les Tests Méthode de développement dans les méthodes agiles Préconise l écriture des tests avant le développement du code Début& Ajout&(test)& Refactoring& Exécu/on& Exécu/on& Codage& Fabrice Bouquet Test 14 / 41
Plan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Bilan 1 Pourquoi Introduction Dans les faits Dans le cycle de vie Bilan 2 Test Structurel Principe Couverture Bilan 3 Test fonctionnel Exemple Comment? 4 Test non fonctionnel Test de sécurité / vulnérabilité Test de performances / charges Test d IHM 5 Synthèse Fabrice Bouquet Test 15 / 41
... Bilan Acteurs du test Deux situations : 1. Je teste un programme que j ai écrit 2. Je teste un programme que quelqu un d autre a écrit Trois questions : 1. Comment choisir la technique de test? boite blanche ou boite noire? 2. Comment obtenir le résultat attendu? problème de l oracle du test 3. Comment savoir quand arrêter la phase de test? problème de l arrêt ou critères de couverture. Fabrice Bouquet Test 16 / 41
... Bilan Type de tests [J. Tretmans] Niveau de détail (situation dans le cycle de vie) système intégration unitaire fonctionnel robustesse performance ergonomie sûreté sécurité Bout en bout module Boite blanche Boite noire Caractéristiques (ce que l on veut tester) Niveau d accessibilité Fabrice Bouquet Test 17 / 41
Plan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Principe 1 Pourquoi Introduction Dans les faits Dans le cycle de vie Bilan 2 Test Structurel Principe Couverture Bilan 3 Test fonctionnel Exemple Comment? 4 Test non fonctionnel Test de sécurité / vulnérabilité Test de performances / charges Test d IHM 5 Synthèse Fabrice Bouquet Test 18 / 41
... Couverture Test structurel - Exemple Algorithme 1 : short prog3(i) A j = 1 Input : short i 1 short j, r ; B j = 1; while ( i> 0 ) do j = j * i; i = i - 1; if ( j > 1 ) then r = j; else if ( i < 0 ) then r = 0; else r = 1; return r; i > 0 C j = i*j i = i -1 i E R = j j > 1 D i < 0 G r = 0 j F i H r = 1 I return r Fabrice Bouquet Test 19 / 41
... Couverture Test structurel - Tous-les-nœuds A j = 1 B i > 0 i C j = i*j i = i -1 j > 1 D j Données de tests : E R = j F i < 0 i G r = 0 H r = 1 I return r Fabrice Bouquet Test 20 / 41
... Couverture Test structurel - Tous-les-nœuds A j = 1 B i > 0 i C j = i*j i = i -1 j > 1 D j Données de tests : DT1 : [i=1] A B C B D F H I E R = j F i < 0 i G r = 0 H r = 1 I return r Fabrice Bouquet Test 20 / 41
... Couverture Test structurel - Tous-les-nœuds A j = 1 B i > 0 i C j = i*j i = i -1 j > 1 D j Données de tests : DT1 : [i=1] A B C B D F H I E R = j F DT2 : [i=-1] A B D F G I i < 0 i G r = 0 H r = 1 I return r Fabrice Bouquet Test 20 / 41
... Couverture Test structurel - Tous-les-nœuds A j = 1 B i > 0 i C j = i*j i = i -1 j > 1 D j Données de tests : DT1 : [i=1] A B C B D F H I DT2 : [i=-1] A B D F G I E R = j F DT3 : [i=2] A B C B C B D E I i < 0 i G r = 0 H r = 1 I return r Fabrice Bouquet Test 20 / 41
... Couverture Test structurel - Tous-les-arcs A j = 1 B i > 0 i C j = i*j i = i -1 j > 1 D j Données de tests : DT1 : [i=1] A B C B D F H I DT2 : [i=-1] A B D F G I E R = j F DT3 : [i=2] A B C B C B D E I i < 0 i G r = 0 H r = 1 I return r Fabrice Bouquet Test 21 / 41
... Couverture Test structurel - Ts-chemins-indépendants A j = 1 B i > 0 C j = i*j i = i -1 i E R = j j > 1 D j F Nombre de McCabe ν(g) : nbre d arcs - nbre de nœuds + 2 ν(g) = 11-9 + 2 = 4 DT1 : [i=1] A B C B D F H I DT2 : [i=-1] A B D F G I DT3 : [i=2] A B C B C B D E I i < 0 i DT4 : [i=0] A B D F H I G r = 0 H r = 1 I return r Fabrice Bouquet Test 22 / 41
... Couverture Test structurel hiérarchie Tous les chemins Tous les DU-chemins Tous les i-chemins Tous les chemins indépendants Toutes les utilisations Toutes les définitions Toutes les P-Utilisations Tous les arcs (TER2) Tous les nœuds (TER1) Fabrice Bouquet Test 23 / 41
Plan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Bilan 1 Pourquoi Introduction Dans les faits Dans le cycle de vie Bilan 2 Test Structurel Principe Couverture Bilan 3 Test fonctionnel Exemple Comment? 4 Test non fonctionnel Test de sécurité / vulnérabilité Test de performances / charges Test d IHM 5 Synthèse Fabrice Bouquet Test 24 / 41
Bilan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Bilan Bonne Pratique Une classe de code / Une classe de tests Test et classe dans le même "package" Les cas nominaux Les cas tordus / catastrophes Mauvaise Pratique Répertoire(s) mélangeant les sources et les tests Tests triviaux Effets de bord (ordre des tests, états dégradés) Fabrice Bouquet Test 25 / 41
Bilan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Bilan En résumé, écrire des tests permet : Analyse fine ; Réduction des bogues ; Non-régression du code (refactoring) ; Documentation de votre code ; Développement plus serein ; Efficacité. = Si les tests sont écrits au fur et à mesure Fabrice Bouquet Test 26 / 41
Plan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Exemple 1 Pourquoi Introduction Dans les faits Dans le cycle de vie Bilan 2 Test Structurel Principe Couverture Bilan 3 Test fonctionnel Exemple Comment? 4 Test non fonctionnel Test de sécurité / vulnérabilité Test de performances / charges Test d IHM 5 Synthèse Fabrice Bouquet Test 27 / 41
... Exemple Test fonctionnel - Exemple Spécification : "Formulaire d enregistrement pour un site web sécurisé." Fabrice Bouquet Test 28 / 41
... Exemple Test fonctionnel - Exemple Spécification : "Formulaire d enregistrement pour un site web sécurisé." Login:'!ouquet' Password:' ******' Verifica7on:' ******' Register' Cancel' Fabrice Bouquet Test 28 / 41
... Exemple Test fonctionnel - Exemple Spécification : "Formulaire d enregistrement pour un site web sécurisé." Login:'!ouquet' Password:' ******' Verifica7on:' ******' Register' Cancel' 5 Cases : 12 tests Login (non) vide / long (3) Login (n ) existe (pas) (2) Password (non) vide / long (3) Password et Verification (password réécrit) (ne) sont (pas) les mêmes (2) Protocole http(s) (2) Fabrice Bouquet Test 28 / 41
... Exemple Test fonctionnel - Exemple Spécification : "Formulaire d enregistrement pour un site web sécurisé." Login:'!ouquet' Password:' ******' Quality( Verifica7on:' ******' Register' Cancel' 6 Cases : 15 tests Login (non) vide / long (3) Login (n ) existe (pas) (2) Password (non) vide / long (3) Password et Verification (password réécrit) (ne) sont (pas) les mêmes (2) Protocole http(s) (2) Vérifier qualité / Résistance du password (1 par niveau) : poor, average, good Fabrice Bouquet Test 28 / 41
... Exemple Test fonctionnel - Exemple Spécification : "Formulaire d enregistrement pour un site web sécurisé." Login:'!ouquet' Password:' ******' Quality( Type'the'word:' Verifica7on:' ******' Register' Cancel' 7 Cases : 17 tests Login (non) vide / long (3) Login (n ) existe (pas) (2) Password (non) vide / long (3) Password et Verification (password réécrit) (ne) sont (pas) les mêmes (2) Protocole http(s) (2) Vérifier qualité / Résistance du password (3) Vérifier si enregistrement (non) humain (2) Fabrice Bouquet Test 28 / 41
... Comment? Test fonctionnel Définition Le test fonctionnel vise à examiner le comportement fonctionnel d un logiciel et sa conformité avec la spécification ou les exigences du logiciel. Trois questions sous-jacentes Comment sélectionner des données de test (DT)? Comment construire des cas de tests (CT)? Comment savoir si le test réussit ou échoue? (problème de l oracle) Fabrice Bouquet Test 29 / 41
... Comment? Test fonctionnel Définition Le test fonctionnel vise à examiner le comportement fonctionnel d un logiciel et sa conformité avec la spécification ou les exigences du logiciel. Techniques de calcul des données de test Analyse partitionnelle des domaines des données d entrée (...limites) Test combinatoire Génération aléatoire Fabrice Bouquet Test 29 / 41
... Comment? Test fonctionnel Définition Le test fonctionnel vise à examiner le comportement fonctionnel d un logiciel et sa conformité avec la spécification ou les exigences du logiciel. Techniques de génération de cas de test Test à partir de modèles : Formels : Automate, B, Z, UML/OCL, SysML.. Contrats : Acsl, Eiffel, JML, Praspel, Spec#... Schéma / scénario : Logique, Exp. régulière, Diag. de Seq... Couverture (exigence) Test combinatoire Génération aléatoire Fabrice Bouquet Test 29 / 41
... Comment? Valeur limite sur l exemple 7 Cases : 17 tests Login (non) vide / long (3) Login:'!ouquet' Login (n ) existe (pas) (2) Password:' ******' Type'the'word:' Password (non) vide / long (3) Quality( Verifica7on:' ******' Register' Cancel' Password et Verification (password réécrit) (ne) sont (pas) les mêmes (2) Protocole http(s) (2) Vérifier qualité / Résistance du password (3) Vérifier si enregistrement (non) humain (2) Fabrice Bouquet Test 30 / 41
... Comment? Valeur limite sur l exemple 7 Cases : 17 tests Login (non) vide / long (3) Login:'!ouquet' Login (n ) existe (pas) (2) Password:' ******' Type'the'word:' Password (non) vide / long (3) Quality( Verifica7on:' ******' Register' Cancel' Password et Verification (password réécrit) (ne) sont (pas) les mêmes (2) Protocole http(s) (2) Vérifier qualité / Résistance du password (3) Vérifier si enregistrement (non) humain (2) Variables du formulaire Login Password Password verification Captcha Fabrice Bouquet Test 30 / 41
... Comment? Valeur limite sur l exemple 7 Cases : 17 tests Login (non) vide / long (3) Login:'!ouquet' Login (n ) existe (pas) (2) Password:' ******' Type'the'word:' Password (non) vide / long (3) Quality( Verifica7on:' ******' Register' Cancel' Password et Verification (password réécrit) (ne) sont (pas) les mêmes (2) Protocole http(s) (2) Vérifier qualité / Résistance du password (3) Vérifier si enregistrement (non) humain (2) Variables du formulaire Login : vide, court, normal, très longue chaine (+256c), login existant, invalide login Password Password verification Captcha Fabrice Bouquet Test 30 / 41
... Comment? Valeur limite sur l exemple 7 Cases : 17 tests Login (non) vide / long (3) Login:'!ouquet' Login (n ) existe (pas) (2) Password:' ******' Type'the'word:' Password (non) vide / long (3) Quality( Verifica7on:' ******' Register' Cancel' Password et Verification (password réécrit) (ne) sont (pas) les mêmes (2) Protocole http(s) (2) Vérifier qualité / Résistance du password (3) Vérifier si enregistrement (non) humain (2) Variables du formulaire Login : vide, court, normal, très longue chaine (+256c), login existant, invalide login Password : vide, très longue chaine, même login, poor, average, good Password verification Captcha Fabrice Bouquet Test 30 / 41
... Comment? Valeur limite sur l exemple 7 Cases : 17 tests Login (non) vide / long (3) Login:'!ouquet' Login (n ) existe (pas) (2) Password:' ******' Type'the'word:' Password (non) vide / long (3) Quality( Verifica7on:' ******' Register' Cancel' Password et Verification (password réécrit) (ne) sont (pas) les mêmes (2) Protocole http(s) (2) Vérifier qualité / Résistance du password (3) Vérifier si enregistrement (non) humain (2) Variables du formulaire Login : vide, court, normal, très longue chaine (+256c), login existant, invalide login Password : vide, très longue chaine, même login, poor, average, good Password verification : différent du Password, identique Captcha Fabrice Bouquet Test 30 / 41
... Comment? Valeur limite sur l exemple 7 Cases : 17 tests Login (non) vide / long (3) Login:'!ouquet' Login (n ) existe (pas) (2) Password:' ******' Type'the'word:' Password (non) vide / long (3) Quality( Verifica7on:' ******' Register' Cancel' Password et Verification (password réécrit) (ne) sont (pas) les mêmes (2) Protocole http(s) (2) Vérifier qualité / Résistance du password (3) Vérifier si enregistrement (non) humain (2) Variables du formulaire Login : vide, court, normal, très longue chaine (+256c), login existant, invalide login Password : vide, très longue chaine, même login, poor, average, good Password verification : différent du Password, identique Captcha : la bonne chaine, pas la bonne Fabrice Bouquet Test 30 / 41
Plan Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Sécurité 1 Pourquoi Introduction Dans les faits Dans le cycle de vie Bilan 2 Test Structurel Principe Couverture Bilan 3 Test fonctionnel Exemple Comment? 4 Test non fonctionnel Test de sécurité / vulnérabilité Test de performances / charges Test d IHM 5 Synthèse Fabrice Bouquet Test 31 / 41
... Sécurité Vulnérabilités Fabrice Bouquet Test 32 / 41
Attaques Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... Sécurité Fabrice Bouquet Test 33 / 41
... Sécurité Test de sécurité Tester la manière dont le système est protège contre les accès internes ou externes non autorisés Network Scanning Network vulnerability scanner Source code analyser Security Test Technics Bytecode analyser SAST - Static Application Security Testing Binary code Scanner Database frangibility scanner Network monitoring techniques for detecting vulnerabilities and attacks Monitoring Business activity security monitoring (BAM) Model-based security testing DAST - Dynamic Application Security Testing Fuzzing Penetration test automation Fabrice Bouquet Test 34 / 41
... Performance Test de charge / performance Tester en simulant un nombre d utilisateurs(ions) virtuels prédéfinis et valider que le système répond correctement (temps/fonctionnement) Questions pour le développeur : Test de dégradations des transactions Test de stress Test de robustesse, d endurance, de fiabilité Test de capacité, test de montée en charge Test aux limites Tests de Volumétrie des données Référence http://en.wikipedia.org/wiki/load_testing Fabrice Bouquet Test 35 / 41
Test d IHM Pourquoi Structurel Fonctionnel Non Fonct. Synthèse... IHM Spécificité : Tester en simulant des actions sur l interface Différents univers : OS Langage Web Processus : Enregistrement Adaptation Rejeux Référence http://en.wikipedia.org/wiki/list_of_gui_testing_tools Fabrice Bouquet Test 36 / 41
Plan 1 Pourquoi 2 Test Structurel 3 Test fonctionnel 4 Test non fonctionnel 5 Synthèse Fabrice Bouquet Test 37 / 41
Plan de test Questions pour le testeur : Comment construire des cas de tests? Comment sélectionner des données de test? Comment savoir si le test réussit ou échoue? Questions pour le développeur : Quel est la testabilité de l application (points de contrôle et d observation)? Comment maintenir la stabilité des interfaces? Livraison est-elle fonctionnelle? Fabrice Bouquet Test 38 / 41
Outils Tableur,)Doors,)) HP)ALM,)IBM)Rat.) Requier.)Composer) Exigences) Conformiq,)SmartesGng,) Test)opGmal,)BenderRBT),) Praspel,)JML ) Artéfacts) de)tests) HP,)IBM,)salomeFTM)) Squash)TM,)Testlink) Référen3el) de)tests) Tableur,)Sonar,)) Cobertura,)jenkins) ) ) Rapports) Anomalies) Bugzlla,)Jira,)ManGs,) )Tableur,)Redmine) Scripts) de)tests) IBM)RFT,)Selenium,) HP)QuickTestPro,)Sahi,) XxUnit) Fabrice Bouquet Test 39 / 41
Questions de recherche Requirements + UML model Schema Test model Criteria' Import(pres.*;( ( class(fab({( ((int(bou;( ((int(quet;( ( ((int(mbt(int(p1)({( (((((return(p1(+(bou+quet;( }( Verdict' test test Tests test test Tests Script( Adaptor(+(Env.( Applica1on( Fabrice Bouquet Test 40 / 41
Questions Source - http://model-based-testing.info Est-ce que vous préférez utiliser un système prouvé ou testé?... cf. les artéfacts utilisés. Fabrice Bouquet Test 41 / 41