• Aucun résultat trouvé

Qualités des fonctions d’oracle

4.5 Qualification de chaque fonction d’oracle

4.5.2 Qualités des fonctions d’oracle

En fonction des propriétés de chaque fonction d’oracle, leurs qualités varient, comme illustrée dans le tableau 4-9. Nous allons discuter les valeurs de ce tableau dans cette sous- section en considérant successivement chaque fonction d’oracle.

Fonction d’oracle Complexité et risque d’erreur Réutilisation avec différentes versions o1 (transformation de référence) C C o2 (transformation inverse) C C o3 (modèle attendu) B C o4 (contrat générique) B B- o5 (assertion OCL) B+ A-

o6 (assertion avec patterns

utilisant des model snippets) A- A

Tableau 4-9 - Fonctions d'oracle avec leurs qualités

a- Qualités de la fonction d’oracle utilisant des transformations :

En employant les fonctions d’oracle o1 et o2 qui utilisent des transformations comme données d’oracle, la complexité de ce type d’oracle est importante et entraîne un risque élevé d’erreur. En analysant les différentes propriétés des oracles qu’elles permettent de définir (tableau 4-8), nous les mettons en rapport avec les qualités souhaitées dans les graphiques de la figure 4-14. Nous y voyons que l’aire représentant l’influence des propriétés sur la complexité et le risque d’erreur (à gauche) est très largement recouverte par l’aire des propriétés de ce type

107 Qualification de chaque fonction d’oracle

d'oracle. En revanche l’aire représentant l’influence des propriétés sur la réutilisation (à droite) l’est très peu. grande taille de chaque oracle important couplage de chaque oracle importante redondance de chaque oracle importante redondance de l'ens. des oracles important couplage de l'ens. des oracles grande taille de l'ens. des oracles

petite taille d'un oracle faible complétude d'un oracle faible redondance dans un oracle faible couplage d'un oracle

Figure 4-14 - Influence des valeurs des propriétés d'oracles utilisant des transformations sur la complexité et le risque d'erreur à gauche et sur la réutilisation à

droite

Ainsi nous attribuons la qualité « C » concernant le risque d’erreur et également « C » concernant la réutilisation avec une nouvelle version d’un oracle défini avec les fonctions d’oracle o1 et o2 (tableau 4-9).

Pour cette raison, nous ne recommandons pas d’utiliser ces fonctions d’oracles. Cela n’est envisageable que dans les cas où la donnée d’oracle (la transformation de référence ou inverse) est disponible. Ainsi, l’oracle défini peut être utilisable dans n’importe quel cas de test parce qu’il est générique. Néanmoins, la transformation disponible doit elle-même avoir été vérifiée pour servir de donnée d’oracle.

b- Qualités de la fonction d’oracle utilisant des contrats génériques :

Nous distinguons un contrat de complétude totale et des contrats de complétudes partielles. Le premier cas est entièrement défavorable. Nous constatons dans les graphiques de la figure 4-15 que définir un contrat de complétude totale est particulièrement complexe et donc risqué. De plus, ce contrat est difficilement réutilisable.

En revanche, si l’utilisation de plusieurs contrats de complétude partielle implique aussi une forte complexité (figure 4-16), chacun est plus facilement réutilisable.

Ainsi, nous ne conseillons pas d’utiliser des contrats dans le but de vérifier complètement la transformation, en particulier avec un seul contrat complet. Néanmoins, il est possible de les utiliser en décomposant les vérifications, ce qui permettra de les créer plus et de les réutiliser plus facilement.

oracles utilisant un contrat de complétude totale. Ainsi nous attribuons les qualités B pour la complexité et B- pour la réutilisation des oracles définis à partir de la fonction d’oracle o4.

grande taille de chaque oracle important couplage de chaque oracle importante redondance de chaque oracle importante redondance de l'ens. des oracles important couplage de l'ens. des oracles grande taille de l'ens. des oracles

petite taille d'un oracle faible complétude d'un oracle faible redondance dans un oracle faible couplage d'un oracle

Figure 4-15 - Influence des valeurs des propriétés d'oracles utilisant des contrats génériques de complétude totale sur la complexité et le risque d'erreur à gauche et sur

