• Aucun résultat trouvé

B.2.1

Aperçu

OPSBROWSER est le composant central de COSMOPEN. Grâce à lui, il est possible de maîtriser la profusion des informations obtenues par l’observation directe d’un système, en construisant des modèles « abstraits » adaptés aux possibilités humaines de synthèse et d’analyse. Le besoin de tels outils d’abstraction a été reconnu depuis longtemps par les chercheurs en génie logiciel [Chen et al. 1995], et OPSBROWSER n’est, à cet égard, pas nouveau. L’intérêt d’OPSBROWSER tient à la spécificité de certains de ses opérateurs, qui

ciblent directement l’analyse des interactions entre niveaux d’un système complexe.

OPSBROWSERse présente comme un mini–interpréteur de calculs sur des graphes issus de l’observation (structurelle ou dynamique) de programmes orientés objet ou procéduraux. L’utilisation de « variables de graphe » lui permet de combiner de manière élaborée plusieurs opérateurs élémentaires en des filtres arbitrairement complexes. Par exemple, le code sui- vant charge dans la variableAle graphe contenu dans le fichierjt .xml, dans la variableBle graphe du fichierorba us.xml, puis assigne le contenu deAà la variableC, avant d’ajouter le contenu deBàC(C←A;C←C∪B). Le graphe résultant est ensuite sauvegardé dans un fichierorba us-jt .xml. load jt .xml A load orba us.xml B assign A C add B C save C orba us-jt .xml

B.2.2

Graphes structurels et graphes comportementaux

Les graphes manipulés par OPSBROWSER sont de deux sortes : structurels et compor-

tementaux. Un graphe structurel, comme celui de la figure 5.18 page 103, reprend les informations d’un diagramme de classe UML (Unified Modeling Language [OMG 1999]) : les nœuds représentent des classes ou des types du programme analysé, les arêtes des liens d’héritage ou des associations. Un graphe comportemental capture quant à lui un ensemble d’invocations, obtenues à partir d’une observation in vivo de l’exécution d’un programme. Il peut être représenté de deux manières : sous forme d’arbre d’appels (représentation étendue) ou sous forme de diagramme d’interaction (représentation condensée). La fi- gure B.2 page suivante donne un exemple d’un même graphe comportemental représenté selon ces deux façons.

L’arbre d’appels traduit la suite des invocations et leur emboîtement telles qu’elles ont été observées à l’exécution du programme. Ainsi sur la figure B.2-a, l’on observe que le brin t1 a invoqué la méthode mB1 de la classe B depuis la méthode mA1 de la classe A.

(2) t1: B::mB1 (3) t2: A::mA2 t1 creates t2 (4) t1: C::mC1 t1 (5) t2: C::mC2 t2 (6) t2: B::mB2 t2 (1) t1: A::mA1 t1 A B (1) t1: mB1 C (4) t2: mC2 (2) t1: creates t2: mA2 (3) t1: mC1 (5) t2: mB2

(a) arbre d’appels (b) diagramme d’interaction FIG. B.2 :Deux représentations d’un même graphe comportemental

DansB::mB1, le brin t1 a ensuite créé le brin t2 dans la méthodemA2de la classeA, puis a invoqué la méthodemC1de la classeC. Les chiffres entre parenthèses sont des « estampilles temporelles » qui indiquent l’ordre global d’observation de chacune des invocations (une sorte de temps logique de l’observation). L’on voit ainsi que l’invocation à C::mC2par t2 se produit après l’appel àC::mC1par t1. Ces estampilles temporelles permettent de rendre compte de l’entrelacement des activités parallèles des différents brins.

La représentation sous forme d’arbre d’appels est facile à lire, mais peu compacte, et ne traduit pas la structure orientée objet du programme observé. C’est pourquoi nous avons implémenté dans OPSBROWSER une deuxième représentation, inspirée des diagrammes d’interaction d’UML. Nos diagrammes d’interaction ne suivent cependant pas scrupuleu- sement la norme UML, pour des raisons pratiques de compacité, au sens où nous ne représentons pas les objets interagissant, mais les classes correspondantes (figure B.2-b)3. Il est important de noter que cette seconde représentation, plus condensée, d’un graphe comportemental n’est qu’un mode de présentation, les structures manipulées en interne par OPSBROWSER restant celle d’un ensemble d’arbres d’appels. En particulier, tous les opérateurs d’OPSBROWSERtravaillent directement sur l’arbre d’appels et non pas sur le dia- gramme d’interaction. Cette précision est importante pour comprendre l’effet d’opérations de manipulation, puisque les arêtes d’un diagramme d’interaction correspondent en fait aux nœuds d’un arbre d’appels.

