Software Test and Analysis in a Nutshell
Transcription
Software Test and Analysis in a Nutshell
IGL601 – Hiver 2015 Tests combinatoires Libre adaptation du chapitre 11 de manuel ‘Software Testing And Analysis’ par Pezzè and Young Jonathan Guay Département d’informatique Faculté des sciences [email protected] http://igl601-jg.espaceweb.usherbrooke.ca/ Objectifs d’apprentissage Comprendre le but et l’approche systématique aux tests combinatoires Apprendre à appliquer certaines approches combinatoires. Tests patitionnels à l’aide de catégories (Category-partition testing) Tests combinatoires par paires (Pairwise combination testing) Tests basé sur un catalogue (Catalog-based testing) (bref survol) Comprendre les différences et similitudes de ces approches. et leur domaines d’application Test combinatoire: l’idée Identifier des attributs distincts qui peuvent varier. Parmi les données, l’environnement ou la configuration Exemple: navigateur “IE” ou “Firefox”, OS “Vista”, “XP”, ou “OSX” Générer systématiquement les combinaisons à être testées. Exemple: IE et Vista, IE et XP, Firefox et Vista, Firefox et OSX, ... Explication: Les cas de test doivent être variés et doivent inclure les cas limites Approches combinatoires clés Tests paritionnels basés sur la catégorie (Categorypartition testing) Sépare l’identification (manuelle) des valeurs qui caractérisent les entrées possibles de tests DE la génération (automatique) des combinaisons pour les cas de tests. Tests par paires (Pairwise testing) Test de manière systématique les interactions entre les attributs de l’espace des valeurs d’entrées possibles avec un nombre restreint de cas de tests. Tests basés sur un catalogue (Catalog-based testing) Tient compte de l’expérience du designer de tests dans un domaine d’application pour aider à identifier les valeurs des attributs. Partition par catégorie (étapes manuelles) 1. Décompose les spécifications en caractéristiques testables – – 2. • paramètres • les éléments de l’environnement pour chaque paramètre et élément de l’environnement identifier les catégories Identifier les valeurs utiles – 3. pour chaque caractéristique identifier pour chaque catégorie, identifier la classe de valeurs • valeurs normales • valeurs aux limites • valeurs spéciales • valeurs d’erreurs Introduire les contraintes Exemple Considérer un système qui permet à un internaute de ‘construire son ordinateur’ à l’aide d’une multitude d’options (choix du modèle, de la carte vidéo, du OS, de la mémoire, etc). Les prochaines diapositives décrivent comment appliquer les tests combinatoires par catégorie à un programme qui vérifie les combinaisons possibles de composantes. An informal specification: check configuration Check Configuration Check the validity of a computer configuration The parameters of check-configuration are: Model Set of components (c) 2007 Mauro Pezzè & Michal Young An informal specification: parameter model Model A model identifies a specific product and determines a set of constraints on available components. Models are characterized by logical slots for components, which may or may not be implemented by physical slots on a bus. Slots may be required or optional. Required slots must be assigned with a suitable component to obtain a legal configuration, while optional slots may be left empty or filled depending on the customers' needs Example: The required “slots” of the Chipmunk C20 laptop computer include a screen, a processor, a hard disk, memory, and an operating system. (Of these, only the hard disk and memory are implemented using actual hardware slots on a bus.) The optional slots include external storage devices such as a CD/DVD writer. (c) 2007 Mauro Pezzè & Michal Young An informal specification of parameter set of components Set of Components A set of (slot, component) pairs, corresponding to the required and optional slots of the model. A component is a choice that can be varied within a model, and which is not designed to be replaced by the end user. Available components and a default for each slot is determined by the model. The special value empty is allowed (and may be the default selection) for optional slots. In addition to being compatible or incompatible with a particular model and slot, individual components may be compatible or incompatible with each other. Example: The default configuration of the Chipmunk C20 includes 20 gigabytes of hard disk; 30 and 40 gigabyte disks are also available. (Since the hard disk is a required slot, empty is not an allowed choice.) The default operating system is RodentOS 3.2, personal edition, but RodentOS 3.2 mobile server edition may also be selected. The mobile server edition requires at least 30 gigabytes of hard disk. (c) 2007 Mauro Pezzè & Michal Young Étape 1: Identifier les unités et catégories pouvant être testées de manière indépendante Choix des catégories pas de règles strictes et rapides pas simple! Les catégories reflètent le jugement du designer de tests classes de valeurs pouvant être traitées de manières différentes par une implémentation Le bon choix des catégories requirent de l’expérience et des connaissances du domaine d’application et de l’architecture du produit. Le designer de test doit être capable de lire entre les lignes des spécifications et en déduire les caractéristiques cachées Step 1: Identify independently testable units Parameter Model Model number Number of required slots for selected model (#SMRS) Number of optional slots for selected model (#SMOS) Parameter Components Correspondence of selection with model slots Number of required components with selection empty Required component selection Number of optional components with selection empty Optional component selection Environment element: Product database Number of models in database (#DBM) Number of components in database (#DBC) (c) 2007 Mauro Pezzè & Michal Young Étape 2: Identifier les valeurs pertinentes Identifier (lister) les classes de valeurs représentatives pour à chaque catégorie Ignorer les interactions entre les valeurs de différentes catégories (considéré à la prochaine étape) Les valeurs représentatives peuvent être identifiées en appliquant Tests au limites Sélectionner les valeurs extrêmes d’une classe Sélectionner les valeurs tout juste à l’extérieur d’une classe. Sélectionner les valeurs typiques à l’intérieur de la classe Conditions de tests erronées Sélectionner les valeurs à l’extérieur du domaine d’application normal du programme. Step 2: Identify relevant values: Model Model number Malformed Not in database Valid Number of required slots for selected model (#SMRS) 0 1 Many Number of optional slots for selected model (#SMOS) 0 1 Many (c) 2007 Mauro Pezzè & Michal Young Step 2: Identify relevant values: Component Correspondence of selection with model slots Omitted slots Number of optional components with non empty selection Extra slots 0 Mismatched slots < #SMOS Complete correspondence = #SMOS Number of required components with non empty selection 0 < number required slots = number required slots Required component selection Some defaults All valid 1 incompatible with slots 1 incompatible with another selection 1 incompatible with model 1 not in database (c) 2007 Mauro Pezzè & Michal Young Optional component selection Some defaults All valid 1 incompatible with slots 1 incompatible with another selection 1 incompatible with model 1 not in database Step 2: Identify relevant values: Database Number of models in database (#DBM) 0 1 Many Number of components in database (#DBC) 0 1 Many Note 0 and 1 are unusual (special) values. They might cause unanticipated behavior alone or in combination with particular values of other parameters. (c) 2007 Mauro Pezzè & Michal Young Étape 3: Introduire les contraintes Une combinaison de valeurs pour chaque catégorie correspond à une spécification de cas de test Dans l’exemple, nous havons 314 928 cas de tests Plusieurs sont impossibles! exemple zero slots et least one incompatible slot Introduire les contraintes pour Exclure les combinaisons impossibles Réduire la taille de la suite de tests (lorsque trop grande) Étape 3: la contrainte ‘erreur’ [error] indique une valeur d’une classe qui correspond à des valeurs erronées a besoin d’être testée une seule fois. Example Model number: Malformed and Not in database error value classes No need to test all possible combinations of errors One test is enough (we assume that handling an error case bypasses other program logic) Example - Step 3: error constraint Model number Malformed Not in database Valid [error] [error] Correspondence of selection with model slots Omitted slots [error] Extra slots [error] Mismatched slots [error] Complete correspondence Number of required comp. with non empty selection 0 [error] < number of required slots [error] Required comp. selection 1 not in database [error] Number of models in database (#DBM) 0 [error] Number of components in database (#DBC) 0 [error] (c) 2007 Mauro Pezzè & Michal Young Error constraints reduce test suite from 314 928 to 2 711 test cases Step 3: property constraints constraint [property] [if-property] rule out invalid combinations of values [property] groups values of a single parameter to identify subsets of values with common properties [if-property] bounds the choices of values for a category that can be combined with a particular value selected for a different category Example combine Number of required comp. with non empty selection = number required slots [if RSMANY] only with Number of required slots for selected model (#SMRS) = Many (c) 2007 Mauro Pezzè & Michal Young [Many] Example - Step 3: property constraints Number of required slots for selected model (#SMRS) 1 [property RSNE] Many [property RSNE] [property RSMANY] Number of optional slots for selected model (#SMOS) 1 [property OSNE] Many [property OSNE] [property OSMANY] Number of required comp. with non empty selection 0 [if RSNE] [error] < number required slots [if RSNE] [error] = number required slots [if RSMANY] Number of optional comp. with non empty selection < number required slots [if OSNE] = number required slots [if OSMANY] (c) 2007 Mauro Pezzè & Michal Young from 2 711 to 908 test cases Step 3 (cont): single constraints [single] indicates a value class that test designers choose to test only once to reduce the number of test cases Example value some default for required component selection and optional component selection may be tested only once despite not being an erroneous condition note - single and error have the same effect but differ in rationale. Keeping them distinct is important for documentation and regression testing (c) 2007 Mauro Pezzè & Michal Young Example - Step 3: single constraints Number of required slots for selected model (#SMRS) 0 [single] 1 [property RSNE] [single] Number of optional slots for selected model (#SMOS) 0 [single] 1 [single] [property OSNE] Required component selection Some default [single] Optional component selection Some default [single] Number of models in database (#DBM) 1 [single] Number of components in database (#DBC) 1 [single] (c) 2007 Mauro Pezzè & Michal Young from 908 to 69 test cases Check configuration – Summary Parameter Model Model number Parameter Component Correspondence of selection with model slots Malformed [error] Not in database [error] Valid Number of required slots for selected model (#SMRS) 0 1 Many [single] [property RSNE] [single] [property RSNE] [property RSMANY] 0 1 Many [single] [property OSNE] [single] [property OSNE] [property OSMANY] Number of optional slots for selected model (#SMOS) Environment Product data base Number of models in database (#DBM) 0 1 Many [error] [single] 0 1 Many [error] [single] Number of components in database (#DBC) (c) 2007 Mauro Pezzè & Michal Young Omitted slots [error] Extra slots [error] Mismatched slots [error] Complete correspondence # of required components (selection empty) 0 [if RSNE] [error] < number required slots [if RSNE] [error] = number required slots [if RSMANY] Required component selection Some defaults [single] All valid 1 incompatible with slots 1 incompatible with another selection 1 incompatible with model 1 not in database [error] # of optional components (selection empty) 0 < #SMOS = #SMOS [if OSNE] [if OSMANY] Optional component selection Some defaults [single] All valid 1 incompatible with slots 1 incompatible with another selection 1 incompatible with model 1 not in database [error] Ensuite ... Tests partitionnels par catégorie nous donne Une approche systématique: Identifier les caractéristiques et valeurs (étape créative), générer les combinaisons (étape mécanique) Mais ... La suite de test grossis très rapidement avec le nombre de catégories. Pouvons-nous utiliser une approche non exhaustive? Tests par paires (triples, etc…) Combine les valeurs de manières systématiques mais non exhaustives Explication: La plupart des interaction non planifiées le sont en combinant 2 ou quelques paramètres ou caractéristiques Tests combinatoires par paire Le partitionnement par catégorie fonctionne bien lorsque des contraintes intuitives nous permettent de réduire significativement le nombre de cas de tests Sans ces contraintes, le nombre de combinaisons à tester n’est pas gérable. Combinaison par paire (au lieu des tests exhaustifs) Générer les combinaisons qui couvrent de manière efficace toutes les paires (triples, …) de classes Explication: la plupart des fautes sont révélées par une valeur unique ou une combinaisons de quelques valeurs. En couvrant principalement les paires (triples,…) on réduit le nombre de cas de tests mais on révèlent la plupart des fautes. Example: Display Control No constraints reduce the total number of combinations 432 (3x4x3x4x3) test cases if we consider all combinations Display Mode Language Fonts Color full-graphics English Minimal Monochrome Hand-held text-only French Standard Color-map Laptop limitedbandwidth Spanish Documentloaded 16-bit Full-size Portuguese (c) 2007 Mauro Pezzè & Michal Young Screen size True-color Ch 11, slide 26 Pairwise combinations: 17 test cases Language Color Display Mode Fonts Screen Size English Monochrome Full-graphics Minimal Hand-held English Color-map Text-only Standard Full-size English 16-bit Limited-bandwidth - Full-size English True-color Text-only Document-loaded Laptop French Monochrome Limited-bandwidth Standard Laptop French Color-map Full-graphics Document-loaded Full-size French 16-bit Text-only Minimal - French True-color - - Hand-held Spanish Monochrome - Document-loaded Full-size Spanish Color-map Limited-bandwidth Minimal Hand-held Spanish 16-bit Full-graphics Standard Laptop Spanish True-color Text-only - Hand-held Portuguese - - Monochrome Text-only Portuguese Color-map - Minimal Laptop Portuguese 16-bit Limited-bandwidth Document-loaded Hand-held Portuguese True-color Full-graphics Minimal Full-size Limited-bandwidth Standard Portuguese True-color (c) 2007 Mauro Pezzè & Michal Young Hand-held Ch 11, slide 27 Ajouter les contraintes Contraintes simples example: color monochrome not compatible with screen laptop and full size can be handled by considering the case in separate tables (c) 2007 Mauro Pezzè & Michal Young Example: Monochrome only with handheld Display Mode Language Fonts Color Screen size full-graphics English Minimal Monochrome Hand-held text-only French Standard Color-map limitedbandwidth Spanish Documentloaded 16-bit Portuguese True-color Display Mode Language Fonts Color Screen size full-graphics English Minimal text-only French Standard Color-map Laptop limitedbandwidth Spanish Documentloaded 16-bit Full-size Portuguese (c) 2007 Mauro Pezzè & Michal Young True-color Ensuite ... L’approche partitionnelle par catégorie nous donne … La séparation manuelle entre l’identification des caractéristiques des paramètres et leurs valeurs et la génération de cas de tests automatiques qui les combine. Contraintes pour réduire le nombre de combinaisons Les tests par paires (triples, …) nous donnent ... Des jeux de test beaucoup plus petit, même sans contraintes (mais nous pouvons toujours utiliser des contraintes) Nous avons toujours besoin ... D’aide pour rendre l’étape manuelle plus systématique Tests basés sur un catalogue L’élaboration des classes de valeurs requiert un jugement Obtenir de l’expérience dans une collection systématique peut : Accélérer le processus de conception des tests Systématiser plusieurs décisions de routines, ou mieux diriger l’effort des ressources humaines Accélérer la formation et réduire les erreurs humaines Les catalogues capturent l’expérience des designers de tests en listant les cas important pour chaque type de variables possibles. Exemple: Si un calcul utilise un entier, un catalogue peut indiquer les cas pertinents suivants L’élément immédiatement avant la limite inférieure L’élément de la limite intérieure Un élément à l’intérieur des limites L’élément de la limite supérieure L’élément immédiatement après la limite supérieure Processus de test basé sur un catalogue Étape 1: Analyse initiale des spécifications pour identifier les éléments de bases: Préconditions Poste-conditions Définitions Variables Opérations Étape 2: Dériver un premier cas de spécification de test des préconditions, poste-conditions et définitions. Étape 3: Compléter le jeu de spécification de test à l’aide de catalogue. Exemple d’un catalogue simple (partie 1) Boolean True in/out False in/out Enumeration Each enumerated value in/out Some value outside the enumerated set in Range L ... U L-1 in L in/out A value between L and U in/out U in/out U+1 in Numeric Constant C C in/out C –1 in C+1 in Any other constant compatible with C (c) 2007 Mauro Pezzè & Michal Young in Exemple d’un catalogue simple (partie 1) Non-Numeric Constant C in/out C Any other constant compatible with C in Some other compatible value in Sequence Empty in/out A single element in/out More than one element in/out Maximum length (if bounded) or very long in/out Longer than maximum length (if bounded) in Incorrectly terminated in Scan with action on elements P P occurs at beginning of sequence in P occurs in interior of sequence in P occurs at end of sequence in PP occurs contiguously in P does not occur in sequence pP where p is a proper prefix of P in in Proper prefix p occurs at end of sequence (c) 2007 Mauro Pezzè & Michal Young in Qu’avons nous? Test partitionnel par catégorie: Une étape manuelle d’identification des categories et des valeurs, avec les contraintes, et une étape automatique de génération les combinaisons. Test basé sur des catalogues: Améliore l’étape manuelle en utilisant des patrons standards pour l’identification de valeurs pertinentes Test par paires: Génération systématique de jeux de tests plus petits Ces idées peuvent être combinées Sommaire Typiquement, les spécifications de requis sont initialement élaborées à l’aide de phrase simples en langage naturel L’expression et la flexibilité d’un langage naturel sont des obstacles à l’analyse automatisée. Les approches combinatoires aux tests fonctionnels consistent à : Une étape manuelle de structuration des spécifications en jeu de propriétés Une étape automatisable du choix des combinaisons La synthèse des cas de tests en employant ‘la force brute’ est difficile et source d’erreur Les approches combinatoires remplacent le travail fait par ‘la force brute’ en étapes incrémentales en séparant les activités d’analyse et de synthèse pouvant être quantifiées et surveillées, et supportées en partie par des outils.