« About two instances of Coverage-Based Statistical Testing » Frédéric Voisin
Deux exemples de travaux sur ce thème test statistique « structurel », orienté vers la satisfaction de « critères de couverture » Applicable à différents types de formalismes AUGUSTE: Graphe de flot de contrôle / flot de données pour du test unitaire (programmes C-like) SALLUSTE: description LUSTRE Novembre 2008 Exposé Fortesse
Principes de base Classique: test aléatoire (uniforme ou non) sur les données Avantages: automatisation test intensif possible Intéressant si on connaît la distribution opérationnelle des données Inconvénient: faible couverture de cas « rares », pas de relation avec des critères de couverture (qualité) lié à la réalisation de l’objet sous test, La couverture réelle des tests ne s’améliore pas forcément si on accroît la taille du jeu de test Novembre 2008 Exposé Fortesse
Plus novateur: test statistique structurel ! La « complexité » de la réalisation est prise en compte à travers des « critères de couverture » On introduit un « biais » par rapport à une distribution uniforme des données de manière à ne pas sous-représenter les cas rares. Idées : Plutôt que de faire des tirages uniformes sur des données, on fait du tirage uniforme sur des chemins dans une représentation en graphe (par ex. Chemins d’exécution dans le graphe de flot de contrôle) On pondère les différents éléments du graphe pour aboutir à une uniformité sur les chemins (de longueur donnée) Il existe un outil pratique pour cela: les structures combinatoires Novembre 2008 Exposé Fortesse
Les « structures combinatoires » Structure combinatoire ? un objet atomique ou obtenu en appliquant un opérateur à des objets combinatoires… Objets « décomposables » construits de manière unique à partir d’objets plus petits Problème de base: étant donné un ensemble d’objets combinatoires et un entier n, engendrer aléatoirement un ou une séquence d’objets de taille n dans cet ensemble. Novembre 2008 Exposé Fortesse
Les « spécifications combinatoires » Un ensemble particulier de règles de constructions: Des objets « vide » de taille 0 (noté 1, ou ) Des « atomes » de taille 1 Un ensemble d’opérateurs: + : union disjointe X : produit Séquence(A): suite finie d’éléments de A – la séquence peut être bornée ou de longueur donnée. Set(A): l’ensemble des ensembles finis d’éléments de A Cycle(A): cycles finis d’éléments de A Exemples: si F est un atome: A = F + A x A -- arbres binaires complets dont les feuilles sont des atomes A = S + S x A x A – les sommets sont les atomes Novembre 2008 Exposé Fortesse
Les algos de tirage se décomposent en deux étapes: Les spécifications combinatoires sont mises sous forme « standard », équivalente à une famille d’ équations aux langages. Les algos de tirage se décomposent en deux étapes: Dénombrement des objets de taille n (ou ≤ n) Étape de tirage basée sur le dénombrement précédent… Il existe des algo très efficaces de génération quand la spécification combinatoire correspond à un langage algébrique ou rationnel Dans la suite on ne garde que +, x, et * (lang. rationnel !) On peut ajouter une extension « syntaxique » seq (n) ou seq (≤ n), n étant fixé, sans sortir du cadre rationnel. Novembre 2008 Exposé Fortesse
Un exemple de génération uniforme Langage de Fibonacci : L = (a+bb)* S aS | bbS | Une instance de taille 4: S aS aaS aabbS Toutes les instances: S4 aS3 bbS2 aaS2 abbS1 bbaS1 bbbbS0 aaaS1 aabbS0 abbaS0 bbaaS0 bbbb aaaaS0 aabb abba bbaa aaaa Novembre 2008 Exposé Fortesse
Counting and randomising: aS3 bbS2 aaS2 abbS1 bbaS bbbbS0 aaaS1 aabbS0 abbaS0 bbaaS0 bbbb aaaaS0 aabb abba bbaa aaaa 3/5 2/5 2/3 1/3 1/2 1/2 Counting: S aS | bbS | S(0) = 1 ; S(1) = 1 ; S(n) = S(n-1) + S(n-2) (n≥2) Novembre 2008 Exposé Fortesse
Structures combinatoires et graphe de flot de contrôle INIT EXIT I0 C1 I2 I5 I4 B3 v e1 e2 e0 e3 e5 e4 e6 e7 Atomes= arcs Sequence d’arcs= chemins Structure Combinatoire : S= v.S + v.e0.C.e7 C= e1.e2 + e3.B.e6 B= e4.I + ε I= e5.B S C Novembre 2008 Exposé Fortesse
Là où ça coince…. Si on se base sur la description (le graphe) Tous les chemins ne correspondent pas à des chemins réels Il est indécidable de savoir si un chemin est exécutable On se repose sur la résolution de contraintes pour tester si le chemin est faisable et déterminer des valeurs d’entrée Comment éviter de tirer des chemins infaisables ? Comment détecter qu’un chemin est infaisable ? Que fait-on des chemins infaisables (on retire ?) Que fait-on si le critère de couverture ne se traduit pas facilement en termes de tirage de chemins ? Novembre 2008 Exposé Fortesse
SALLUSTE Optimisations adaptées à LUSTRE: Dépendances entre données Dépendances entre cycles temporels consécutifs Heuristiques de résolution de contraintes Traduction de la spécification Lustre en structures combinatoires Génération basée sur le dépliage d’opérateurs Lustre Novembre 2008 Exposé Fortesse
AUGUSTE Test unitaire de programmes impératifs: techniques de compilation (traduction optimisée) critères de couvertures classiques benchmark de la méthode Novembre 2008 Exposé Fortesse
Auguste: principe général Programme n Critère N Compilateur en une (ou plusieurs) spécifications de structures Combinatoires Si besoin, calcul de la distribution sur les éléments du critère Tirages de N chemins (précédé, si besoin, du tirages de N éléments du critère) Construction des prédicats des N chemins Résolution Échec(s) de résolution? N données de test Novembre 2008 Exposé Fortesse
AUGUSTE – V0: architecture logicielle Programme C-like, N, Nb, critère Dénombrement Resolution de Systèmes Linéaires Tirage Génération de code C Calcul d’automates (Ce,e’) Analyse syntaxique Transformation(s) S.C. Génération de S.C. ensemble de chemins Tirage Construction des prédicats De cheminement Résolution de contraintes Prédicat de chemin * Valeurs d’entrée / Échec(s) Jeu de N tests Novembre 2008 Exposé Fortesse
AUGUSTE – V1: architecture logicielle Programme C-like, N, Nb, critère Dénombrement Resolution de Systèmes Linéaires Tirage Génération de code C Calcul d’automates (Ce,e’) CIL S.C. Génération de S.C. ensemble de chemins Tirage Construction des prédicats De cheminement Résolution de contraintes Prédicat de chemin * Valeurs d’entrée / Échec(s) Jeu de N tests Novembre 2008 Exposé Fortesse
FCT4 Choix de n ? n ≥ 6 + 12 x 19 => n ≥ 234 > 1030 chemins à considérer, bcp de chemins infaisables Novembre 2008 Exposé Fortesse
Transformation de la structure combinatoire Deux sous-graphes indépendants mauvaise couverture Novembre 2008 Exposé Fortesse
All-vertices and all-edges First naive approach: Draw uniformly N elements e1, …, eN among those to be covered For each ek, generate a path among those traversing ek, of length ≤ n Let S be the set of elements to be covered (statements, branches, …); eS, the probability of e to be activated is where is the nb of paths traversing e and is the nb of paths traversing both e and e’ Master Rech, 2006
Test Quality What does it mean to “satisfy” a coverage criteria in a randomised framework? The test quality qN is the weakest probability that any element of S has to be covered when N tests are exercised qN =1-(1- pmin)N where pmin = min{p(e), eS} Master Rech, 2006
How to increase mineS p(e) ? By drawing non uniformly from S: let S = {e1, …, em}, and p(ei) the probability of ei let , then Given the ci,j, the problem of finding the values {p(e1) , …, p(em)} such that: min{p(ei), i = 1, …, m} is maximum and p(e1) + …+ p(em) = 1 is a classical one in combinatorial optimisation Master Rech, 2006
PB : Maximise pmin under these constraints This optimisation problem is solved by a Simplex algorithm. The p1(ei) give the distribution for drawing from S Calculate the distribution is similar to maximise pmin under these constraints. This optimisation problem can be solved by a Simplex and the p1(ei) deduced. Master Rech, 2006
Extensions à Auguste « Industrialisation » du prototype Test de différents solveurs de contraintes Passage à un sous-ensemble de vrai C Extensions « syntaxiques » Extensions « sémantiques » Annotations intelligentes de programmes C Apprentissage des chemins infaisables Traduction plus « fine » en structures combinatoires Transformations de la structure combinatoire Analyse statique et évaluation symbolique Program slicing Autres méthodes de tirage aléatoires (cas non rationnels) Novembre 2008 Exposé Fortesse