520 likes | 615 Views
Utilisation des Structures Combinatoires pour le Test Statistique. Sandrine-Dominique GOURAUD Équipe “Programmation et Génie Logiciel”, L.R.I. Co-encadrants: M.-C. Gaudel et A. Denise. Plan. Contexte Structures combinatoires Test statistique et qualité de test
E N D
Utilisation des Structures Combinatoires pour le Test Statistique Sandrine-Dominique GOURAUD Équipe “Programmation et Génie Logiciel”, L.R.I. Co-encadrants: M.-C. Gaudel et A. Denise
Plan • Contexte • Structures combinatoires • Test statistique et qualité de test • Nouvelle approche du test statistique • Tirer des chemins • Optimiser la qualité de test • Validation de l’approche • Le prototype AuGuSTe • Résultats expérimentaux • Bilan et Perspectives
Les structures combinatoires décomposables • La spécification de structures combinatoires consiste en un ensemble de règles de production construites à partir: • d’objets de base: ε (de taille 0) et atome (de taille 1) • d’opérateurs: union(+), produit(x), sequence, etc. • de contraintes de cardinalité Exemples: • Arbre binaire complet non vide: A= F+ AxA où F est l’atome de base représentant une feuille • Séquence de 3 à 5 feuilles: S= Sequence(F,Card=3..5)
Les structures combinatoires décomposables • Résultats théoriques sur la génération aléatoire uniforme de telles structures [Flajolet,Zimmermann,VanCutsem,1994] • Complexité en n*log n pour des structures combinatoires de taille n • Complexité linéaire dans certains cas particuliers • Outils disponibles pour l’environnement MuPAD: • Le package CS [Corteel, Denise,Dutour,Sarron,Zimmermann] • Le package MuPAD-Combinat [Thiery & al]
Le test de logiciel • Objectif: trouver des fautes/erreurs dans les programmes • Comment? En exécutant le programme sur un ensemble de données qu’on appelle jeu de test. • Les difficultés: • Trouver les bons jeux de test • Exécution et dépouillement • Quand arrêter les tests (critère)?
Sélection d’un jeu de test? • Le test fonctionnel (boîte noire): sélection basée sur une spécification du système Ce que le système devrait faire… • Le test structurel (boîte de verre): sélection basée sur le programme i.e. on s’intéresse à différents chemins d’exécution Ce que le programme fait et comment • Le test statistique (ou aléatoire): sélection aléatoire (uniforme ou opérationnelle) dans le domaine des entrées du programme
Sélection d’un jeu de test structurel/fonctionnel Pour sélectionner un jeu de tests, on part: • D’une modélisation du système/programme • D’un critère de test adapté à cette modélisation Exemples: • Spécification algébriques / Couverture des axiomes • Système à transitions étiquetées / Couverture des arcs • Texte du programme / Couverture des instructions
Exemple: estTrie(tab,t) Spécification: le programme prend en entrée un tableau tab d’au plus 6 entiers et un nombre 0≤ t ≤6. Si les t premières valeurs du tableau tabsont triés en ordre croissant, alors il retourne vrai. Si les t premières valeurs du tableau tabne sont pas triés en ordre croissant, alors il retourne faux.
INIT I0 C1 I2 B3 I4 I5 EXIT Exemple: estTrie • bool estTrie (tab: array 0..5 of int, t: int){ • int i:=0; • bool rep:=true; • if (t≤0) • then rep:= true; • else{ • while ((i<t+1) and rep){ • rep:= tab[i]≤tab[i+1]; • i:= i+1; • } • } • return rep; • }
Pourquoi le test statistique? • Avantages: • Possibilité de faire du test plus intensif qu’avec les autres méthodes • Inconvénients: • Mauvaise couverture des cas particuliers (ex: cas d’exception) • Solution? • Le combiner avec une autre méthode de test [Thévenod-Fosse,Waeselynck,1991].
Qualité d’un test statistique [TF,Wa] Soit E l’ensemble des éléments à couvrir N le nombre de tests La qualité de test qN est la probabilité minimale d’un élément de E d’être couvert lors des N tests qN =1-(1- pmin)N où pmin = min{p(e), eE} • Pour maximiser qN, il faut maximiser pmin • Une solution (pas toujours possible): Tirage uniforme dans E
Relation entre N et qN [TF,Wa] qN =1-(1- pmin)N • Si je choisis de faire N tests, quelle sera ma qualité de test qN? • Si je désire atteindre une qualité de test qN, combien de tests suis-je censé effectuer? Avec pmin{0,1}
Le test Statistique Structurel [TF,Wa] • Construction d’une distribution sur le domaine des entrées qui: • Maximise la qualité de test donc la probabilité minimale d’atteindre un élément du critère de couverture structurel considéré • N’écarte aucun point du domaine d’entrée • Avantages: • Bons résultats expérimentaux • Inconvénients: • Distribution déterminée de manière empirique dans certains cas
Objectif de cette thèse • Méthode de test statistique: • qui s’applique à différents types de modélisation représentable sous forme de graphes, • qui optimise la qualité de test par rapport à un critère donné, • qui est automatisée • Apport possible des structures combinatoires pour le test
Nouvelle approche pour le Test Statistique Tirage aléatoire de chemins • L’ensemble des chemins d’un graphe peut se représenter facilement sous forme d’une spécification de structures combinatoires • Génération aléatoire de complexité linéaire • 2 étapes: 1) Tirer un ensemble de chemins adéquat 2) Passer des chemins aux données d’entrée qui permettent de les parcourir
Test et structures combinatoires Première étape: Tirer un ensemble de chemins tel que la qualité de test soit optimale Remarque: • Idéalement, tirage parmi tous les chemins du graphe. • En pratique, tirage dans un sous-ensemble de chemins: la présence de circuits dans le graphe implique une infinité de chemins. En pratique, on limite la longueur n des chemins.
Exemple: quel n choisir? INIT • Longueur du chemin élémentaire le plus long: 7 • Choix de n pour la suite: 11 • Nombre de passages dans la boucle entre 0 et 3 5 chemins de longueur ≤11 à considérer 1 I0 2 C1 3 5 I2 B3 I4 4 6 I5 7 EXIT
v INIT v I0 e0 C1 e5 e1 e3 I2 B3 I4 e4 e6 e2 I5 e7 EXIT Graphe et structure combinatoire Atomes= arcs Séquence d’arcs= chemin S= v.S + v.e0.C.e7 C= e1.e2 + e3.B.e6 B= e4.I + ε I= e5.B S C
Génération: dénombrement 3 chemins issus de S de longueur 7
v INIT v I0 e0 C1 e5 e1 e3 I2 B3 I4 e4 e6 e2 I5 e7 EXIT Génération: tirage S= v.S + v.e0.C.e7 C= e1.e2 + e3.B.e6 B= e4.I + ε I= e5.B S7 ? 1/3 ? 2/3 vS6 ve0C4e7 0 1 1 vvS5 ve0e3B2e6e7 vve0C3e7 0 1 vvvS3 vvve0C2e7 1/2 1/2 vvve0e1e2e7 vvve0e3e6e7 ve0e3e4e5e6e7 Longueur=7
Si le critère consiste à couvrir un ensemble de chemins : on construit la structure combinatoire correspondante Exemples: tous les chemins passant par l’arc a, tous les chemins passant par le sommet B3 puis par le sommet I4 … • Si le critère consiste à couvrir un ensemble d’éléments quelconque : ??? Exemples: tous les sommets, tous les arcs… Comment un tirage uniforme parmi des chemins peut-il assurer une bonne qualité de test pour une couverture d’autres éléments?
Tirage de chemins Soit N le nombre de tests à générer. • Tirer aléatoirement, selon une distribution adéquate, N éléments e1,…,eN parmi les éléments à couvrir • Pour chaque ei, tirer aléatoirement et uniformément un chemin (de longueur ≤ n) parmi ceux qui passent par ei.
INIT I0 C1 I2 B3 I4 I5 EXIT Exemple: • Critère: tous les sommets carrés • S={I2,I0,I4,I5} • 5 chemins de longueur 11. • Distribution uniforme p(I2)= 1/4 +1/41/5 +1/40 +1/41/5 =7/20 = 0.35 De même: p(I4)=11/20, p(I0)=1, p(I5)=1 pmin=p(I2)= 0.35 On n’obtient pas le pmin optimal !
INIT I0 C1 I2 B3 I4 I5 EXIT Exemple: • Critère: tous les sommets carrés • S={I2,I4} • 5 chemins de longueur 11. • Distribution uniforme pmin=0.5 Comment pourrais-je maximiser automatiquement le pmin?
Probabilité d’un élément La probabilité p(e) d’un élément e d’être atteint lors d’une exécution est: p(e)=p1(e)+p2(e) • Probabilité de tirer l’élément (étape 1): p1(e) • Un chemin passant par cet élément a été tiré (étape 2): où e’ est l’élément qui a été tiré (étape 1), c(e’) est le nombre de chemins passant par e’ c(e,e’) est le nombre de chemins passant par e et e’
Calcul des c(e,e’): exemple de c(B3,I4) v v INIT INIT v v I0 I0 e0 e0 A C1 C1 e5 e5 X e3 e4 e3 e4 e5 B3 I4 B3 I4 B3 I4 • On en déduit la structure combinatoire puis la fonction de dénombrement e4 e4 A e6 e6 I5 I5 e7 e7 EXIT EXIT
Une manière de définir la distribution • Pour optimiser la qualité de test, il faut maximiser pmin. Or pour tout e de E,
Maximiser pmin sous les contraintes On résout ce problème d’optimisation par un simplex et on en déduit les p1(ei). Spmin=
INIT I0 C1 I2 B3 I4 I5 EXIT Exemple: • Critère: tous les sommets carrés • Distribution uniforme pour les chemins • 5 chemins de longueur 11.
Des chemins aux entrées Deuxième étape: Déterminer les entrées permettant d’exécuter les chemins tirés • Construction des prédicats associés aux chemins tirés (algorithme classique). • Résolution des prédicats (problème indécidable dans le cas général)
Spécification: t[0..6] Chemin I0-C1-I2-I5 Prédicat calculé: t≤0 Ce chemin est faisable Entrées possibles: t=0 tab arbitraires Chemin I0-C1-B3-I5 Prédicat calculé: (t>0) (t≤-1) Ce chemin est infaisable I0 I0 C1 C1 I2 I2 B3 B3 I4 I4 I5 I5 Exemple:
Des chemins aux entrées • Plusieurs cas possibles pour la résolution de chaque prédicat: • Le prédicat a une solution: c’est notre donnée de test • Le prédicat n’a pas de solution: le chemin associé est infaisable • Le prédicat est indéterminé • Le calcul théorique des p1(ei) ne prend pas en compte les chemins infaisables
Application au test statistique structurel • Modèle: graphe de contrôle du programme • Critères: • Tous les chemins de longueur ≤n • Tous les enchaînements • Toutes les instructions • Un prototype: AuGuSTe1 • Version 1: distribution basée sur les dominances • Version 2: distribution basée sur la résolution du système linéaire 1: Automated Generation of Statistical Tests
P,C,N,n AuGuSTe À partir du programme P, on construit la spécification combinatoire du graphe de contrôle Construction de l’ensemble des éléments à tirer en fonction de C Pour chaque élément, construire l’ensemble des chemins passant par cet élément Déterminer la distribution sur les éléments Tirage des N éléments Tirage des N chemins de longueur inférieure ou égale à n Construction des prédicats associés aux chemins tirés Résolution randomisée des prédicats associés aux chemins Oui Non Echec? Ensemble de données de test
Les expériences • Objectifs: valider l’approche • Comparer à l’approche du LAAS • Évaluer la stabilité • Passage à l’échelle possible? • Comment? • En utilisant les programmes et les mutants fournis par le LAAS • Plus de 10000 exécutions réalisées sur plus 2900 mutants
Évaluation par mutation des méthodes de test • Principe: détecter le maximum de mutants « non équivalents » • La proportion de mutants détectés est appelée score de mutation • La notion d’équivalence dépend en partie de l’environnement d’exécution des tests Exemple: présence de variables non initialisées Mutants équivalents différents
Critère de couverture, qN et N • Qualité de test visée: 0.9999 • Fct3 et Fct4: pour s’assurer de la stabilité, il y a 5 séries de tests.
Résultats pour Fct1, Fct2 et Fct3 • Fct3: • Reflète la dépendance vis-à-vis de l’environnement • Lié aux variables non initialisées détectables par un bon compilateur
Graphe de contrôle de FCT4 Choix de n? n6+1219 soit n234 Soit plus de 1030 chemins à considérer Présence d’un nombre considérable de chemins infaisables
Première expérience avec Fct4… • 1020 chemins dont 99,98% de chemins infaisables • AuGuSTe (v1): • pmin=0.5 • Mais en pratique tous les enchaînements ne sont pas couverts • AuGuSTe (v2): • pmin=0.5 • Mais en pratique, tous les enchaînements ne sont pas couverts • Distribution sur les éléments tirage uniforme parmi les chemins
pmin • Graphe équilibré => Tirage uniforme parmi les chemins • Deux sous-graphes indépendants mauvaise couverture • Idée: Transformation automatique de la structure combinatoire
Résultats pour Fct4: expérience 2 Score de mutation • Environ 1016 chemins de longueur ≤234 • Environ 50% de chemins infaisables • AuGuSTe (v1): pmin =0.3324 • Mais en pratique, tous les enchaînements ne sont pas forcément couverts • AuGuSTe (v2): pmin =0.4923 • En pratique, tous les enchaînements sont couverts
Contribution • Première utilisation des méthodes de tirage uniforme dans les structures combinatoires pour le test de logiciel • Définition une méthode générale et automatisée pour le test statistique • Importante campagne d’expériences • Expériences aux résultats positifs: • Efficacité comparable à celle du LAAS et automatisation • Approche stable • Passage à l’échelle possible