• Aucun résultat trouvé

Modèle UML et graphes

Dans le document en fr (Page 106-108)

alternatifs dans un modèle

I. Techniques de détection de fragments

I.1. Modèle UML et graphes

Dans le contexte de nos travaux, modèle, patron de conception et patron abîmé sont, tous trois, décrits par la notation UML 1.5 [OMG03]. Cette dernière nous a été imposée par la plate-forme que nous utilisons pour exécuter les requêtes de détection. Dans le but de permettre l’échange de modèles et la collaboration avec des outils de modélisation, le format XMI *OMG07+ peut être utilisé étant donné que c’est un format normalisé. Cependant, même si chaque outil de modélisation utilise à sa manière ce format, créant des problèmes d’interopérabilité, nous l’avons tout de même choisi, afin de regrouper sous un même format modèle à analyser, patron de conception et patron abîmé. Le format XMI permet une représentation XML [Bray06] des différents diagrammes UML existants, chaque balise XML reprenant un élément du métamodèle utilisé par le modèle UML.

Ce format étant fondé directement sur le métamodèle, nous considérons qu’un modèle, un patron de conception et un patron abîmé sont exprimés en fonction des métaclasses qu’ils utilisent. Ainsi, de par la forme et les caractéristiques du métamodèle, nous considérons qu’il est possible de représenter les modèles par des graphes orientés. Ces graphes UML préservent la structure des modèles, car ils sont composés de sommets typés représentant à la fois les classes et les relations entre les classes. Les arcs, quant à eux, servent à indiquer le sens de la relation. Dans notre cas, comme nous ne nous intéressons qu’aux classes, qu’aux associations et qu’aux généralisations, nous avons une représentation centrée sur la structure de nos modèles et de nos patrons. La figure 3.1 est un exemple de représentation d’un patron abîmé sous forme de graphe.

Figure 3.1 : Un patron abîmé et sa représentation sous forme de graphe

Dans cet exemple, le patron abîmé est un graphe orienté simple, avec les sommets C, F et Co, respectivement Composant, Feuille et Composite, puis les ensembles de sommets {A}, {AE}, {G} et {S}, respectivement Association, AssociationEnd, Generalization et

Specialization du métamodèle UML.

Comme nous considérons nos modèles UML comme des graphes, nous pouvons reformuler notre problématique de recherche de contextualisation de patrons abîmés dans un modèle à un problème d’identification de sous-graphes dans un graphe. Il existe deux principales approches de recherche dans des graphes. La première, le pattern matching

C Co F S G S G A A AE AE COMPOSITE-0..1 AE NONE-0..* COMPOSITE-0..1 AE NONE-0..* Composant Feuille Composite * *

exact, consiste à retrouver exactement un sous-graphe donné [Ullmann76], la seconde, le pattern matching approché, consiste à identifier les sous-graphes ressemblant plus ou moins à un graphe donné [Bengoetxea02].

I.1.1. Pattern matching exact

Les problèmes de pattern matching exact consistent à retrouver dans un graphe les sous-graphes identiques à un graphe modèle. Pour ce faire, il existe des algorithmes permettant d’identifier dans un graphe tous les sous-graphes isomorphes à un graphe donné. Par exemple, considérons un graphe A dans lequel la recherche doit être effectuée, et un graphe B représentant le graphe recherché. Ces algorithmes comparent le graphe B à toutes les combinaisons de sous-graphes possibles de A, jusqu’à trouver une correspondance parfaite entre la combinaison trouvée et le graphe B. Ainsi, l’application de tels algorithmes requiert l’examen de tous les sous-graphes possibles qui ont le même nombre de sommets et d’arrêtes que le graphe recherché, ainsi que la même configuration, ce qui rend ce problème NP-complet [Ullmann76].

Pour notre problématique, nous pouvons dire que nous ne nous inscrivons pas dans les problèmes de pattern matching exact. En effet, il est important de rappeler qu’un patron abîmé est une base génératrice d’une famille de contextualisations possibles. Ainsi, nous ne recherchons pas exactement le patron abîmé, mais une de ses contextualisations, dont on ne connaît pas la forme par avance. Le pattern matching exact de graphes ne concerne donc pas notre problème d’autant que nous ne pouvons pas envisager de rechercher toutes les formes possibles de contextualisations dans un graphe.

I.1.2. Pattern matching approché

Cette approche, concernant l’identification de sous-graphes ressemblant au graphe recherché, est très utile lorsqu’un isomorphisme entre deux graphes n’a pas pu être trouvé. Les algorithmes de pattern matching approché permettent de trouver la meilleure correspondance entre deux graphes non isomorphes. Par exemple, certains algorithmes calculent la distance entre deux graphes, cette distance étant souvent exprimée en nombre de modifications qu’il est nécessaire d’effectuer pour transformer un graphe vers le graphe comparé [Tsantalis06]. Ainsi, si un sous-graphe ne nécessite que deux opérations de transformation pour être isomorphe au graphe recherché, il est sélectionné prioritairement à un sous-graphe dont le nombre de modifications serait plus élevé. Vis-à-vis d’un contexte de détection de patrons de conception, ces algorithmes reviennent à rechercher les fragments de modèle ressemblant au patron recherché.

Dans notre contexte de recherche de patrons abîmés, ce type d’algorithme est plus intéressant, car il nous permet de détecter les fragments structurellement proches du patron abîmé recherché. Cependant, cela n’est pas suffisant, car nous ne recherchons pas les fragments les plus ressemblants au patron abîmé, mais les fragments ressemblant exactement à une contextualisation d’un patron abîmé. Un patron abîmé est défini de la même manière qu’un patron de conception, avec, en supplément, un ensemble de points

d’extension et de liens interdits. Les points d’extension nous permettent de définir à l’avance toutes les formes possibles, en indiquant par exemple quels sommets du graphe peuvent se répéter dans la contextualisation. Les liens interdits nous permettent également de préciser si des formes sont incompatibles avec le patron abîmé.

Nous présentons maintenant trois techniques de détection utilisées dans un contexte proche de notre problématique. Les deux premières concernent l’identification de patrons de conception à des fins de redocumentation, et la troisième l’identification de problèmes de conception solubles par l’utilisation de patrons de conception.

Dans le document en fr (Page 106-108)