Méthodologies de test de logiciels expliquées
Méthodologies de test de logiciels expliquées
Unité I
Introduction
Qu'est-ce que le test ?
Termes associés : SQA, QC, Vérification, Validation
Vérification de la fonctionnalité pour la conformité par rapport aux spécifications données
Par l'exécution de l'application logicielle
Un test
Passes : Fonctionnalité OK.
Échecs : Fonctionnalité de l'application NOK.
Bug/Défaut/Faute : Écart par rapport à la fonctionnalité attendue.
Ce n'est pas toujours évident.
Objectif du test
1. Pour attraper les insectes
• Les bugs sont dus à une communication imparfaite entre les programmeurs
• Spécifications, conception, fonctionnalités de bas niveau
• Les statistiques disent : environ 3 bugs / 100 déclarations
2. Raisons liées à la productivité
• Efforts insuffisants en matière d'assurance qualité => Taux de rejet élevé =>
Reprises plus importantes => Coûts nets plus élevés
• Statistiques:
• Coûts d’assurance qualité : 2% pour les produits de consommation
80 % pour les logiciels critiques
• Qualité > Productivité
3. Objectifs des tests
Objectif principal des tests : prévention des bugs
Bug évité ^ l'effort de retravail est économisé [rapport de bug, débogage, correction,
nouveau test]
Si cela n’est pas possible, les tests doivent atteindre leur objectif secondaire de découverte de
bourgeons.
Bonne conception de test et tests ^ diagnostic clair ^ correction facile des bugs
Testez la pensée conceptuelle
À partir des spécifications, écrivez les spécifications de test. D'abord et ensuite le code.
Élimine les bugs à chaque étape du SDLC.
Si cela échoue, des tests permettent de détecter les bugs restants.
4. 5 phases dans la réflexion du testeur
Phase 0 : indique qu'il n'y a aucune différence entre le débogage et les tests
> Aujourd’hui, c’est un obstacle à la réalisation de tests de qualité et à la création de
logiciels de qualité.
Phase 1 : les tests visent à montrer que le logiciel fonctionne
> Un test échoué montre que le logiciel ne fonctionne pas, même si de nombreux tests
réussissent.
> Objectif non atteignable.
Phase 2 : indique que le logiciel ne fonctionne pas
> Un test raté le prouve.
> Les tests doivent être repensés pour tester les logiciels corrigés.
> Mais nous ne savons pas quand arrêter de tester.
Phase 3 : dit Test de réduction des risques
> Nous appliquons les principes du contrôle de qualité statistique.
> Notre perception de la qualité du logiciel change lorsqu’un test réussit ou échoue.
> Par conséquent, la perception du risque lié au produit diminue.
> Libérer le produit lorsque le risque est inférieur à une limite prédéterminée.
Phase 4 : Un état d’esprit concernant « ce que les tests peuvent faire et ne peuvent pas faire ». « Qu’est-ce qui
rend un logiciel testable ».
> L’application de ces connaissances réduit la quantité de tests.
> Les logiciels testables réduisent les efforts
> Les logiciels testables ont moins de bugs que le code difficile à tester
Objectif cumulé de toutes ces phases :
> Cumulatif et complémentaire. L'un mène à l'autre.
> Les tests de la phase 2 à eux seuls ne montreront pas que le logiciel fonctionne
> Utilisation de méthodes statistiques pour tester la conception afin de réaliser de bons
tests à des risques acceptables.
> La plupart des logiciels testables doivent être débogués, doivent fonctionner et doivent
être difficiles à casser.
5. Tests et inspections
1. L'inspection est également appelée test statique.
2. Les méthodes et les objectifs des tests et de l’inspection sont différents, mais l’objectif est de
détecter et de prévenir différents types de bogues.
3. Pour prévenir et attraper la plupart des bugs, nous devons
1. Revoir
2. Inspecter et
3. Lire le code
4. Effectuer des visites guidées du code
Quelques points importants :
Conception des tests Après les tests et les corrections, repensez les tests et testez les tests repensés
Prévention des bugs
Mélange de différentes approches, en fonction des facteurs
culture, environnement de développement, application, taille du projet, histoire, langue
Méthodes d'inspection
Style de conception
Analyse statique
Langues – avoir une syntaxe forte, une vérification de chemin et d’autres contrôles
Méthodologies de conception et environnement de développement
Il vaut mieux savoir :
Paradoxe des pesticides
Barrière de complexité
Dichotomies
division en deux groupes ou entités particulièrement mutuellement exclusifs ou contradictoires la dichotomie entre
théorie et pratique
Examinons-en six :
1. Test et débogage
2. Tests fonctionnels et structurels
3. Concepteur vs testeur
4. Modularité (conception) vs efficacité
5. Programmation en SMALL Vs programmation en BIG
6. Acheteur vs constructeur
Tests et débogage
1. Les tests servent à trouver des bugs.
2. Le débogage consiste à trouver la cause ou l’idée fausse menant au bogue.
3. Leurs rôles sont confondus pour être les mêmes. Mais il existe des différences dans les
objectifs, les méthodes et
psychologie appliquée à ces
# Essai Débogage
1 Commence par des conditions connues. Utilise Commence avec des conditions initiales
une procédure prédéfinie. A des résultats potentiellement inconnues. La fin ne peut
prévisibles. être prédite.
2 Planifié, conçu et programmé. Les procédures et la durée ne sont pas
limitées.
3 Une démonstration d’une erreur ou d’une Un processus déductif.
exactitude
4 Prouve apparente.
le succès ou l’échec du programmeur. C'est la justification du programmeur.
5 Cela devrait être prévisible, ennuyeux, Il y a des sauts intuitifs, des conjectures, de
contraint, rigide et inhumain. l'expérimentation et de la liberté.
6 Une grande partie des tests peut être effectuée Impossible sans une connaissance détaillée
sans connaissances en conception. du design.
7 Peut être réalisé par une personne extérieure à Doit être effectué par un initié (équipe de
l’équipe de développement. développement).
8 Une théorie établit ce que les tests peuvent faire Il n'y a que des résultats rudimentaires (sur
ou ne pas faire. ce qui peut être fait). Le temps, l’effort, la
manière, etc. dépendent des capacités
humaines. – L’automatisation est un rêve.
9 L’exécution et la conception des tests peuvent Débogage
être automatisées.
Exemples :
Pour un modèle de programmes donné, les tests structurels peuvent être effectués en premier,
puis les tests fonctionnels, ou vice-versa. Le choix dépend de ce qui semble être le choix
naturel.
Les deux sont utiles, ont des limites et ciblent différents types de bugs. Les tests fonctionnels
peuvent en principe détecter tous les bugs, mais prendraient un temps infini. Les tests
structurels sont intrinsèquement finis, mais ne peuvent pas détecter tous les bugs.
L'art des tests consiste à déterminer quel pourcentage d'allocation est destiné à la structure par
rapport au pourcentage destiné au fonctionnement.
Concepteur vs testeur
Complètement séparé dans les tests de boîte noire. Les tests unitaires peuvent être effectués par
l'un ou l'autre.
L’art des tests consiste à équilibrer la connaissance de la conception et de ses préjugés avec
l’ignorance et les inefficacités.
Les tests sont plus efficaces si le concepteur, le programmeur et le testeur sont indépendants
dans tous les tests unitaires, d'intégration d'unité, de composant, d'intégration de composant, de
système et de fonctionnalités formelles du système. La mesure dans laquelle le concepteur de
test et le programmeur sont séparés ou liés dépend du niveau de test et du contexte.
3. Un module (composant discret bien défini d'un système) est constitué d'une complexité interne
et d'une complexité d'interface et a une taille.
# Modularité Efficacité
1 Plus le composant est petit, plus il est Implique un plus grand nombre de composants et
facile à comprendre. donc un plus grand nombre d'interfaces, ce qui
augmente la complexité et réduit l'efficacité (=>
plus de bugs probables)
2 Les petits composants/modules sont
répétables indépendamment avec moins de Efficacité supérieure au niveau du module,
retouches (pour vérifier si un bug est lorsqu'un bug survient avec de petits composants.
3 corrigé).
Les cas de test microscopiques nécessitent Un nombre plus élevé de cas de test implique une
des configurations individuelles avec des plus grande possibilité de bugs dans les cas de
données, des systèmes et le logiciel. Il test. Cela implique plus de retouches et donc
peut donc y avoir des bugs. moins d'efficacité avec des cas de test
microscopiques
4 Il est plus facile de concevoir de grands Moins complexe et efficace. (La conception peut
modules et des interfaces plus petites à un ne pas être suffisante pour comprendre et mettre
niveau supérieur. en œuvre. Il faudra peut-être le décomposer au
niveau de la mise en œuvre.)
Programmation en SMALL Vs programmation en BIG
Impact sur l'environnement de développement en raison du volume des exigences des clients
# Petit Grand
1 Cela se fait plus efficacement par des moyens Un grand nombre de programmeurs et un
informels, intuitifs et sans formalité – grand nombre de composants.
si cela est fait par 1 ou 2 personnes pour une
population d'utilisateurs petite et intelligente.
2 La taille du programme implique des effets
Fait pour par exemple, pour soi-même, pour son
non linéaires (sur la complexité, les bugs,
bureau ou pour l'institut.
l’effort, la qualité des retouches).
3 La couverture complète des tests est facilement Le niveau d'acceptation pourrait être : une
réalisable. couverture de test de 100 % pour les tests
unitaires et pour les tests globaux ≥ 80 %.
Des étapes importantes peuvent être franchies, mais la date de livraison est respectée.
Problèmes d’intégration, avec certains matériels, refonte de certains composants etc…..
f. Séquence de tests :
Tests unitaires/composants pour A, B. Tests d'intégration pour A et B. Tests de
composants
des critères pour
de validation de données incohérents et une gestion incohérente des objets
de données.
d. Les tests d'intégration et les tests d'objets intégrés sont différents
Composante (A,B)
3) Tests du système
■ Utilisé pour le processus de test jusqu'à ce que le comportement du système soit correct ou
jusqu'à ce que le modèle soit insuffisant (pour les tests).
■ Des résultats inattendus peuvent forcer une révision du modèle.
■ L'art du test consiste à créer, sélectionner, explorer et réviser des modèles.
■ Le modèle doit pouvoir exprimer le programme.
Conséquences des bugs
Attribution de la gravité
• Attribuez des valeurs flexibles et relatives plutôt qu'absolues au bogue (types).
• Le nombre de bugs et leur gravité sont des facteurs qui déterminent quantitativement la qualité.
• Les organisations conçoivent et utilisent des mesures quantitatives et de qualité basées sur les éléments
ci-dessus.
• Les pièces sont pondérées en fonction de l'environnement, de l'application, de la culture, du coût de
correction, de la phase SDLC actuelle et d'autres facteurs.
• Cauchemars
• Définir les cauchemars – qui pourraient survenir à cause des bugs – dans le contexte de
l’organisation/de l’application.
• Les cauchemars quantifiés aident à calculer l’importance des bugs.
• Cela aide à prendre une décision sur le moment où arrêter les tests et publier le produit.
Quand arrêter les tests
1. Énumérez tous les cauchemars en fonction des symptômes et des réactions de l’utilisateur à leurs
conséquences.
2. Convertir les conséquences en un coût. Il pourrait y avoir des coûts de reprise (mais si la portée
s’étend au public, il pourrait y avoir des coûts de poursuites judiciaires, des pertes commerciales, des
fusions de réacteurs nucléaires).
3. Commandez-les du plus cher au moins cher. Jetez ceux avec lesquels vous pouvez vivre.
4. Sur la base de l'expérience, des données mesurées, de l'intuition et des statistiques publiées, on postule
le type de bugs à l'origine de chaque symptôme. C'est ce qu'on appelle le « processus de conception
des bugs ». Un type de bogue peut provoquer plusieurs symptômes.
5. Classez les bugs responsables par probabilité décroissante (jugée par l'intuition, l'expérience, les
statistiques, etc.). Calculez l'importance d'un type de bug comme :
■ Aussi courant que dans le code, en particulier lorsque le code migre vers les données.
■ Le bogue de données introduit un bogue d'instruction opérationnelle et est plus difficile à
trouver.
■ Composants généralisés avec réutilisabilité – lors de la personnalisation à partir de données
paramétriques volumineuses vers une installation spécifique.
Remèdes (prévention et correction) :
■ L'utilisation de tables de contrôle au lieu de code permet au logiciel de gérer de nombreux
types de transactions avec moins de bogues de données. Les tables de contrôle ont un langage
de programmation caché dans la base de données.
Attention - il n'y a pas de compilateur pour le langage de contrôle caché dans les tables de
données
II. Données dynamiques vs données statiques
Bogues de données dynamiques Bugs de données statiques
Transitoire. Difficile à attraper. Fixé dans la forme et le contenu.
En raison d'une erreur dans l'initialisation d'un objet de Apparaître dans le code source ou la base de données,
stockage partagé. directement ou indirectement
En raison de déchets impurs/restants dans une ressource Un logiciel de production de code objet crée une table de
partagée. données statique – des bugs sont possibles
Exemples Exemples
Variable générique et partagée Logiciel système de télécommunication : paramètres
génériques, un grand programme générique et un
programme adaptateur de site pour définir les valeurs des
paramètres,
Postprocesseurcréer des déclarations
: pour installer des de données,
packages etc.
logiciels.
Structure de données partagée
Les données
initialisé sont
au moment de l'exécution – avec une
configuration gérée par des tables.
Prévention Prévention
Validation des données, tests unitaires Traitement du temps de compilation Fonctionnalités du
langage source
III. Bugs d'information, de paramètres et de contrôle
Les données statiques ou dynamiques peuvent se présenter sous l’une des trois formes. C'est une
question de perspective.
Ce qui est information peut être un paramètre de données ou des données de contrôle ailleurs dans un
programme.
Exemples : nom, code de hachage, fonction les utilisant. Une variable dans différents contextes.
> Information : dynamique, locale à une transaction ou tâche unique.
> Paramètre : paramètres passés à un appel.
> Contrôle : données utilisées dans une structure de contrôle pour une décision.
Insectes
> Des bugs généralement simples et faciles à attraper.
> Lorsqu'une sous-routine (avec un bon code de validation des données) est modifiée, l'oubli de
mettre à jour le code de validation des données entraîne ces bogues.
Mesures préventives (prévention et correction)
> Code de validation des données approprié.
IV . Bugs liés au contenu, à la structure et aux attributs
■ Contenu : il s'agit de modèles de bits purs et les bugs sont dus à une mauvaise
interprétation ou à une corruption de ceux-ci.
■ Structure : taille, forme et alignement de l'objet de données en mémoire. Une structure
❖ Bugs : timing invalide, hypothèses de séquence liées à des signaux externes, mauvaise compréhension des
formats externes
et aucun codage robuste.
❖ Les tests de domaine, les tests de syntaxe et les tests d'état sont adaptés aux tests d'interfaces externes.
b) Interfaces internes
❖ Doit s'adapter à l'interface externe.
❖ Avoir des bugs similaires à l'interface externe
❖ Bugs provenant d'une mauvaise utilisation
❖ Conception de protocole, formats d'entrée-sortie, protection contre les données corrompues, séquence
d'appel de sous-routine, appel-
paramètres.
Remèdes (prévention et correction) :
❖ Méthodes de test de domaine et de test de syntaxe.
❖ Bonne conception et normes : bon compromis entre le nombre d'interfaces internes et la complexité de
l'interface.
❖ Un bon test d’intégration consiste à tester toutes les interfaces internes avec le monde extérieur.
c) Bugs d'architecture matérielle :
❖ Un programmeur logiciel peut ne pas voir la couche matérielle / l'architecture.
❖ Les bugs logiciels provenant de l'architecture matérielle sont dus à une mauvaise compréhension du
fonctionnement du matériel.
❖ Les bugs sont dus à des erreurs dans :
V Mécanisme de pagination, génération d'adresses
Instructions du périphérique VI/O, code d'état du périphérique, protocole du périphérique
V S'attendre à ce qu'un périphérique réponde trop rapidement ou attendre trop longtemps une réponse,
en supposant qu'un périphérique est initialisé, gestion des interruptions, adresse du périphérique
d'E/S
Hypothèse de simultanéité VH/W, condition de concurrence H/W ignorée, erreur de format de données
de périphérique, etc.
❖ Remèdes (prévention et correction) :
o Bonne programmation et tests de logiciels.
o Centralisation des logiciels d'interface H/W.
o De nos jours, le matériel dispose de modes de test et d'instructions de test spéciaux pour tester la
fonction H/W. o Un simulateur H/W élaboré peut également être utilisé.
d) Bogues du système d'exploitation :
❖ En raison de:
V Incompréhension de l'architecture matérielle et de l'interface par le système d'exploitation
macros, etc.
> Techniques d'essai
• Tests de chemin, tests de flux de transactions, tests de flux de données et tests de stress.
h) Bugs d'intégration :
Ils sont détectés tardivement dans le SDLC et provoquent des dysfonctionnements sur plusieurs
composants et sont donc très coûteux.
> En raison de:
V Incohérences ou incompatibilités entre les composants.
V Erreur dans une méthode utilisée pour transférer directement ou indirectement des données
entre des composants. Certaines méthodes de communication sont : les structures de données,
les séquences d'appel, les registres, les sémaphores, les liens de communication, les protocoles,
etc.
> Remèdes :
V Utiliser de bonnes stratégies d’intégration.
> Techniques de test
V Ceux destinés aux interfaces, aux tests de domaine, aux tests de syntaxe et aux tests de flux de
données lorsqu'ils sont appliqués à plusieurs composants.
i) Bugs système :
Peu fréquents, mais coûteux
> En raison de :
Les bogues V ne sont pas attribués à un composant particulier, mais résultent de la totalité des
interactions entre de nombreux composants tels que :
programmes, données, matériel et système d'exploitation
>Remèdes :
V Des tests approfondis à tous les niveaux et les techniques de test mentionnées ci-dessous
> Techniques d'essai
V Tests de flux de transactions.
V Tous les types de tests à tous les niveaux ainsi que les tests d'intégration sont utiles.
6. Bugs de test et de conception de test
Les bugs dans les tests (scripts ou processus) ne sont pas des bugs logiciels.
Il est difficile et prend du temps d'identifier si un bug provient du logiciel ou du script/de la procédure de test.
1) Les bugs peuvent être dus à :
> Les tests nécessitent du code qui utilise des scénarios et des bases de données complexes pour être
exécutés.
Bien qu'un test fonctionnel indépendant fournisse un point de vue impartial, ce manque de partialité peut
conduire à une interprétation incorrecte des spécifications.
> Critères de test
Le processus de test est correct, mais le critère permettant d'évaluer la réponse du logiciel aux tests
est incorrect ou impossible.
V Si un critère est quantitatif (débit ou temps de traitement), le test de mesure peut perturber la valeur
réelle.
> Remèdes :
i. Débogage des tests :
Tests et débogage de tests, scripts de test, etc. Plus simple lorsque les tests ont un effet localisé.
ii. Assurance qualité des tests :
Surveiller la qualité des tests indépendants et de la conception des tests.
iii. Automatisation de l'exécution des tests :
Les bugs d’exécution des tests sont éliminés par des outils d’automatisation de l’exécution des tests
et non par des tests manuels.
iv. Automatisation de la conception des tests :
La conception des tests est automatisée comme l’automatisation du développement de logiciels.
Bloc de processus :
Séquence VA d'instructions de programme ininterrompues par des décisions ou des jonctions avec une
seule entrée et une seule sortie.
Jonction:
Point VA dans le programme où le flux de contrôle peut fusionner (dans un nœud du graphique)
Se concentre sur les entrées, les sorties et le flux de Se concentre sur les étapes du processus à l'intérieur
contrôle entrant et sortant du bloc.
Les détails internes d'un bloc de processus ne sont pas Chaque partie du bloc de processus est dessinée
affichés
Création d'un graphe de flux de contrôle à partir d'un programme
V Traduction d'une instruction en un élément pour obtenir un organigramme classique
V Ajoutez des étiquettes supplémentaires si nécessaire
V Étapes du processus de fusion
V Une boîte de processus est impliquée à chaque jonction et décision
V Supprimer les étiquettes externes
V Représenter le contenu des éléments par des nombres.
• Nous avons maintenant des nœuds et des liens
ENTRÉE X,
ENTRÉE XY V := X - Y
YZ := X + Y
V := X - Y
SI Z >= 0 ALLER À
N := 0 Z := Z - V
JOE : Z := Z + V
SAM
SAM : Z := Z - V
POUR N = 0 À V
Z := Z - 1
SUIVANT N
FIN
Étapes du processus de
fusion
ENTRÉE X, Y
Z := X + Y
V := X - Y
SI Z >= 0 ALLER À
SAM JOE : Z := Z + V SAM :
Z := Z - V
POUR N = 0 À V
Z := Z - 1
SUIVANT N FIN
Une boîte de processus est impliquée sur chaque jonction et décision, supprimez les étiquettes
externes, représentez le contenu des éléments par des nombres.
ENTRÉE X, Y
Z := X + Y
V := X - Y
SI Z >= 0 ALLER À
SAM
JOE : Z := Z + V
SAM: Z := Z - V
POUR N = 0 À V
SUIVANT N
FIN
Notation de liste chaînée d'un graphe de flux de contrôle
Traitement des nœuds, étiquette, décision Nœud suivant
1 (DÉBUT; ENTRÉE X, Y; Z := X+Y ; V := XY) : 2
2 ( Z >= 0 ? ) : 4 (VRAI)
: 3 (FAUX)
3 (JOE : Z := Z + V) :4
4 (SAM : Z := Z – V ; N := 0) 5
5 (BOUCLE; Z := Z -1) 6
6 (N = V ?) :7 (FAUX)
: FIN (VRAI)
7 (N := N + 1) :
5
Concepts de test de chemin
1. Le chemin est une séquence d'instructions commençant à une entrée, une jonction ou une décision et se
terminant à une autre, ou éventuellement à la même jonction ou décision ou à un point de sortie.
Le lien est un processus unique (bloc) entre deux nœuds.
Un nœud est une jonction ou une décision.
Un segment est une séquence de liens. Un chemin est constitué de plusieurs segments.
Un segment de chemin est une succession de liens consécutifs appartenant au même chemin. (3,4,5)
La longueur d'un chemin est mesurée par le nombre de liens dans le chemin ou par le nombre de nœuds
traversés.
Le nom d'un chemin est l'ensemble des noms des nœuds le long du chemin. (1,2,3 4,5, 6)
(1,2,3,4, 5,6,7, 5,6,7, 5,6)
Test de chemin Le chemin est un chemin « d'entrée à sortie » à travers un bloc de traitement.
2. Entrée / Sortie pour une routine, des blocs de processus et des nœuds.
Les routines à entrée unique et à sortie unique sont préférables.
Appelées routines bien formées.
Il existe une base formelle pour les tests.
Les outils pourraient générer des cas de test.
Routines à entrées multiples / sorties multiples : (mal formées)
• Une approche faible : par conséquent, convertissez-la en une routine à entrée unique / sortie
unique.
• Problèmes d’intégration :
Grand nombre d'interfaces interprocessus. Crée des problèmes d'intégration.
Il y a plus de cas de test et un traitement formel est également plus difficile.
• Questions théoriques et outils
• Il n’existe pas de bonne base formelle.
• Les outils peuvent ne pas parvenir à générer des cas de test importants.
V Fusionner toutes les sorties en un point de sortie unique après avoir défini un
paramètre de sortie sur une valeur.
Cas
Stratégie de test pour les routines à entrées/sorties multiples
V Débarrassez-vous d'eux.
V Contrôlez ceux dont vous ne pouvez pas vous débarrasser.
V Convertir en routines d'entrée/sortie uniques.
V Effectuez des tests unitaires en traitant chaque combinaison entrée/sortie comme s’il s’agissait d’une
routine complètement différente.
V Reconnaître que les tests d’intégration sont plus lourds
V Comprendre les stratégies et les hypothèses des générateurs de tests automatiques et confirmer qu’ils
fonctionnent (ou non) pour les routines à entrées multiples/sorties multiples.
3. Critères fondamentaux de sélection du chemin
Un ensemble minimal de chemins pour pouvoir effectuer des tests complets.
V Chaque passage dans une routine, de l'entrée à la sortie, à mesure qu'on la parcourt, est un chemin potentiel.
V Ce qui précède inclut le traçage de 1 à n fois le traçage d'un bloc interactif séparément.
Remarque : un bogue pourrait rendre un chemin obligatoire non exécutable ou créer de nouveaux chemins non
liés au traitement.
Prescriptions complètes de tests de parcours :
1. Exercez-vous sur tous les chemins, de l’entrée à la sortie.
2. Exercez chaque affirmation ou instruction au moins une fois.
3. Exercez chaque branche et chaque instruction de cas dans chaque direction, au moins une fois.
♦ Point 1 => point 2 et 3. ♦ Les points 2 et 3 ne sont pas identiques
♦ Le point 1 n’est pas pratique. ♦ Pour un langage structuré, Point 3 => Point 2
Critères de test de chemin :
1. Test de chemin (Pg) :
Exécutez tous les chemins de contrôle de flux possibles à travers le programme ; mais généralement
limités aux chemins d'entrée-sortie.
Implique une couverture du chemin à 100 %. Impossible à réaliser.
2. Test d'énoncé (P1) :
Exécutez toutes les instructions du programme au moins une fois sous le même test.
100 % de couverture des déclarations => 100 % de couverture des nœuds.
Désigné par C1
C1 est une exigence de test minimale dans la norme de test unitaire IEEE : ANSI 87B.
1. Contourner la boucle.
Si vous ne pouvez pas, il y a un bug, nmin ≠ 0 ou une mauvaise casse.
2. La valeur de la variable de boucle (de contrôle) V
pourrait-elle être négative ? pourrait-elle sembler spécifier
un –ve n ?
3. Essayez un passage dans l'instruction de boucle : n = 1
4. Essayez deux passages dans l'instruction de boucle : n =
2
Pour détecter les anomalies du flux de données
d’initialisation :
Variable définie et non utilisée dans la boucle, ou initialisée dans la boucle et utilisée en
dehors de la boucle.
5. Essayez n = nombre typique d'itérations : nmin < n < nmax
6. Essayez n = nmax -1
7. Essayez n = nmax
8. Essayez n = nmax + 1.
Qu'est-ce qui empêche V (& n) d'avoir cette valeur ?
Que se passe-t-il si c'est forcé ?
Cas 2. nmin = +ve, nmax = N, aucune valeur exclue
1. Essayez nmin - 1
La valeur de la variable de boucle (de contrôle) V pourrait-elle être < nmin Qu'est-ce qui empêche
cela ?
2. Essayez nmin
3. Essayez nmin + 1
4. Une fois, sauf si couvert par un test précédent.
5. Deux fois, sauf si couvert par un test précédent.
4. Essayez n = nombre typique d'itérations : nmin < n < nmax
5. Essayez n = nmax -1
6. Essayez n = nmax
7. Essayez n = nmax + 1.
Qu'est-ce qui empêche V (& n) d'avoir cette valeur ?
Que se passe-t-il si c'est forcé ?
Cas 3. Boucle unique avec valeurs exclues
1. Traitez cela comme des boucles simples avec des valeurs exclues sous forme de deux ensembles.
2. Exemple:
V = 1 à 20 excluant 7,8,9 et 10
Les cas de test à tenter sont pour :
V = 0,1,2,4,6,7 et V = 10,11,15,19,20,21
(les majuscules soulignées ne sont pas censées fonctionner)
2. Test d'une instruction de boucle imbriquée
V Multiplier le nombre de tests pour chaque boucle imbriquée =>
très grand nombre de tests
V Une technique de sélection de test :
1. Commencez par la boucle la plus intérieure. Définissez toutes les boucles externes sur les valeurs de
paramètres d'itération minimales : Vmin.
2. Testez le Vmin, Vmin + 1, V typique, Vmax - 1, Vmax pour la boucle la plus intérieure. Maintenez les
Le processus de conception des tests à tous les niveaux est au moins aussi efficace pour détecter les
bugs que l'exécution du test conçu par ce processus.
V Techniques de test de chemin plus complexes que P1 et P2
> Entre P2 et Pα
■ Compliqué et peu pratique
> Plus faible que P1 ou P2.
■ Pour les tests de régression (incrémentiels), c'est rentable
prédicat buggé.
Correct Poussette
SI Y = 2 ALORS … SI Y = 2 ALORS ..
SI X + Y > 3 ALORS … SI X > 1 ALORS … (vérifier si X>1)
• Auto-aveuglant
• Lorsqu’un prédicat bogué est un multiple du prédicat correct et que le résultat est indiscernable le
long de ce chemin.
Correct Poussette
X := Un X := Un
SI X - 1 > 0 ALORS … SI X + A -2 > 0 ALORS … (vérifiez s'il y a un X, A)
7. Chaque chemin sélectionné génère un ensemble d’inégalités, qui doivent être satisfaites simultanément pour
forcer le chemin.
Chemins corrélés => certains chemins sont irréalisables, c'est-à-dire des chemins redondants.
variables affectées et cohérente avec les valeurs qui ont été déterminées jusqu’à présent.
5. Continuez jusqu'à l'entrée et établissez ainsi un ensemble de conditions d'entrée pour le chemin.
Si la solution n'est pas trouvée, le chemin n'est pas réalisable, il peut s'agir d'un bug.
Alternativement:
1. Dans le sens avant, énumérez les décisions à prendre.
Pour chaque décision, répertoriez la plus large gamme de valeurs d’entrée.
2. Choisissez un chemin et ajustez toutes les valeurs d’entrée. Ces valeurs restreintes sont utilisées pour la
décision suivante.
3. Continuer. Certaines décisions peuvent dépendre et/ou être corrélées à des décisions antérieures.
4. Le chemin est irréalisable si les valeurs d’entrée deviennent contradictoires, voire impossibles.
Si le chemin est atteint, essayez un nouveau chemin pour une couverture supplémentaire.
Avantages et inconvénients des deux approches :
La méthode directe demande généralement moins de travail.
vous ne savez pas où vous allez lorsque vous tracez le graphique.
Instrumentation de trajectoire
2.
L'instrumentation de chemin est ce que nous devons faire pour confirmer que le résultat a été atteint par le
chemin prévu.
Méthodes d'instrumentation
Stratégie générale :
1. Basé sur le traçage interprétatif et l'utilisation d'un programme de traçage interprétatif.
2. Une trace confirme que le résultat attendu est ou n'est pas obtenu le long du chemin prévu.
3. La trace informatique est peut-être trop massive. Le traçage manuel peut être plus simple.
Créateurs de traversées ou de liens :
Simple et efficace
1. Nommez chaque lien.
2. Instrumenter les liens pour que le lien soit enregistré lorsqu'il est exécuté (pendant le test)
3. La succession de lettres depuis l'entrée jusqu'à la sortie d'une routine correspond au chemin d'accès
Problème:
Le traitement dans les liens peut être perturbé par des Peut-être en raison des instructions GOTO, le
bugs. chemin différent, mais aboutissant à nouveau au contrôle prend une
chemin prévu. Instrumentation du marqueur à
double liaison :
Unité III
Test du flux de transaction
Flux de transaction
Le flux de transaction représente le traitement d'un système. Des méthodes de tests fonctionnels sont
appliquées pour tester TF.
Graphique de flux de transaction
TFG représente un modèle comportemental (fonctionnel) du programme (système) utilisé pour les tests
fonctionnels par un testeur système indépendant.
Transaction
V est une unité de travail vue du point de vue de l'utilisateur du système.
V consiste en une séquence d’opérations effectuées par un système, des personnes ou des dispositifs
externes.
V est créé (naissance) en raison d'un acte extérieur et jusqu'à son achèvement (clôture), il demeure sous
forme de documents historiques.
Définitions
2. Biosis
3. Mitose
Fusions d'opérations
1. Jonction
2. Absorption
3. Conjugaison
3. Sensibilisation
V Chemins fonctionnels et sensés – Simple
V Erreur, exception, chemins d'interface de protocole externe - Difficile
Test des flux Tr. avec des interfaces externes
V Utilisez des correctifs et des points d'arrêt, désaccordez-vous et enfreignez les règles,
4. Instrumentation
Les compteurs V Link ne sont pas utiles.
V Besoin
> Tracer
> Files d'attente sur lesquelles résidaient les jetons
> Entrées et sorties du répartiteur
> Un journal de bord
Intégrer l'instrumentation à la conception du système
5. Bases de données de test
V Conception et maintenance d'une base de données de test - Effort
V Erreurs
> Méconnaissance de la conception d'une base de données de tests administrée de manière centralisée
> Conception de la base de données de test par les testeurs
> Utilisation d'une base de données pour tous les tests (4 à 5 requis) Nécessite des concepteurs de systèmes
et de tests expérimentés
6. Exécution des tests
V Utiliser l'automatisation de l'exécution des tests
V Il faut faire un grand nombre de tests pour la couverture C1+C2
Données - Tests de flux - Notions de base
Anomalie
Traitement déraisonnable des données
V Utilisation de l'objet de données avant qu'il ne soit défini
V L'objet de données défini n'est pas utilisé
Les tests de flux de données (DFT) utilisent le graphique de flux de contrôle (CFG) pour explorer les anomalies de
flux de données.
V La DFT conduit à des stratégies de test entre Po et P1/P2 Définition
DFT est une famille de stratégies de test basées sur la sélection de chemins à travers le flux de contrôle du
programme afin d'explorer la séquence d'événements liés à l'état des objets de données.
Exemple
Choisissez suffisamment de chemins pour garantir que chaque élément de données a été initialisé avant son
utilisation ou que tous les objets ont été utilisés pour quelque chose.
Motivation
V Confiance dans le programme
V Conception dominée par les données. Le code migre vers les données.
V Code source pour les déclarations de données
V Machines à flux de données contre Von Neumann
> Résumé MIMD
> Le langage et le compilateur s'occupent des calculs parallèles Contrôle
du flux de programme avec le paradigme de Von Neumann Étant donné m, n, p, q,
trouver e. e = (m+n+p+q) * (m+npq) a := m + nb := p + qc := a + bd := a - b
e := c * d
> Plusieurs représentations de graphiques de flux de contrôle possibles.
Flux de programme utilisant le paradigme des machines à flux de données
COMMENCER
PAR DO
LIRE m, n, n, p, q
FIN PAR
PAR DO
a := m+n
b := p+q
FIN PAR
PAR DO
c := a+b
d := ab
FIN PAR
PAR DO
e := c * d
FIN PAR
FIN
dd : inoffensif, suspect
dk :probablement un bug.
du : normale
kd : normale
k :inoffensif, mais probablement un bug
moi : un bug
-k anomalie
k- normale
tu - normal - peut-être une anomalie
d- peut-être anormal
Graphique d'état d'anomalie de flux de données
/ État de l'objet de données
> K, D, U, A
Étape de traitement V
> k, d, u
Graphique d'état d'anomalie de flux de données
V État de l'objet
V Graphique d'état du flux de données impitoyable
Graphique d'état
d'anomalie de flux de
données
Graphique d'état du flux de données pardonnant
Définitions
V par rapport à une variable ou à un objet de données 'v'
V Supposons que tous les chemins DF soient réalisables
1. Définition - segment de chemin clair n° k, kd
V Segment de chemin sans boucle
V Segment de chemin simple
V du chemin du nœud i au nœud k
V définition-claire et simple c
V définition claire et sans bouclep
Stratégies DFT
V Chemins tout-du (ADUP)
V Stratégie de toutes les utilisations (AU)
V Tous les usages p/quelques usages c et Tous les usages c/quelques usages p
V Stratégie de toutes les définitions
V Stratégie de tous les usages p, de tous les usages c
But
Conception de tests, développement de cas de tests
1. Chemins tout-terrain (ADUP)
Y DFT le plus fort
V Chaque chemin pour chaque variable pour chaque définition pour chaque utilisation
2. Stratégie de toutes les utilisations (AU)
V Au moins un segment de chemin clair de définition de chaque définition de chaque variable vers chaque
utilisation de cette définition doit être exercé sous un certain test.
• Au moins un segment de chemin de chaque définition vers chaque utilisation qui peut être atteinte à partir de
cette définition.
3. Tous les usages p/quelques usages c et Tous les usages c/quelques usages p
V APU + c
Plus fort que P2
V ACU + p
Plus faible que P2
4. Stratégie Toutes Définitions (AD)
V Couvrir chaque définition par au moins un p ou un c
{ Plus faible que ACU + p et APU + c
5. Stratégie d'utilisation de tous les prédicats et de toutes les utilisations informatiques
V APU :
> Inclure un chemin sans définition pour chaque définition de chaque variable, de la définition à
l'utilisation du prédicat.
VACUUM :
> Inclure pour chaque définition de chaque variable au moins un chemin sans définition depuis la
définition vers chaque utilisation informatique.
Ordonner les stratégies
Tous les chemins
Chemins à usages
multiples (AU)
Succursales
P2
DFT - OUTILS
V Développement rentable
V Outils commerciaux :
V peut éventuellement faire mieux que les outils commerciaux
> Intégration plus facile dans un compilateur
> Des tests efficaces
1. Comment les tests de flux de données (DFT) sont-ils utiles pour combler les lacunes des tests de chemin ?
2. Expliquez les graphiques de flux de données (DFG).
3. Comment détecter une anomalie ? Expliquez les différents types d’anomalies de flux de données et les
graphiques d’état d’anomalie de flux de données.
4. Écrire des applications de tests de flux de données.
5. Nommez et expliquez les stratégies de test de flux de données.
Unité - IV
Test de domaine
Domaines et chemins :
Test de domaine
V Views Programmes comme classificateurs de données d'entrée
• Vérifie si la classification est correcte
Modèle de test de domaine
Chemins
V Au moins un CHEMIN à travers le programme
V Plus de chemins pour les domaines déconnectés
Points à retenir
V Le domaine d'un programme sans boucle correspond à un ensemble de nombres définis sur le vecteur d'entrée
V Pour chaque domaine, il existe au moins un chemin à travers la routine, le long duquel le traitement de ce
domaine est effectué
V L'ensemble des prédicats interprétés parcourus sur ce chemin (c'est-à-dire l'expression du prédicat du chemin)
définit les limites du domaine.
Fermeture de domaine
Limite : Fermé / Ouvert
X>=MIN X<=MAX
Dimensionnalité du domaine
V Une dimension par variable
V Au moins un prédicat
> Tranches à travers le domaine
précédemment défini
Limite de découpage en V
• Les N-espaces
Hypothèses sur les sont coupés par des hyperplans
bogues Le traitement est OK. La définition du domaine peut
être
^ Leserronée.
limites sont
fausses.
^ Les prédicats sont
V faux.
Une fois le vecteur d'entrée défini sur le bon chemin, il est
{ D'autres bugs traité.
correctement provoquant des erreurs
{ de domaine… Représentation à
double zéro V Domaines ambigus
•
Z Vérification du zéro en virgule
flottante Domaines contradictoires
V Domaines sur-spécifiés
> X > 3 .ET. X < 2 .ET. Y > 3
V Erreurs de limites
V Fermeture des frontières
V Décalé
V Erreurs de limites….
> Incliné
> Manquant
> Limite supplémentaire
• Inversion de la fermeture
Logique défectueuse
> Simplification des prédicats
composés
Restrictions
1. Exactitude par coïncidence
> DT ne peut pas détecter
Exemple
• Résultat représentatif Test de
partition Équivalence d'entrée
2. Limites simples et prédicats composés
Prédicats composés
V
Impact de .OR.
> Concave, déconnecté
> Domaines adjacents avec la même fonction
> Exemple
ABC + DÉF
V Éliminer les prédicats composés
3. Homogénéité fonctionnelle des bugs
V La forme fonctionnelle est toujours conservée
ax + par >= c
V Les bugs sont uniquement dans a, b, c
4. Espace vectoriel linéaire
V Prédicat de limite linéaire, interprété
V Opérateurs relationnels simples
V Conversion à l'espace vectoriel linéaire
> Coordonnées polaires 2D
> Polynômes
V Problèmes avec des limites non linéaires
5. Logiciel sans boucle
Prédicat V pour chaque itération
> Boucle sur toute la transaction
> Boucle définie
De beaux domaines
V Exigences
> Bugs ^ domaines mal définis
• Avant DT
> Analyser les spécifications
> Assurez-vous que les spécifications des limites sont cohérentes et complètes
Domaines implémentés
V Compléter, Cohérent et Traiter toutes les entrées
Domaines spécifiés
V Incomplet, incohérent
Effort du programmeur/concepteur
De beaux domaines
• Linéaire, complet, systématique, orthogonal, constamment fermé et convexe
Avantages
V Facilité de DT
• Moins d'apparitions de bugs
Non linéaire
Transformer
2. Limites complètes
V Couvrir l'espace numérique total (- oC , +
oC ) > Un ensemble de tests
Incomplet…
V Raisons
V/ Essais
3. Limites systématiques
V Inégalités linéaires différant par une
constante g (j, c) = j + k * c
V fj (X) ≥ kj ou, fj (X) ≥ g (j, c)
• Lignes parallèles
DT
Tester un ^ Tests pour d'autres domaines
domaine O
4. Limites orthogonales
V Deux limites ou ensembles de limites
V Parallèle aux axes
V DT
> Chaque ensemble indépendamment
> # Teste un O (n)
Limites orthogonales
Ensembles inclinés en V
> transformation
> Cas de test : O(n)
e≥ej .ET. e
Limites non orthogonales
• Intersections de test = O ( n2 ) + O (n)
V Exemple
> Même opérateur relationnel pour les limites
systématiques
6. Domaine convexe
V La ligne joignant deux points quelconques se trouve
dans le domaine
V DT
> n points actifs et 1 point hors-champ
Concave
V « Mais, cependant, sauf, ou… » dans Spécifications
Manipulez le V avec un soin particulier
7. Domaine simplement connecté
• En une seule pièce
V 2 domaines complémentaires
> D1 : Convexe ^ D2 : Concave, non connecté
Programmeur / Designer V
> Partie convexe Première
Domaines laids
En général
De mauvaises spécifications
Programmeur / Designer simplifie => Du laid au bon
possibilité d'introduction de plus de bugs ?!?
Causes
1. Limites non linéaires
2. Ambiguïtés et contradictions
3. Simplifier la topologie
4. Rectifier les fermetures de frontières
• Assemblage des
pièces
3. Simplification de la topologie
V Complexité !
> Concavité, trous, déconnexion
• Lissage de la concavité
Correct:
> Connecter des segments de limite déconnectés
> Repousser les limites à l'infini
4. Rectification des fermetures de frontières.
V crée des fermetures dans une direction pour des limites parallèles avec des fermetures
dans les deux directions • Forcer un hyperplan englobant à appartenir au domaine.
Stratégie générale de DT
V Sélectionnez des points de test proches des limites.
V Définir une stratégie de test pour chaque bug possible lié à la limite
V Points de test pour un domaine utiles pour tester son domaine adjacent.
V Exécutez les tests. Grâce à une analyse post-test, déterminez si des limites sont défectueuses et
si oui, comment ?
V Exécutez suffisamment de tests pour vérifier chaque limite de chaque domaine
DT pour les bugs de domaine spécifiques
En général,
V Point intérieur
V Point extérieur
V Quartier Epsilon
V Point extrême
1. Domaines 1-d
2. Domaines 2D
3. Prédicats d'égalité et d'inégalité
4. Tests aléatoires
5. Test des domaines n-dimensionnels
1. Test des domaines 1-D : Des insectes aux frontières ouvertes
Bug de
fermeture
Bug de
décalage vers
la gauche
Bug de
décalage vers la
droite
Limite manquante
Limite
supplémentaire
Figue:
2 n : Tests de partage de domaines
3 n : pas de partage de tests par
domaines
4. Tests aléatoires
Point VA au centre : vérifie le calcul
Efficacité
V Rentable
V Bugs sur les limites, points extrêmes
V Tests logiques du matériel – outils intensifs
Test de
compatibilité de la plage d'interface/du domaine
V Testez chaque variable indépendamment
V Trouver une fonction inverse
• Construire un super domaine
Unité – V
Chemins, produits de chemin et expressions régulières
V Exemple
1. { abd, abcbd, abcbcbd , ….. } abd + abcbd + abcbcbd + ….
X + Y = Y + X • Associatif : Règle
(X+Y)+Z=X+(Y+Z)=X+Y+Z :Règle 32
• Distributif
X + tout sous-ensemble de X = X : Règle 4
X = a + bc + abcd X + a = X + bc + abcd =X
• Boucle
Un ensemble infini de chemins parallèles.
b* = b0 + b1 + b2 + b3 + …… ()b
X* = X0 + X1 + X2 + X3 + …… un c"
X+ = X1 + X2 + X3 + …
• XX* = X* X = X+ ♦ aa* = a* a
Xn X0 X1 X2 X3
= + + + Plus de + …… + Xn
• règles…
Xm
+ Xn = Xn si n ≥ m :Règle 6
= Xm si n < m
Xm Xn
= Xm+n :Règle 7
Xn
X* = X* Xn = X* : Règle 8
Xn
X+ = X+ Xn = X+ :Règle 9
X X+ = X+ X* = X+
* :Règle 10
• Éléments d'identité ..
1 : Chemin de longueur nulle
1+1 = 1 :Règle 11
1X = X1 = X :Règle 12
1n
= 1n = 1* = 1+ = 1 :Règle 13
1+ + 1 = 1* = 1 :Règle 14
0 : ensemble de chemins vide
:Règle 15
X+0=0+X=X
:Règle 16
X0 = 0X = 0
* ..=1 :Règle 17
0 = 1 + 0 + 02 + 03 + .
A (B + C) = AB + AC (A
+ B) C = AC + BC
Absorption
X+X=X : Règle 5
Procédure de réduction
+
un
V Pour convertir un graphique de flux en une expression de chemin qui désigne l'ensemble
Procédure
de de réduction
tous les chemins nœud par nœud
d'entrée/sortie.
en V
Étapes d'initialisation
1. Combinez toutes les liaisons série en multipliant leurs
2. expressions de chemin.
*
3. Supprimez
Combinez tous les liens parallèles en ajoutant leurs
toutes les boucles automatiques - remplacez-
4. les par des liens de la forme X Sélectionnez un nœud non 1
Remplacez-le par un ensemble de liens équivalents, dont les expressions de chemin correspondent à
toutes les manières dont vous pouvez former un produit de l'ensemble des liens entrants avec
l'ensemble des liens sortants de ce nœud.
5. Combinez toutes les liaisons série en multipliant leurs expressions de chemin. (comme à l'étape 1)
6. Combinez tous les liens parallèles en ajoutant leurs expressions de chemin. (comme à l'étape
2)
7. Retirez toutes les boucles automatiques. (comme à l'étape 3)
8. S'il n'y a qu'un seul nœud entre les nœuds d'entrée et de sortie, l'expression du chemin pour le
graphique de flux est l'expression du chemin du lien. SINON, revenez à l'étape 4.
Expression de chemin pour un graphe de flux
V n'est pas unique
V dépend de l'ordre de suppression des nœuds.
Exemple de procédure de réduction
Étape inter-termes (étape 4 de l'algorithme)
V Étape fondamentale.
V Supprime les nœuds un par un jusqu'à ce qu'il y ait un nœud d'entrée et un nœud de sortie.
V Remplacez le nœud par les produits de chemin de tous les liens entrants avec tous les liens sortants
et en interconnectant ses voisins immédiats.
Traitement des termes de boucle
Exemple
(bgif)*b(c+gkh)d
(ilhd)*imf(bgif)*b(c+gkh)d
{(ilhd)*imf(bgif)*b(c+gkh)d}* (ilhd)*e
------------------------ — ----------------------(
2
Identités/Règles
(A+B)* = ( A* + B* ) * I1
= ( A* B* )* I2
= ( Un * B ) * Un * I3
= ( B* Un )* B* I4
= (A*B+A)* I5
= (B*A+B)* I6
(A+B+C+. ..)* = ( A* + B* + C* . )* I7
= ( A* B* C* . . . )* I8
Dérivé en supprimant les nœuds dans des ordres différents et en appliquant les règles de
boucle série-parallèle.
Graphiques de flux structurés
Réductible à un seul lien par application successive des transformations présentées ci-
dessous.
Propriétés
V Aucune transformation interterme.
V Pas de GOTO.
V Aucune entrée ni sortie au milieu d'une boucle.
Quelques exemples