la réutilisation à droite grande taille de chaque oracle important couplage de chaque oracle importante redondance de chaque oracle importante redondance de l'ens. des oracles important couplage de l'ens. des oracles grande taille de l'ens. des oracles

petite taille d'un oracle faible complétude d'un oracle faible redondance dans un oracle faible couplage d'un oracle

Figure 4-16 - Influence des valeurs des propriétés d'oracles utilisant des contrats génériques de complétude partielle sur la complexité et le risque d'erreur à gauche et

sur la réutilisation à droite

c- Qualités de la fonction d’oracle utilisant des modèles attendus :

Définir des oracles avec des modèles attendus est une solution classique. Elle permet de modulariser les vérifications en prenant en compte les modèles de test (grâce à la non généricité et la complétude semi-totale). La complexité pour définir ces oracles est moins importante même si le dépassement que nous constatons dans le graphique de la figure 4-17 concernant la taille de l’ensemble des données d’oracle peut être un problème si les modèles de test sont nombreux et grands. En revanche la réutilisation de ce type d’oracle est limitée, comme nous le voyons sur le graphique de droite de la figure 4-17.

109 Qualification de chaque fonction d’oracle

Ainsi, nous attribuons la qualité B pour le risque d’erreur et C pour la réutilisation d’oracles définis à partir de la fonction d’oracle o3.

grande taille de chaque oracle important couplage de chaque oracle importante redondance de chaque oracle importante redondance de l'ens. des oracles important couplage de l'ens. des oracles grande taille de l'ens. des oracles

petite taille d'un oracle faible complétude d'un oracle faible redondance dans un oracle faible couplage d'un oracle

Figure 4-17 - Influence des valeurs des propriétés d'oracles utilisant des modèles attendus sur la complexité et le risque d'erreur à gauche et sur la réutilisation à droite L’utilisation d’un même oracle pour la vérification d’une même version de la transformation peut rarement se produire si la transformation n’est pas injective.

d- Qualités de la fonction d’oracle utilisant des assertions OCL :

L’utilisation de la fonction d’oracle o5 utilisant des assertions OCL a de bonnes qualités. Nous constatons dans les graphiques que l’aire de la complexité est peu couverte alors que l’aire de la réutilisabilité l’est presque entièrement. Les oracles définis avec cette fonction permettent de cibler précisément des vérifications à réaliser. Cela les rend modulaires et leur donne de bonnes qualités. Nous attribuons la qualité B+ pour risque d’erreur et la qualité A- pour la réutilisabilité d’oracles formés à partir de la fonction d’oracle o5.

grande taille de chaque oracle important couplage de chaque oracle importante redondance de chaque oracle importante redondance de l'ens. des oracles important couplage de l'ens. des oracles grande taille de l'ens. des oracles

petite taille d'un oracle faible complétude d'un oracle faible redondance dans un oracle faible couplage d'un oracle

Figure 4-18 - Influence des valeurs des propriétés d'oracles utilisant des assertions OCL sur la complexité et le risque d'erreur à gauche et sur la réutilisation à droite

e- Qualités de la fonction d’oracle utilisant des assertions avec patterns de model snippets: grande taille de chaque oracle important couplage de chaque oracle importante redondance de chaque oracle importante redondance de l'ens. des oracles important couplage de l'ens. des oracles grande taille de l'ens. des oracles

petite taille d'un oracle faible complétude d'un oracle faible redondance dans un oracle faible couplage d'un oracle

Figure 4-19 - Influence des valeurs des propriétés d'oracles utilisant des assertions avec patterns de model snippets sur la complexité et le risque d'erreur à gauche et sur

la réutilisation à droite

Enfin, la fonction d’oracle o6 a les meilleures qualités. Nous constatons dans les graphiques que l’aire de la complexité est la plus petite alors que l’aire de la réutilisabilité est entièrement recouverte. Nous attribuons donc la qualité A- au risque d’erreur et A à la réutilisation d’oracles définis à partir de la fonction d’oracle o6.

4.6 Conclusion

Dans ce chapitre, nous avons tout d’abord présenté la problématique de l’oracle pour le test de transformations de modèles. La complexité des transformations de modèles et des modèles qu’elles manipulent rend difficile l’écriture d’oracle. Nous introduisons six fonctions d’oracle qui exploitent les techniques de comparaison de modèles, de contrats et de pattern matching. Ces fonctions d’oracle exploitent différentes données d’oracle et se caractérisent par différentes propriétés qui nous permettent de les qualifier selon leur risque d’erreur et leur réutilisabilité. Toutes les valeurs que nous attribuons aux propriétés des oracles et aux qualités des fonctions ne sont pas des valeurs absolues, nous les avons évaluées par analyse et dans nos expériences. Nous les utilisons pour comparer les fonctions entre elles. Il en ressort que les fonctions qui introduisent de la modularité et permettent de décomposer les vérifications ont de meilleurs qualités. Les fonctions exploitant des données d’oracle de complétude totale sont inappropriées (les fonctions utilisant des transformations de modèles ou des contrats complets). En revanche, les fonctions les plus modulaires qui permettent de considérer des vérifications très précises sur des modèles choisis (pas de généricité) sont les plus intéressantes (les fonctions utilisant des patterns). Finalement les qualités techniques introduites par les model snippets que nous exploitons avantageusement pour la définition de données d’oracle donnent l’avantage à cette fonction d’oracle sur celle exploitant des assertions OCL.

5

Mise en œuvre et qualification de

composants de transformation de modèles

Dans les deux précédents chapitres, nous avons étudié et présenté nos deux principales contributions théoriques. Elles concernent l’adaptation de l’analyse de mutation et l’élaboration d’oracles pour le test de transformations de modèles. Dans ces deux contributions, nous avons étudié deux des principales phases du test : une technique de qualification des modèles de test et la vérification des modèles produits. Nous avons considéré des particularités d’une transformation qui rendent son test original : la réutilisation des transformations, la complexité des modèles manipulés, ou encore les opérations qu’elle réalise. Pour valider ces deux contributions qui participent pleinement à la fiabilisation de transformations de modèles, nous présentons dans ce chapitre une méthodologie globale pour le test de transformations de modèles.

Avec cette méthodologie globale, nous étudions la construction de composants de transformations de modèles. Ces composants intègrent à la fois les cas de test de la transformation et une spécification exécutable sous forme de contrats. Cette approche exploite directement l’analyse de mutation pour le développement de composants en mesurant leur niveau de confiance.

Nous utilisons également l’analyse de mutation dans d’autres travaux qui portent sur la définition de critères de test fonctionnels. Nous traitons ce point dans la dernière section de ce chapitre.

Pour la mise au point, l’application, et la validation des deux contributions théoriques, ainsi que pour l’application de la méthodologie étudiée dans ce chapitre, nous avons réalisé plusieurs développements logiciels. Ils se répartissent en trois contributions techniques. Tout d’abord, nous avons développé un système de contraintes dans le langage Kermeta permettant d’appliquer le design-by-contract et d’intégrer le support d’OCL. En plus du bénéfice apporté à tout utilisateur de Kermeta, ce travail nous permet de créer des oracles. Ensuite, nous avons développé un harnais de test qui permet d’exploiter les fonctions d’oracle proposées. Finalement, nous avons réalisé une plateforme expérimentale qui permet de mettre en

application l’analyse de mutation. Ces développements sont un travail important de cette thèse pour plusieurs raisons :

ƒ ils permettent d’illustrer l’application des contributions des précédents chapitres, ƒ ils facilitent la distribution et le transfert des techniques proposées,

ƒ ils contribuent à des travaux hors du contexte de cette thèse,

ƒ ils permettent de démontrer que nos contributions ont un champ d’application plus étendu que cette thèse et participent directement ou indirectement au test de transformations de modèles.

Dans ce chapitre, nous présentons dans la section 5.1 la méthodologie de construction de composants de transformations de modèles de confiance (ne considérant que ce genre de composant, nous abrègerons souvent cette expression). Dans la section 5.2, nous expliquons les contributions techniques de cette thèse. Dans la section 5.3, la méthodologie est expérimentée dans sa globalité avec la transformation class2rdbms. Finalement, dans la section 5.4, nous montrons comment nos travaux contribuent dans l’étude d’autres problématiques.

5.1 Construction de composants de transformation de modèles