• Aucun résultat trouvé

Opérateurs de mutation concernant la navigation:

3.2 Opérateurs de mutation dédiés aux transformations de modèles

3.2.1 Opérateurs de mutation concernant la navigation:

a- Remplacement d’une relation vers une même classe (RRMC) :

Cet opérateur remplace la navigation d’une relation vers une classe par la navigation d’une autre relation vers la même classe.

RRMC : Si la transformation comporte une opération de navigation d’une relation φ définie de

la classe X à la classe Y et s’il existe une autre relation σ entre X et Y alors la navigation de φ est remplacée par la navigation de σ. Tous les remplacements possibles sont effectués, chacun créant un mutant.

Par exemple, si uneClass, uneAssoc, et uneTable sont respectivement des instances de

Class, de Association, et de Table :

Opération de navigation originale Opération de navigation mutante

uneClass.parent uneClass.src uneClass.children uneClass.parent uneAssoc.dest uneAssoc.src uneTable.pkey uneTable.cols

Tableau 3-1- Exemples d'application de RRMC

La navigation d’une mauvaise relation définie vers la même classe peut avoir différentes conséquences en fonction de la cardinalité des relations (celle naviguée par le mutant et celle

qui aurait dû l’être). Le remplacement de uneClass.parent par uneClass.children

conduit à une différence de cardinalité puisque la navigation de la relation parent renvoie une seule instance de Class alors que la navigation de children renvoie un ensemble d’instance de Class. Selon l’opération qui sera appliquée sur le résultat de cette navigation et selon le langage d’implantation utilisé, la différence de cardinalité peut bloquer la suite de la transformation et être mise en évidence à l’exécution sans attendre que l’oracle compare les résultats de la transformation et du mutant. Par contre le remplacement de uneTable.pkey par

uneTable.cols conduit à une erreur pertinente : les deux retournant une collection d’instances de Column. C’est aussi le cas pour uneAssoc.src qui comme uneAssoc.dest retourne une instance de Class. Si ces fautes étaient commises par le développeur, elles ne seraient pas systématiquement révélées pendant la mise au point du programme car le reste de la transformation n’est pas affecté.

b- Remplacement d’une relation vers une autre classe (RRAC) :

Cet opérateur remplace la navigation d’une association vers une classe par la navigation d’une autre association vers une autre classe.

RRAC : Si la transformation comporte une opération de navigation d’une relation φ définie de

la classe X à la classe Y et s’il existe une relation σ entre X et une classe Z différente de Y alors la navigation de φ est remplacée par la navigation de σ. Tous les remplacements possibles sont effectués, chacun créant un mutant.

Par exemple, si uneClass et uneTable sont respectivement des instances de Class et de

Table :

Opération de navigation originale Opération de navigation mutante

uneClass.children uneClass.attrs uneClass.parent uneClass.attrs uneTable.pkey uneTable.fkeys

Tableau 3-2- Exemples d'application de RRAC

La navigation incorrecte d’une relation définie vers une autre classe peut avoir des conséquences plus importantes que celle vers une même classe (RRMC). En effet, les objets retournés par les opérations originales et mutantes sont des instances de classes de types différents. Ainsi il est plus complexe pour la transformation de poursuivre si les traitements effectués sur les objets résultants de la navigation sont spécifiques à leur type. Cependant, les classes définies dans les méta-modèles peuvent avoir des attributs identiques. C’est le cas du premier exemple puisque les classes Class et Attribute ont le même attribut name. Ces cas sont fréquents si les classes appartiennent au même arbre d’héritage. Dans ce cas elles héritent des mêmes propriétés et des mêmes méthodes dont le comportement peut changer en étant redéfini. Dans ces différents cas, cet opérateur est pertinent en ne bloquant pas l’exécution des opérations qui suivraient l’opération mutée. Nous retrouvons cependant comme précédemment (RRMC) les préoccupations de différences de cardinalités des relations naviguées.

57 Opérateurs de mutation dédiés aux transformations de modèles

c- Modification d’une succession de navigation avec manque (MSNM) :

Pendant la navigation, la transformation peut naviguer successivement plusieurs relations. Cet opérateur supprime la dernière étape d’une navigation composée.

MSNM : Si la transformation comporte une succession d’opérations de navigation non

interrompue par une opération d’un autre type alors la dernière opération de navigation est retirée. Tous les retraits possibles sont effectués, chacun créant un mutant.

Par exemple, si uneAssoc est une instance de Association : Succession originale d’opérations de

navigation

Succession mutante d’opérations de navigation

uneAssoc.dest.parent uneAssoc.dest uneAsso.dest.attrs.type uneAsso.dest.attrs

Tableau 3-3- Exemples d'application de MSNM

Cet opérateur conduit aux mêmes cas de figure que l’opérateur RRAC, ce qui justifie sa pertinence.

d- Modification d’une succession de navigation avec ajout (MSNA) :

Cet opérateur réalise le contraire de MSNM, il ajoute une étape à une navigation déjà composée d’une ou plusieurs opérations de navigation ininterrompues.

MSNA : Si la transformation comporte une opération de navigation ou une succession

d’opérations de navigation non interrompue par une autre sorte d’opération, si la dernière opération de navigation renvoie des instances d’une classe X, s’il existe une relation σ définie sortante de X, alors une opération de navigation naviguant σ est ajoutée. Tous les ajouts possibles sont effectués, chacun créant un mutant, produisant autant de mutant que de relation sortant de X.

Par exemple, si uneAssoc et uneClass sont des instances de Association et de Class : Opération ou succession originale

d’opérations de navigation

Succession mutante d’opérations de navigation uneAssoc.dest.children uneAssoc.dest.parent uneAssoc.dest uneAssoc.dest.attrs uneClass.parent.attrs uneClass.parent.attrs.type

Tableau 3-4- Exemples d'application de MSNA

La pertinence de cet opérateur est justifiée car il conduit aux mêmes cas que RRAC.