Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Objectifs
I. Introduire la vrification et la validation (V&V) du logiciel et comprendre leurs diffrences. II.Dfinir le plan de V&V et ses composantes. III.Introduire le test de logiciel et ses composantes. IV.Dcrire le processus d'inspection de code et son rle dans le V&V. V.Dcrire l'analyse statique comme une technique de vrification.
Vrification:
Avons-nous construit le produit bien? i.e., le logiciel doit tre conforme sa spcification
Validation:
Avons-nous construit le bon produit? i.e., le logiciel doit faire ce que l'utilisateur a besoin
Processus de V&V
Le processus de V&V doit tre appliqu chaque tape du dveloppement. Ses objectifs:
Principalement pour les systmes critiques de niveau A. Ceci ne veut pas dire TOUS les dfauts mais plutt augmenter la confiance dans ce systme.
Types de V&V
Statique = inspection/analyse statique (i.e., sans excution) du systme pour dcouvrir des problmes ou prouver sa correction.
Le systme est excut sur des donnes de test et son excution est observe (manuellement ou automatiquement).
Le plan doit tre fait avec attention pour obtenir le plus de rsultats en test et inspection. Il doit tre fait trs tt pour commencer tt dans le processus de dveloppement. Doit tablir le rapport entre la part de la V&V statique et dynamique. Le plan de test doit indiquer les politiques suivre pour crire les tests plutt que les tests eux mme.
V&V et dveloppement en V
Processus de test
Composants tests
Agenda de tests, les ressources ncessaires et son intgration avec l'agenda du dveloppement.
Peut rvler la prsence d'erreurs et NON leur absence. La technique utilisable actuellement pour valider les charges non-fonctionnelles car elle est base sur une excution du logiciel.
Doit tre fait en conjonction avec l'inspection statique pour amliorer la couverture du processus de V&V.
Types de tests
Test de dfaut
Utilis pour trouver les dfauts du systme. Un test de dfaut bon est celui qui dcouvre des dfauts dans le systme. Utilis pour montrer que le logiciel satisfait les charges. Un test de validation bon est celui qui montre que la charge sous test est bien implmente.
Test de validation
Le test a comme objectif de rvler la prsence de dfauts dans un logiciel Le dpannage a comme objectif de localiser et rparer ces dfauts. Le dpannage formule des hypothses sur la cause du dfaut et utilise le test pour les valider.
Test de composant
Concerne les briques de base du logiciel En gnral, fait pas le programmeur du composant ... sur la base de son exprience avec le programme. Concerne des groupes de composants intgrs pour crer un systme ou un sous-systme. En gnral, fait par une quipe indpendante sur la base de la spcification du systme.
Test de systme
Le test exhaustif est impossible raliser... La politique de test dfinit l'approche utilise pour slectionner les tests crire et excuter. Exemple:
Tester toutes les fonctions accessibles par des menus. Tester la combinaison (en squence) des fonctions accessibles par les menus. Tester les fonctions avec entres utilisateur ayant des valeurs correctes et incorrectes.
Test de systme
Demande la composition de briques de base pour construire un sous-systme ou le systme. Peut concerner une distribution partielle ou une extension/incrment d'une distribution. Deux phases:
Test d'intgration: l'quipe a accs au code et le test est fait au fil de l'intgration des composantes. Test de distribution (release): l'quipe teste le systme complet comme une bote noire (i.e., sans regarder le code).
Test d'intgration
Compose les briques et teste pour dfauts provenant de l'interaction de ces briques. Pour faciliter la localisation des dfauts, l'intgration doit tre incrmentale. Approches:
Bottom-up: intgrer les briques par groupes et puis attaquer les fonctionnalits.
Du code supplmentaire peut tre ncessaire pour observer les rsultats des tests.
Test de distribution
But: accrotre la confiance des clients Test de validation, i.e., montre que le systme satisfait ses charges. Approche bote noire :
Tests bass sur la spcification uniquement, sans connaissance des choix d'implmentation. On teste les fonctionnalits, les performances et le comportement aux limites (stress) du logiciel.
Choisir les entres qui gnrent toutes les messages d'erreur. Dfinir des entres qui provoquent le buffer overflow . Rpter les mmes entres ou sries d'entres plusieurs fois. Forcer la gnration des sorties invalides. Forcer des sorties trop courtes ou trop larges. Couvrir tous les squences d'utilisation avec des scnarios positifs et ngatifs. etc.
Exemple: LIBSYS
Tester le mcanisme de login avec un utilisateur correct et incorrect pour tester que les utilisateurs corrects sont accepts et ceux incorrects sont rejets. Tester la fonctionnalit de recherche avec 0, 1, 2 ou plusieurs sources slectionnes et avec des articles existants ou non-existants. Tester l'interface d'affichage des documents avec diffrents formats. Tester le mcanisme de tlchargement. Tester l'envoi d'email pour confirmer le tlchargement correct du document.
Test de performance
Tests avec une charge croissante de tches; Tests en prsence d'erreurs de transmission ou de temps de rponse trs grands; etc.
Excute le systme en utilisant des entres trs proches ou au del des limites prvues. Permet de tester le comportement du systme en cas de panne et ainsi s'assurer qu'il ne provoque pas des pertes de service ou de donnes inacceptables. Trs utiliss dans les systmes distribus (sites web) pour exhiber des comportements anormaux en cas de charge du rseau.
Test de composant
= test unitaire, processus qui teste les composantes en isolation. C'est un test de dfaut. La composante sous test (IUT - Implementation Under Test) peut tre:
Des fonctions ou des mthodes d'un objet; Des classes contenant champs et mthodes; Des classes composites avec des fonctionnalits accessibles par une classe abstraite ou interface.
Test de classe
Tester toutes les mthodes de la classe; Tester les setters et getters de tous les champs; Tester les objets dans tous les tats possibles de la classe.
L'hritage rend cette tche plus difficile... Exemple: la bibliothque LASER (le voir sous Eclipse et JUnit)
Test d'interface
Trouver des dfauts cause d'erreurs dans les interfaces ou d'hypothses invalides sur les mthodes de l'interface.
Un composant appelle une mthode de l'interface d'un autre composant avec un ordre invers des paramtres ou avec des pointeurs null. La vitesse de rponse d'une mthode d'interface ne correspond pas au critres d'utilisation. L'activation d'un composant ne se fait pas dans le bon ordre et casse les hypothses de son utilisation. etc.
Vocabulaire:
Enpartantdescharges:requirementbased Enpartantdesentres:partitiontesting
Un bon principe pour l'criture des charges est que les charges doivent tre testables. C'est un test de validation:
Pour chaque charge crire une TS. Une spcification complte des charges est trs utile ce niveau.
L'utilisateur doit tre capable de rechercher un article dans un ensemble des DB ou dans un sous-ensemble qu'il a slectionn. Le systme doit fournir les programmes de visualisation pour tous les formats de documents. A chaque commande soit tre associ un numro unique que l'utilisateur doit pouvoir le copies dans son compte.
Tester des recherches pour des articles connus et absents avec un ensemble de 1 DB. Tester des recherches pour des articles connus et absents avec un ensemble de deux DB. Tester des recherches pour des articles connus et absents avec un ensemble de plus que deux DB. Tester la slection d'une DB et lancer la recherche pour des articles prsents et absents. Tester la slection de plusieurs DB et lancer la recherche pour des articles prsents et absents. etc.
Les entres et les rsultats peuvent tre partags en classes dont les lments concernent le mme comportement du IUT. Une telle classe = classe d'quivalence ou partition. Les TC doivent tre choisis dans chaque classe. On part de la spcification!
Exemple: search
Procedure Search (Key:ELEM, T: SEQ of ELEM) returns (Found: BOOLEAN, L: ELEM_INDEX) Pre-condition:
Post-condition:
(FOUND and T[L]=Key) (not FOUND and not (!i. 0<=i<=size(T) et T[i]=Key))
Key absent du T
Exemple: search
Test structurel
= en bote blanche car les tests sont crits en partant de la structure du code. But: gnrer des DT qui excutent le programme pour couvrir toutes les instructions/branches/etc.
Les noeuds sont des instructions ou des dcisions. Les arcs sont des changement de contrle.
1 2 3 4 5 6 7 8 9 10 14 1 2 3 4 5 14 1 2 3 4 5 6 7 11 12 5 1 2 3 4 6 7 2 11 13 5 ...
S: Toutes les instructions D: Toutes les arcs (dcisions) C: Toutes les conditions atomiques DC: Toutes les combinaisons D et C MC/DC: Toutes les combinaisons boolennes de C pour une D All-uses: tous les chemins entre la dfinition et l'utilisation d'une variables ...
Le test est trs coteux: jusqu' 50% du cot du logiciel. Des outils d'aide au test existent pour:
L'excution automatique des tests: suite Xunit Le calcul de la couverture La comparaison des rsultats
Consiste examiner le code, sans l'excuter, soit par des humains (inspection) soit par un logiciel (analyse statique). Comme l'excution du code n'est pas requise, ces mthodes peuvent tre appliques avant d'avoir une implmentation (mme compilable). Appliquable tout autre reprsentation que du code (cahier de charges, design, suite de tests, etc.). Le but: dcouvrir des dfauts ou des anomalies. Le principe: plusieurs dfauts peuvent tre rvls par une lecture de code par des relecteurs qui ont une expertise du domaine/du langage de programmation/du formalisme de spcification/du design.
Inspection et test
L'inspection et le test sont des mthodes complmentaires; les deux peuvent tre utiliss pendant le processus V&V:
L'inspection vrifie la conformit une spcification mais pas une charge utilisateur. L'inspection ne peut pas vrifier des charges nonfonctionnelles comme les performances, l'ergonomie, etc. Le test demande une implmentation excutable.
Inspection de code
But: dtecter des dfaut mais pas le corriger! Dfauts recherchs (exemples) :
Erreurs logiques Mauvaise utilisation des variables, par exemple sans initialisation, avec une smantique diffrente... Non respect des standards de codage, etc.
Pr-conditions de l'inspection
Une spcification prcise doit tre disponible. Les inspecteurs doivent connatre des standards de codage de l'entreprise. Des exemples de code correct doivent tre disponibles. Une liste d'erreurs (checklist) inspecter doit tre prte. Avoir l'acceptation de la hirarchie pour le cot supplmentaire au stade prcoce du dveloppement. Ne pas utiliser l'occasion pour valuer le personnel.
Processus d'inspection
1. Planification (moment, participants, code) 2. Amorage (distribution des tches) 3. Prparation individuelle 4. Runion d'inspection 5. Conclusions et traitement des rsultats 6. Suivi des conclusions
Procdure d'inspection
Prsentation du systme inspecter aux Insp. Distribution du code et des documents aux Insp. Inspection avec enregistrement des dfauts trouvs. Modification du code pour corriger les dfauts. Re-inspection pour s'assurer des rsultats (non-obligatoire).
Participants
Le programmeur responsable produire le code et les documents ncessaires son inspection. Il est aussi responsable corriger les dfauts trouvs lors de l'inspection.
Inspecteur
Trouve des dfaut, anomalies, omissions, inconsistances dans le code et/ou le document; peut mme attaquer des choix de conception.
Lecteur
Secrtaire de sance
Gre la runion et fait un rapport la hirarchie; amliore le processus d'inspection, les listes d'erreurs et les standards de codage.
Checklist
Liste des erreurs les plus communes surveiller pendant l'inspection. Les dfauts rpertoris dpendent du langage de programmation utilis. Plus le typage est faible, plus longue sera la liste. Exemples: initialisation mauvaise/absente des variables, nommage incorrect des constantes, terminaison de boucle, etc.
Exemples de checklist
Erreurs de donnes
Toutes les variables sont initialises avant utilisation? Toutes les constantes utilises sont nommes? La taille des tableaux est Size ou Size-1? Les chanes de caractres ont un caractre de fin? Les tampons peuvent dborder?
Erreurs de contrle
Les conditions des IF sont correctes? Toute boucle termine? Les expressions/instructions composes sont correctement parenthses? Tous les case sont traits dans un CASE? Le break est prsent?
Exemple de checklist
Erreurs d'entre/sortie
Tous les variables d'entre sont utilises? Toutes les variables de sortie sont initialises avant la sortie? Les valeurs d'entre non prvues peuvent corrompre le systme?
Erreurs d'interface
Tous les appels de mthode/fonction ont le nombre correct de paramtres? Les paramtres actuels et formels ont la mme smantique? Les paramtres sont dans le bon ordre?
Le changement d'une structure modifie correctement les liens? La mmoire dynamique est bien alloue et initialise? Est-elle libre?
Performances de l'inspection
En vitesse:
Cot trs lev: 40h*homme pour 500 lignes Mais trs efficace et flexible: 80% des erreurs en moyenne pour tout type de code.
N'impose pas que le code soit excutable et peut s'appliquer sur une partie du code. Base sur des heuristiques/approximations sres (mais pas exactes), ses rsultats doivent tre interprts car prsence des faux positifs . Une aide importante pour les inspecteurs, mais ne remplace pas compltement l'inspection de code. Techniques utilises dans les compilateurs. Moins efficace pour les langages structurs/fortement typs (par exemple Java).
Exemples d'analyses
Dfauts de donnes:
Dfauts I/0
Variables utilises avant initialisation Variables dclares mais pas utilises Variable non lue entre deux affectations Violation des bornes de reprsentation Division par 0
Dfauts d'interface
Paramtres en mauvais nombre/type Rsultat de fonction non utilis Fonctions non utilises
Dfauts de contrle
Analyse du flot de contrle: code mort, boucles avec points d'entre/sortie complexes Analyse d'utilisation des donnes: utilisation de variables, conditions de test redondantes ou inutilises, etc. Analyse d'interfaces: conformit entre dclaration et utilisation de procdures. Analyse du flot d'information: calcule les relations entre les variables d'entre et de sortie. Analyse de chemins: identifie tous les chemins d'excution possibles et leurs instructions. Voir cours en M2
Exemples d'outils
Lint ou Splint pour C Jlint pour Java Py-lint pour Python etc.
Preuve Model-checking
Raliser une spcification formelle demande une analyse approfondie du systme ce qui peut rvler des dfauts, incohrences, etc. Aide l'inspection de code. Permet une gnration de code/test/certification automatise. Exemple: Cleanroom
Demande des notations/maths qui ne sont pas comprises par les experts du domaine. Trs coteux (experts) pour produire une spcification formelle et encore plus pour prouver que l'implmentation satisfait la spc. On peut atteindre le mme niveau de confidence en utilisant des techniques de V&V moins coteuses.
Conclusion
Gnie logiciel
Travail important mais difficile car... il n'existe pas UNE solution gnrale... mais un ensemble de principes, techniques et outils... qui volue en permanence avec les nouveaux types de logiciel. Demande de la rigueur, de l'abstraction, des connaissances approfondies en programmation et maths, des facilits d'criture et expression.
Projet
au secrtariat de l'UFR (papier) ou par mail Cahier de charges: prendre en compte les commentaires faits au premier rendu. Spcification formelle: B ou ADT Design: diagrammes UML Plan de test avec suites de test d'acceptation, d'intgration, de fonctionnement.
Contenu du rendu: