THÈse présentée








télécharger 0.65 Mb.
titreTHÈse présentée
page6/28
date de publication09.06.2018
taille0.65 Mb.
typeThèse
ar.21-bal.com > droit > Thèse
1   2   3   4   5   6   7   8   9   ...   28

2.4La génération automatique de cas de test


Nous détaillons ici les principaux travaux sur la génération automatique de cas de test, travaux qui sont en lien avec le chapitre 3 dans lequel nous exposons notre contribution à la génération de test pour des composants.

La génération automatique de données de test est un problème crucial pour la construction de logiciels fiables [Dustin''99; Fewster''99]. L’efficacité de la phase de test dépend en grande partie de la pertinence de données utilisées. Les techniques pour la génération automatique sont de deux types : fonctionnelle ou structurelle.

2.4.1Techniques fonctionnelles


Les techniques de génération fonctionnelle se fondent sur une spécification du comportement du programme. Il existe un ensemble de travaux sur la génération automatique de cas de test à partir d’une spécification formelle d’un système. Ces travaux s’appuient sur la méthode présentée dans [Dick''93] qui consiste à générer un automate d’états finis à partir de la spécification formelle, puis à sélectionner des cas de test comme des chemins dans l’automate. Dans [Legeard''02], les auteurs utilisent une spécification B ou Z du programme à tester. Ces spécifications sont ensuite traduites au format BZ-Prolog proposé par les auteurs, chaque opération est alors décrite par son nom, les noms et types des paramètres d’entrée et de sortie et les pré et post conditions. À partir d’une telle description, Legeard et al. décrivent une technique pour générer automatiquement des données de test aux limites, ainsi que les préambule et postambule nécessaires à l’exécution du cas de test. Dans [Murray''98], Murray et al. utilisent une spécification Object-Z d’une classe pour générer un automate et générer des cas de test unitaires pour la classe. Sur la même idée, les auteurs de [Grieskamp''02], dérivent un automate d’états fini à partir d’une machine à états abstraite pour générer des cas de test.

Un autre exemple de génération automatique de cas de test fondée sur une spécification formelle est décrit dans [Marinov''01]. Ici, les auteurs utilisent Alloy, un langage qui permet de spécifier le comportement de méthodes Java. D’autres approches se basent sur l’expression des exigences pour la génération de tests fonctionnels [Tahat''01] ou sur la description de scénarios abstraits [Tsai''01; Nebut''02].

Dans [Pickin''02] les auteurs décrivent une solution fondée sur une spécification formelle du système. Cette approche prend en entrée un diagramme de classes, les machines à états décrivant le comportement de chaque classe, un déploiement initial du système et un diagramme de séquence décrivant un objectif de test. A partir de cette spécification, un simulateur intégré à l’atelier de génie logiciel UMLAUT [Ho''99] peut générer un graphe étiqueté décrivant le comportement global du système, et un graphe pour l’objectif de test. Ces deux graphes sont donnés en entrée de l’outil TGV [Jéron''98] qui génère un cas de test exécutable sur l’implantation du système.

D’autres travaux sur la génération automatique de test fondée sur les modèles UML ont été réalisés dans le cadre du projet européen AGEDIS [AGEDIS''00]. Ici, les techniques étudiées utilisent le diagramme de classes, des diagrammes d’objets pour spécifier des situations initiales d’utilisation du système, et les diagrammes d’états pour spécifier le comportement dynamique des objets. A partir de ces différents éléments de spécification une méthode ainsi que des outils pour la génération automatique de cas de test ont été proposés.

2.4.2Techniques structurelles


Parmi les techniques structurelles, on distingue la génération statique de la génération dynamique. La génération statique consiste à générer des données de test sans exécuter le programme sous test. Des outils de génération statique sont fondés sur la résolution de contraintes sur les données en entrée. Un exemple d’une telle technique est l’exécution symbolique de programme [Clarke''76], qui consiste à donner une valeur symbolique à chacune des variables du programme. L’exécution statique du programme permet ensuite d’obtenir une expression représentant une contrainte sur les variables, nécessaire pour atteindre un point du programme. Dans [Lugato''02], les auteurs utilisent AGATHA, un outil fondé sur l’exécution symbolique, pour générer des données de test à partir d’une spécification avec UML.

La génération dynamique de cas de test initialement proposée dans [Miller''76] consiste à instrumenter le code du programme sous test pour collecter des informations sur le programme au cours de l’exécution d’un cas de test. Ces informations sont utilisées pour évaluer la qualité du cas de test par rapport à un critère donné. Les données de test sont ensuite modifiées pour tenter d’améliorer le cas de test afin qu’il satisfasse entièrement le critère choisi. De nombreux travaux sur la génération dynamique de cas test sont inspirés des travaux de Korel qui ramène ce problème à un problème de minimisation de fonction [Korel''90; Korel''92; Korel''96]. L’idée est la suivante : un objectif de test peut s’exprimer sous la forme d’une fonction sur les données en entrée, trouver une donnée de test pertinente consiste alors à trouver une donnée qui minimise la fonction. Korel utilise la descente de gradient pour résoudre la minimisation de fonction. Un grand nombre de chercheurs ont utilisé un algorithme génétique pour résoudre ce problème [Xanthakis''92; Schultz''93; Boden''96; Jones''96; Jones''98; Tracey''98; Pargas''99; Tracey''00; Michael''01; Wegener''01]. Ces travaux, que nous détaillons dans la suite, diffèrent par la modélisation des prédicats comme fonction des variables d’entrée.

Dans [Michael''01], Michael et al. présentent leur outil GADGET (Genetic Algorithm Data GEneration Tool) qui génère des données de test scalaire. Les individus sont modélisés comme une chaîne de bits correspondant à la représentation binaire de la donnée de test et la fonction d’utilité correspond à la fonction qu’on cherche à minimiser. L’article détaille la modélisation du problème et donne des résultats expérimentaux avec plusieurs petits programmes (30 lignes de code) et un programme plus important (2000 lignes de code). Au cours de ces expériences, les auteurs ont utilisé deux types d’algorithme génétique pour la génération de données de test. Les résultats sont comparés à la génération aléatoire, et à l’utilisation de la descente de gradient pour la minimisation de fonction. La génération purement aléatoire est beaucoup moins efficace que les autres techniques dès que la taille du programme sous test devient importante, ce qui justifie l’effort supplémentaire nécessaire à l’application des méthodes plus sophistiquées. Parmi les trois algorithmes de génération, l’algorithme génétique classique est le plus efficace dans une large majorité des cas.

Tracey et al. [Tracey''00] utilisent un algorithme génétique pour la génération de données de test pour les conditions d’exception. Ils présentent le calcul de la fonction d’utilité et détaillent un exemple. Ils donnent ensuite des résultats expérimentaux pour des programmes écrits en Ada95. Le plus gros exemple est un système de contrôle pour un moteur d’avion, pour lequel l’algorithme est capable de générer des données de test qui soulèvent chaque exception possible.

Jones et al. [Jones''96; Jones''98] donnent différents calculs possibles pour la fonction d’utilité. Pour tous ces modèles, les prédicats sont vus comme une fonction des données en entrée. Il faut ensuite trouver des données de test qui minimisent ces fonctions. Dans [Jones''98], les mêmes auteurs proposent d’utiliser aussi le score de mutation comme fonction d’utilité.

Pargas et al. [Pargas''99] utilisent aussi un algorithme génétique pour la génération dynamique de données de test. Ici, la fonction d’utilité est fondée sur la couverture du graphe de dépendance de contrôle (GDC). Les auteurs ont développé un prototype appelé TGen. L’outil génère une donnée de test pour un objectif de test. Cet objectif correspond à un chemin du GDC que l’on veut couvrir. En exécutant le cas de test sur une version instrumentée du programme sous test, TGen repère les nœuds couverts par le cas de test. La valeur d’utilité du cas de test est évaluée par le nombre de nœuds en commun entre le chemin couvert et le chemin correspondant à l’objectif de test. L’article décrit précisément le processus de génération fondé sur l’algorithme génétique, puis plusieurs expériences sur 6 petits programmes (entre 32 et 82 lignes de code). Les résultats de l’algorithme génétique sont comparés aux résultats obtenus avec un générateur aléatoire.

Tous les travaux sur les algorithmes génétiques présentés ici offrent des solutions qu’il est difficile d’adapter dans un cadre orienté objet. Tout d’abord, ils ont en commun de générer des données de type simple, ce qui leur permet de modéliser la solution sous forme d’une chaîne binaire. Or, dans le cas de programmes orientés objet, nous devons générer des objets complexes qu’il est difficile de modéliser sous forme binaire. Par ailleurs, ces travaux exécutent l’algorithme génétique pour chaque objectif de test, c’est-à-dire qu’ils ne génèrent qu’une donnée de test à chaque exécution. Dans le cadre de la méthodologie nous voulons que l’algorithme optimise un ensemble de cas de test pour un composant, c’est-à-dire qu’il génère toutes les données nécessaires pour tester correctement le composant en une seule exécution.

Dans le chapitre 3, nous étudions donc un algorithme génétique pour l’optimisation et la génération automatique de cas de test, et proposons d’adapter cet algorithme pour résoudre les problèmes soulevés ci-dessus. Ces adaptations donnent lieu à un nouvel algorithme semi-aléatoire que nous baptisons algorithme bactériologique.
1   2   3   4   5   6   7   8   9   ...   28

similaire:

THÈse présentée iconThèse Présentée à la Faculté de Pharmacie de Montpellier

THÈse présentée iconThèse présentée pour l’obtention du grade de Docteur

THÈse présentée iconThèse soutenue publiquement par Sang-Ha suh le 10 Juillet 2006
«avec projection», de cette thèse aux membres du Conseil scientifique et à leurs expliquer pourquoi cette thèse ne devait pas être...

THÈse présentée iconThèse soutenue publiquement par Sang-Ha S. le 10 Juillet 2006 Le...
«avec projection», de cette thèse aux membres du Conseil scientifique et à leurs expliquer pourquoi cette thèse ne méritait pas d’être...

THÈse présentée iconQuestionnaire sur les Cathédrales Quelle est le nom de la cathédrale...

THÈse présentée iconCommuniqué de presse
«L’homme et la matièRE» de Don Darby que l’année prenait son envol. L’exposition est présentée à la Salle Principale du cne jusqu’au...

THÈse présentée iconCatégorie de Grand Prix présentée (cocher la case correspondante)
«Les Grands Prix simi immobilier de Bureaux» du 17 juin au Vendredi 7 octobre 2016

THÈse présentée iconThèse

THÈse présentée iconCommuniqué de presse
«Komuna Fundamento» présentée lors de la xiiie exposition internationale d’architecture «Common Ground» qui se déroule dans le cadre...

THÈse présentée iconAutomne 2013 plan de cours
«Unified», combinée à l'apprentissage du langage uml, est présentée et mise en pratique dans un projet de conception et d'implantation...








Tous droits réservés. Copyright © 2016
contacts
ar.21-bal.com