B.2.3

Les opérateurs proposés par OPSB

ROWSER

Les différents opérateurs de graphe, accompagnés de la version courte de leur description telle qu’elle est fournie par l’aide en ligne d’OPSBROWSER, sont indiqués sur la table B.1 page suivante. Ces opérateurs recouvrent des opérations classiques d’algèbre booléenne, comme

3OPSBROWSERgère cependant les informations relatives aux identités des objets, et il ne serait pas difficile d’étendre

manipulation des variables

lear removes all nodes from a graph variable. delete deletes a graph variable.

assign assigns the graph of a given variable to a second. print prints the nodes of a graph possibly using a pattern. opérateurs booléens

add adds a graph to another.

ex lude excludes the nodes of a given graph from a second.

abstra t abstracts away the nodes present in one graph from another graph. envlop computes the edge envelop of a graph.

remAlone removes the standalone nodes of a graph. opérateurs basés sur les correspondances de noms

put puts nodes from one graph to another w.r.t. a pattern. remove removes the nodes of a graph whose names match a pattern. absPatern abstracts away the nodes that match a pattern.

absSelf abstracts away internal calls for classes matching a pattern. opérateurs de traversées récursives

ba kward computes the backward closure of a graph. forward computes the forward closure of a graph.

spread union of the forward and backward closures of a graph. ba kN computes the backward set of a graph within a given depth. forwN computes the forward set of a graph within a given depth. spreadN computes the spread set of a graph within a given depth. opérateurs d’analyse structurelle

remHin removes the link of kind « superclass » from a graph. remUse removes the link of kind « usage » from a graph. analyse comportementale (utilisation du temps logique)

remAfter removes the event of a call graph that are subsequent to a given time. remBefore removes the event of a call graph that are prior to a given time. sli e puts nodes from one graph to another w.r.t. a time interval. leapOver leaps over calls based on temporal ordering

add(union) ou ex lude(complément)

4, que nous avons déjà rencontrées dans l’exemple donné page 129. À ces opérateurs qui travaillent directement sur deux variables de graphes, correspondent des opérateurs basés sur la reconnaissance de motifs dans les noms de nœuds (pattern matching). L’utilisation des noms de nœuds se révèle en effet très utile pour sélectionner la partie d’un modèle ayant trait à une classe, un brin ou un espace de nom particulier. Ainsi, si sur le graphe de la figure B.2 page 130, nous appliquons l’opération «remove C::*» (retrait de toutes les invocations faites sur la classeC), nous obtenons le nouveau graphe représenté sur la figure B.3 (de nouveau dans les deux représentations). L’on notera comment l’opération «remove C::*» s’applique aux nœuds de l’arbre d’appels, et comment elle se traduit sur le diagramme d’interaction.

(2) t1: B::mB1 (3) t2: A::mA2 t1 creates t2 (6) t2: B::mB2 (1) t1: A::mA1 t1 A B (1) t1: mB1 (2) t1: creates t2: mA2

(a) arbre d’appels (b) diagramme d’interaction Figure B.3 :Graphe de la figure B.2 après l’opération “remove C::*”

Nous ne pouvons, faute de place, détailler l’ensemble des opérateurs restants, dont la signification, pour la plupart, reste facilement compréhensible, au moins à qui est habitué à la manipulation de graphes (opérateurs de fermeture, opérateurs de retrait d’arêtes). Afin d’illustrer l’intérêt d’OPSBROWSERpour l’analyse de programmes multi-niveaux, nous nous concentrons dans la section qui suit sur deux types d’opérations qui lui sont spécifiques, le saut (opérateur leapOver dans la table B.1), et l’abstraction (opérateurs abstra t, absPatern, etabsSelf), en reprenant l’exemple des figures 5.16 et 5.17 de la page 101.