• Aucun résultat trouvé

La construction du type ITS composite représentant le réseau

La construction du type ITS représentant le réseau de capteurs sans fil consiste à synchroniser les interfaces de communication des nœuds entre elles pour l’échange des requêtes et des résultats.

Concernant la diffusion des requêtes dans le réseau, nous créons pour chaque nœud toutes les synchronisations qui lui permettent de recevoir les requêtes d’un de ses voisins et de les diffuser à tous ses voisins. Pour cela, nous utilisons l’algorithme de détermination des voisins énoncé en 3.12.1. Les boucles infinies de rediffusion sont évitées grâce à la structure du réseau de Petri communication de chaque nœud (voir règle de transformation 7). La diffusion est implémentée de manière atomique ce qui évite tout effet d’entrelacement (source d’explosion combinatoire en model checking). Cette implémentation permet à tous les nœuds destinataires du message diffusé, de le recevoir au même moment, ce qui est plus fidèle à la réalité qu’une implémentation sous la forme de suite d’unicasts [OT07].

Par ailleurs, l’abstraction selon laquelle un message émis par un noeud est reçu au même instant par les noeuds voisins nous paraît cohérente avec le niveau de détail que l’on a adopté dans la spécification. En effet, sachant que nous faisons déjà l’hypothèse de ne pas modéliser les détails de transmission de trames de la couche

MAC (nous définissons à la place un taux d’erreurs qui prend en compte l’imperfection du canal de transmission), il nous paraît cohérent de ne pas détailler la couche physique (temps de transmission proportionnel à la distance entre entre les noeuds). C’est une abstraction que nous faisons et qui est commune dans le domaine [MSZ07]. Concernant la transmission et retransmission des résultats aux next-hops, on définit un ensemble de synchronisations qui relient un nœud source, un nœud destination et la table de routage. Structurellement, cela permet des communications arbitraires entre les nœuds, mais seules les synchronisations autorisées par la table

de routage (découlant d’un marquage de 1 d’une placeenableNodeId) sont réellement

activées. Cela permet de supporter des mises à jour de la table de routage, sans modification des nœuds ou des synchronisations entre ces nœuds.

3.12.1 Détermination des voisins d’un nœud

Pour construire le type ITS composite représentant le réseau de capteurs sans fil entier, il faut modéliser la diffusion des requêtes d’un nœud à ses voisins. Pour cela, il faut déterminer pour chaque nœud, l’ensemble de ses voisins.

La définition suivante présente la fonction V() qui à un nœud associe ses nœuds voisins.

Définition 4.11. Voisins d’un nœud Soit Depl un déploiement VeriSensor

On définit la fonction V(), qui à n02 Depl associe l’ensemble de ses voisins, par :

V : Depl ! 2Depl

n07! {n 2 Depl : distance(n.pos, n0.pos) ∑ minimum(n.cl.pe, n0.cl.pe)}

avec

• distance(), la distance euclidienne entre deux points deR3

• minimum(), le minimum de deux réels positifs.

3.12.2 Règle de transformation pour le réseau de capteurs sans fil

La règle de transformation suivante décrit comment on transforme les éléments de la specification VeriSensor en un type ITS composite représentant le réseau de capteurs sans fil.

Règle de transformation 11. réseau de capteurs sans fil

Entrée : Depl (Le modèle de déploiement VeriSensor), REQ (l’ensemble des requêtes du modèle de requêtes).

Sortie : un ITS composite ReseauCapteursSansFil satisfaisant : //*******instances******

• 8n 2 Depl, [n.id] 2 I et type([n.id]) = [n.id]noeud

• 8n 2 Depl, [n.id]Routage 2 I et type([n.id]Routage) = [n.id]Routage //*****synchronisations****

//diffusion des requêtes aux voisins • 8n 2 Depl,

< >,< call([n.id], broadcastToN eighbors(q));(æi)0∑i∑m>>2 S ync, avec, – (æi)0∑i∑m la suite des actions

call([ni.id], receiveFromNeighbor(r))0∑i∑m

– (ni)0∑i∑m est la suite des nœuds voisins de n

//envoi du résultat au next-hop sauf pour la station de base

• 8n 2 Depl tel que n.nh,n.id, 8n0,n, < >,< call([n.id], sendToNextHop(r));

call([n.id]Routage, enable[n.id]);

call([n0.id], recvFromPredecessor(r)) >>2 Sync

La figure 4.25a représente un exemple de topologie de réseau de capteurs sans fil. Les portées de communication des nœuds sont indiquées par des disques gris et les chemins de routage par des flèches à trait plein. n1, n2, n3 sont les identifiants des

trois noeuds et b est l’identifiant de la station de base.

La figure 4.25b montre uniquement (par souci de lisibilité) l’ensemble des syn-

chronisations permettant à n1 d’émettre des messages. n1 peut émettre un résultat

à son next-hop ou diffuser une requête à ses voisins. Les trois synchronisations liant n1, la table de routage, et les nœuds n2, n3et b représentent l’émission d’un résultat.

Le marquage de la table de routage active la synchronisation entre n1 et son next-

hop n2 (voir les chemins de routage en figure 4.25a) et autorise la transmission du

message. Une seule synchronisation entre n1 et tous ses voisins (voir les portées en

figure 4.25b) représente la diffusion atomique des requêtes par n1.

n1 n2

b n3

(a) topologie d’un réseau de capteurs sans fil

enable n1 enable n2 n1 : n1noeud n2 : n2noeud b : bnoeud enable b n1routage

enable n1 enable n2 enable b

sendTo Next Hop(r) receive From Predecessor(r) receive From Predecessor(r) receive From Predecessor(r) broadcast ToNeighbors(q) receiveFrom Neighbor(q) receiveFrom Neighbor(q) n3 : n3noeud sendTo Next Hop(r) sendTo Next Hop(r)

(b) synchronisations de n1pour l’émission

4 Abstractions

La transformation précédente appliquée en tant que telle génère une spécification formelle et un espace d’états qui croissent très vite avec l’augmentation de la taille des domaines des grandeurs physiques. Le risque d’explosion combinatoire est accru. Cependant, en fonction de la propriété à vérifier, le comportement de plusieurs exécutions est similaire. On conserve donc de la redondance dans l’espace des états.

Nous proposons d’éliminer cette redondance en abstrayant les parties de la spécification formelle qui ne sont pas nécessaires. Le risque d’explosion combinatoire sera réduit.

La dérivation automatique de telles abstractions est importante car : i) elles sont correctes par construction ii) l’utilisation des abstractions n’implique pas une connaissance de l’utilisateur final des techniques sous-jacentes.

Principalement, nous proposons l’abstraction qui consiste à retenir, pour les grandeurs physiques, une valeur symbolique (i.e. classe d’équivalence) par étendue produisant le même comportement du système. Pour cela, nous parcourons les structures de contrôle à partir desquelles nous dérivons la liste de ces classes d’équivalence.

Grâce à cette abstraction, on obtient une spécification formelle et un espace d’états qui dépend du nombre de classes d’équivalence des grandeurs. Le risque d’explosion combinatoire est donc réduit.

L’algorithme suivant détermine comment extraire les domaines de valeur symbolique (ou classes d’équivalence) d’une grandeur, à partir des structures de contrôle (i.e., la liste des conditions spécifiées dans les requêtes conditionnelles du modèle).