• Aucun résultat trouvé

4.3 G ÉNÉRATION DE SÉQUENCES DE FRANCHISSEMENT

4.3.2 Filtrage de l’ensemble des séquences de franchissement

Dans un réseau de Petri interprété, les prédicats sont des conditions associées aux transitions. La définition formelle de cette caractéristique a été décrite dans le chapitre 3 en section 3.3.2.3. Un prédicat qui est valide permet le franchissement de la transition qui doit être également valide. Par contre, un prédicat qui n’est pas valide ne permet pas le franchissement de la transition même si cette dernière est franchissable. Les séquences de franchissement générées lors de la première étape de notre démarche peuvent contenir des séquences qui ne sont pas valides étant donné que les prédicats associés à ces transitions n’ont pas été pris en compte.

4.3.2.1 Prédicats associés aux transitions

Nous avons défini un algorithme permettant de valider l’ensemble des séquences générées. Nous considérons une liste de conditions (ou prédicats) représentant une conjonction de conditions. Les expressions possibles dans les conditions sont normalisées. Nous étendons l’état d’un réseau de Petri à un couple (marquage, variables). Les séquences générées peuvent être franchies structurellement mais reste à valider les éventuelles conditions. En effet, les conditions qui ne sont pas validées éliminent les transitions correspondantes.

L’ensemble des séquences générées est composé de plusieurs séquences. Chaque séquence de franchissement est composée par plusieurs steps de franchissement. Chaque step est composé par plusieurs transitions franchies simultanément. Une transition est composée par un prédicat et une opération. Les étapes de validation de l’ensemble des séquences sont décrites dans la figure 4.78. En effet, pour valider un ensemble de séquences de franchissement, il faut parcourir cet ensemble pour valider les séquences une à une. Ensuite, pour valider une séquence, nous devons valider les steps de franchissement composant cette séquence. Enfin, les steps à leur tour sont composés de transitions qu’il faut valider également une à une en vérifiant les conditions associées par rapport à l’état courant du réseau de Petri.

Figure 4.78: Filtrage des séquences de franchissement 4.3.2.2 Opérations associées aux transitions

Dans la section 3.3.2.3 du chapitre 3, nous avons défini des opérations associées aux transitions du réseau de Petri interprété. Une opération s’exécute au franchissement d’une transition et correspond à l’affectation d’une nouvelle valeur à la variable concernée. Comme nous l’avons décrit précédemment, l’état du réseau de Petri est défini par un couple (marquage, variables système). L’exécution d’une opération change la valeur d’une variable donnée. Ainsi l’état courant du réseau change vers un nouvel état.

Les séquences de franchissement filtrées (en ajoutant les conditions des transitions) contiennent des steps de franchissement. Le step correspond à un franchissement simultané de plusieurs transitions. En prenant en compte les opérations associées à ces transitions, des situations de conflit peuvent apparaître. Par exemple, le franchissement parallèle de deux transitions engendre une exécution parallèle des deux opérations d’affectation associées à ces transitions. S’il s’agit de la même variable, nous nous retrouvons alors simultanément dans deux états différents du réseau de Petri.

Dans [David&Alla, 1992], les auteurs ont résolu le problème de conflit d’opérations de cette manière. Ils considèrent l’ensemble des états de l’environnement D=DD…Dk. C'est-à-dire que l’environnement contient un ensemble de k objets dont les Di représentent les états (si par exemple les objets sont les variables, alors Di représente le domaine de définition de la i-ème variable). Aussi, pour chaque opération Opi est donnée un ensemble d’indices Li, Li ⊆ {1,2…, k} et tel que Opi : Dw→Xw∈Li. C'est-à-dire, lors de son activation, , , , l’opération Opi

ne transforme que des objets correspondant aux indices de Li. Deux opérations Opi etOpj

sont ditscompatiblescompatibles si et seulement si Lcompatiblescompatibles i∩Lj=∅. Evidemment, lorsque deux opérations Opi et Opj sont compatibles, elles transforment des ensembles d’objets disjoints et on peut les activer en parallèle. En effet, si d=<d1, d2, …, dk> est l’état de l’environnement à un instant donné et deux opérations compatibles Opi et Opj sont activées en parallèle à partir de d, alors l’état d′=<d′1, d′2, …, d′k> atteint après leur activation est tel que

d′

s

= d

s

si s ∉

Li∪Lj et d′s égal à la composante de même indice de Opi

(<d

w

>

w∈Li

) si s ∈

Liou de Opj

(<d

w

>

w∈Lj

)

si s∈ L

j.

Par contre si Opi et Opj ne sont pas compatibles, on ne peut pas en principe savoir quel est l’état atteint par l’environnement lorsqu’elles sont appliquées en parallèle. Cette relation de compatibilité entre opérations permet de déterminer des ensembles d’opérations activables en parallèle : ce sont des ensembles d’opérations deux à deux compatibles étant donné que la relation de comptabilité n’est pas transitive (cf. Annexe F).

Dans nos travaux, nous considérons que les opérations opèrent sur le même ensemble de variables. Nous ne construisons pas des ensembles disjoints de variables afin de définir des opérations compatibles entre elles. Nous avons plutôt choisi de développer les séquences de steps de manière à ce qu’une seule transition soit franchie à la fois. C’est-à-dire dans nos séquences de steps filtrées et valides (suite à l’intégration des prédicats des transitions), nous nous nous nous autorisons le franchissement d’une seule transition à la fois dans un step donné

autorisons le franchissement d’une seule transition à la fois dans un step donnéautorisons le franchissement d’une seule transition à la fois dans un step donné

autorisons le franchissement d’une seule transition à la fois dans un step donné. Nous évitons ainsi le conflit engendré par exemple par l’exécution de deux opérations à la fois. Dans cette deuxième étape de notre méthodologie, nous avons introduit les caractéristiques particulières des réseaux de Petri interprétés. Cette étape que nous avons appelé filtrage

nous permet d’obtenir des séquences de franchissement valides. Or nous rappelons que l’objectif primordial de ces travaux de thèse est de tester des composants communiquant entre eux. Les réseaux de Petri les modélisant sont connectés à travers un ensemble de transitions que nous avons appelé ensemble des transitions aux interfaces (cf. section 3.3.3.1).

Tester ces composants revient à générer les séquences de franchissement des transitions aux interfaces, d’où le rôle de la troisième étape de notre méthodologie de génération de scénarios de test et que nous avons appelé : étape de réduction de l’ensemble des séquences de franchissement.