• Aucun résultat trouvé

6.7 Une contribution outillée : Pacogen

6.7.1 Implémentation

L’implémentation de l’approche à contraintes proposée est faite dans un logiciel appelé Pacogen (PAirwaise COnfiguration GENeration). L’application est développée en Prolog et Java et fait environ 7 000 lignes de code. Ce logiciel utilise la librairie SICStus Prolog clpfd qui permet de résoudre des problèmes d’optimisation à l’aide des techniques de programmation par contraintes. Pacogen est disponible en téléchargement libre2. Pacogen est fait de quatre composants, présentés figure 6.26. Cette figure présente l’architecture globale de Pacogen, les relations entre les composants et les paramètres utilisés. Chaque composant est détaillé ci-dessous :

1. Analyseur de modèle transforme un modèle de features en un modèle à con- traintes. Ce composant transforme toutes les relations du modèle de features en un ensemble de contraintes Prolog. Il réalise l’étape Transformation en modèle à contraintes du processus figure 6.1.

Ce module prend en entrée des modèles exprimés dans deux formats :

– le format .sxfm : format utilisé par le dépôt de modèle de features SPLOT [MBC09]. La lecture du format sxfm permet à Pacogen de lire tous les modèles qui ont été créés via le site web de Splot, soit plus de 300 modèles.

– le format .xmi : format dans lequel sont enregistrés les instances du métamo- dèle proposé par Perrouin et al. [PKGJ08] présenté section 3.2.2. La capacité à pouvoir lire des instances du métamodèle proposé par Perrouin et al. permet à Pacogen une compatibilité avec de nombreux formats. C’est un métamodèle du langage proposé par Schobbens et al. [SHTB07]. Ce langage est une générali- sation de plusieurs langages existants. Ainsi, il est possible d’exprimer dans ce langage des modèles de features issus de formalismes différents.

La figure 6.27 est un exemple de modèle à contraintes généré, ce modèle à con- traintes est issu du modèle de features présentés dans la figure 6.2.

Le paramètre FListe représente la liste des features, CListe représente les re- lations entre les features. Ces relations sont exprimées à l’aide des contraintes utilisateurs que nous avons présentées dans la figure 6.9 (and(A, [B, C, ...])...). La méthode solver est l’appel au solveur de contraintes, elle déclenche le processus de résolution. Sa signature est la suivante :

solver(F Liste, CListe, T aille, T ri, Enum, T emps, M inimization). Cette méthode a sept paramètres : FListe - la liste des features, CListe - la liste des contraintes, Taille -la taille de la matrice. Les valeurs à utiliser pour ces différents paramètres seront étudiées section 7.1.4. Les paramètres Tri et Enum permettent à l’utilisateur de choisir la fonction de tri et la technique d’énumé- ration. Le paramètre Temps permet à l’utilisateur de spécifier le temps dédié à la minimisation. En pratique, la valeur de ce paramètre est choisie en fonction du temps disponible pour les activités de test et du temps nécessaire pour tester chaque configuration. Il est par exemple inutile d’allouer plusieurs heures pour la minimisation alors que le temps nécessaire pour tester une configuration n’est que de quelques secondes. Au contraire si le temps nécessaire pour tester une configura- tion est de l’ordre de la journée ou de la semaine, il devient pertinent d’augmenter le temps de minimisation de façon à réduire le nombre de configurations à tester. Le paramètre Minimization permet à l’utilisateur de sélectionner la fonction de minimisation : f1ou f2. Si les paramètres ne sont pas spécifiés par l’utilisateur, des valeurs par défauts sont utilisées. La figure 6.27 présente un appel à la méthode solveur, pour une matrice de taille 100, un tri des paires : profondeur_pere, une technique d’énumération first-fail ([ff]), un temps de minimisation de 50000 ms et une fonction de coût f1.

2. Vérificateur de cohérence va produire la Matrice Solution contrainte destinée à accueillir les paires valides. La matrice est de taille K × N , où K est le nombre de colonnes, égal au nombre de features et N le nombre de lignes, défini par l’uti- lisateur, qui représente le nombre de configurations maximal. La Matrice Solution créée est présentée figure 6.12. Ce composant réalise l’étape Création de la Matrice Solution du processus figure 6.1.

FListe = [Env, OS, Browser, 32Bits,64Bits, Win2000,WinXP,WinVista, WinXP64,WinVista64, FF15,FF2,IE55] CListe = and(Env,[OS]), opt(Env,[Browser]), xor(OS,[32Bits,64Bits]), xor(32Bits,[Win2000,WinXP,WinVista])„ xor(64Bits,[WinXP64,WinVista64]), or(Browser,[FF15,FF2,IE5.5]), mutex(64Bit,Firefox15),

solver (FListe, CListe, 100, profondeur_pere,[ff],50000,f1).

Figure 6.27 – Modèle à contraintes généré dans le cas C3S

3. Le Générateur de contraintespairwise prend en entrée la Matrice Solution et crée un ensemble de contraintes pairwise permettant de couvrir toutes les paires du modèle de features. Ce composant réalise l’étape Génération des contraintes Pairwise du processus figure 6.1.

4. Le générateur de configurations en temps contraint déclenche la résolu- tion du problème d’optimisation. Il réalise la partie Algorithme de résolution des contraintes du processus 6.1. Il permet d’obtenir un ensemble de configurations couvrant toutes les paires existantes. Le processus de résolution remplit la Matrice Solution en assignant à chaque rang des paires générées une valeur. A la fin de la résolution, la matrice ne contient que des configurations valides couvrant pairwise. Dans ce processus, le temps de minimisation est optionnel. Si un temps est fourni, Pacogen minimisera durant ce temps imparti et retournera la meilleure solution qu’il ait pu trouver. Si aucun temps n’est fourni en entrée, Pacogen minimisera jusqu’à ce que le minimum de configuration ai été trouvé. Cependant comme le nombre de façons d’arranger les paires dans la matrice est très élevé, il est possible que le temps de minimisation nécessaire pour trouver le minimum global soit très important (de l’ordre de la semaine ou du mois). Les configurations générées sont fournies au format CSV.