• Aucun résultat trouvé

Le premier objectif de cette section est de discuter des propriétés de non interférence à ob- server. Nous discutons également des caractéristiques d’observabilité des langages nécessaires pour détecter les problèmes d’interférence à l’aide d’assertions exécutables. Nous montrons que les opérateurs de composition fournis par un langage de programmation orienté aspects constitue la pierre angulaire de l’observabilité et donc de notre capacité à instrumenter notre code afin d’observer des propriétés de non interférence.

et, pour chaque propriété, nous identifions l’ensemble des points d’observation dans le cycle de vie d’un greffon, permettant la vérification de cette propriété.

Nous discutons ensuite de l’observabilité de ces propriétés de non-interférence dans les langages de programmation orientés aspect.

4.2.1 Propriétés de non-interférence

Suivant la classification des interférences donnée dans le chapitre 2, nous avons identifié quatre propriétés représentant des interférences de type flot de données ou flot de contrôle, à un point de jonction j pi et pour un greffon Ai. Ces propriétés peuvent être décrites comme

suit :

– détection des changements avant (Change Before CB) : Il n’y a pas de modification d’une variable v du code de base utilisée par Ai, par un autre aspect exécuté avant Ai.

– détection des changements après ( Change After CA) : Après l’exécution de Ai, il n’y a pas

de changement d’une variable v utilisée par Ai, par un autre aspect suivant Ai.

– détection des invalidations avant (Invalidation Before IB) : Tous les aspects exécutés avant Ai, n’empêchent pas l’exécution de Ai.

– détection des invalidations après (Invalidation After IA) : Le point de jonction j pi doit

toujours être exécuté après Ai.

Notons que ces propriétés peuvent être vérifiées pour les parties avant et après des greffons. Cependant, la détection d’une interférence de type IA n’a pas de sens sur la partie après des greffons d’une chaine d’aspects.

La figure4.1représente le cycle de vie d’un greffon de type before Ai appliqué avant un

point de jonction j pi, où plusieurs aspects sont attachés. Depuis l’exécution du niveau de base,

l’ événement Æ déclenche une série de greffons avant Ai. Lorsque Aise termine, la transition ∞

déclenche l’exécution d’un ensemble de greffons après Ai. La transition ± représente le déclen-

chement de l’exécution du point de jonction dans le code de base, et la transition ±0l’exécu- tion de la séquence de greffons après l’exécution du point de jonction au niveau de base. Nous considérons aussi deux transitions, notées ¡ qui représentent deux comportements possibles lorsque le flot de contrôle revient à son niveau de base :

– l’ensemble des aspects exécutés avant Ai empêchent l’exécution de Ai et du point de

jonction ;

– l’ensemble des aspects exécutés après Aiempêchent l’exécution du point de jonction ;

Cet automate générique représente les points de contrôle qui doivent être observés pour la vérification des propriétés mentionnées ci-dessus dans la partie avant d’une chaine de gref- fons. Il est à noter que nous supposons que la variable v est n’importe quelle variable accessible depuis Ai.

– La détection de CB commence lorsque la chaîne d’aspects est déclenchée (la transition Æ est observée et v est stockée). La vérification que la variable v n’est pas modifiée s’effec- tue en Ø, sauf si ¡ est observée au lieu de Ø.

– La détection de CA est déclenchée en ∞ et la vérification que la variable v n’est pas modi- fiée se fait à ±, à moins que l’on n’observe ¡.

– La détection de IB commence avec Æ, et Ø doit être observée. Si ¡ est observée au lieu de Øalors la vérification se termine et une erreur est générée.

– La détection de la IA commence lorsque ∞ est observée, le comportement correct est déterminé par l’observation de ±. Si ¡ est observée au lieu de ± alors la vérification se

Ai#

α

β

γ

δ

jpi#

Φ

δ’

Φ

Τ Autres greffons Autres greffons Arrivée au point de jonction jpi α Ai commence son exécution β Ai finit son exécution γ Suppression du point de jonction jpi Φ L’exécution de jpi commence

dans le code de base

δ δ’ Jpi finit son exécution

Legende#

FIGURE4.1 – Cycle de vie d’un greffon de type before

termine et une erreur est générée.

Le tableau4.1identifie les observations nécessaires pour la vérification des quatre proprié- tés de non-interférence portant sur la partie avant de Ai.

TABLE4.1 – Point d’observation requis pour la vérification de propriétés de non interférence

`````````` ```` Propriété Transition Æ Ø ± ¡ CB X X X CA X X X IB X X X IA X X X

De façon similaire on peut faire la même analyse sur la partie après des greffons d’une chaîne d’aspects.

Ces propriétés de non interférence ne sont pas observables dans tous les langages de pro- grammation orientés aspect. De toute évidence, lorsque des événements définis ci-dessus ne peuvent pas être observés, cela a un impact fort sur la vérification des propriétés de non- interférence.

Dans ASPECTJ, Ø et ∞ peuvent être observés, mais il n’y a pas de point explicite dans le flot

de contrôle qui représente le début ou la fin d’une chaîne d’aspects. En conséquence, ni Æ ni ¡ et ± ne sont observables, aucune des propriétés précédentes ne peut être observée.

Dans AIRIAou dans REFLEX les différentes transitions sont observables ce qui permet de les instrumenter. La vérification des propriétés de non-interférence que nous considérons né- cessite un accès explicite à certains points dans le flot de contrôle de la chaîne d’aspects, en particulier la transition entre le code de base et de la chaîne d’aspects.

Nous avons montré par un graphe simple représentant une chaîne de greffons de type "avant", que tous les points d’observation peuvent être facilement identifiés. La définition des assertions exécutables peut être directement dérivée de l’expression des propriétés du flot de données et de flot de contrôle attendues. Nous avons constaté que ces propriétés ne sont pas observables dans tous les langages de programmation orientée aspect, mais que AIRIAet RE-

FLEXpermettent leur observation.

Finalement AIRIAprésente de nombreux avantages : la capacité de composer les greffons de manière flexible (discutée au chapitre 2) et l’observabilité nécessaire pour l’observation des propriétés de non interférence à l’exécution.