• Aucun résultat trouvé

puisqu’elle d´etermine quelles sont les m´ethodes accessibles par les autres classes. L’approche CSP-OZ se distingue des autres combinaisons qui identifient une op´eration bas´ee sur les ´etats avec des ´ev´enements, en permettant deux types d’identification dans le langage :

– avec un seul ´ev´enement par op´eration, i.e., chaque op´eration est consid´er´ee comme un canal de communication (de mani`ere analogue `a CSP || B, section3.3, par exemple) ;

– avec deux ´ev´enements par op´eration, i.e., chaque op´eration est associ´ee `

a deux ´ev´enements : un pour la lecture des param`etres d’entr´ee, l’autre pour l’´ecriture des param`etres de sortie.

Cette derni`ere option peut ˆetre int´eressante pour traiter le calcul des sorties d’un SI ou bien pour g´erer les messages d’erreur lorsqu’une op´eration n’est pas dans les bonnes pr´econditions.

3.5 Circus

Circus [WC02] appartient au deuxi`eme groupe de combinaisons (cr´eation d’un nouveau langage). Il s’agit d’un langage formel bas´e sur Z (section2.2.2) CSP (section2.3) et Action Systems (voir section2.2.1), qui int`egre aussi le cal-cul de raffinement de Back [BvW98]. La s´emantique s’inspire de la th´eorie unifi´ee de programmation [HJ98]. L’id´ee de Circus est de distinguer les transitions d’´etats des communications d´efinies dans le syst`eme d’actions qui repr´esente le comportement du syst`eme. Les propri´et´es de vivacit´e peuvent ˆetre v´erifi´ees sur le syst`eme d’actions, alors que les propri´et´es de sˆuret´e sont prouv´ees sur les sch´emas d’´etat. Circus fournit aussi une relation de raffinement unifi´ee. La notion de raffinement est en effet complexe dans le cadre d’une m´ethode int´egr´ee, car les raffinements au sens Z et CSP n’utilisent pas les mˆemes mod`eles s´emantiques. Pour pallier ce manque, Circus s’appuie sur la th´eorie unifi´ee de programmation, qui permet d’interpr´eter les deux raffinements dans un mod`ele unique.

3.5.1 Syntaxe

Une sp´ecification Circus est structur´ee en termes de processus. Chaque pro-cessus est repr´esent´e par un ´etat, d´ecrit par un sch´ema Z, et par un compor-tement, d´ecrit par un syst`eme d’actions. Des sch´emas Z classiques sont utilis´es pour repr´esenter les ´etats, les initialisations et les op´erations. Les canaux de communication, similaires `a ceux de CSP, sont d´eclar´es par la clause channel. Les processus sont sp´ecifi´es de la mani`ere suivante :

process Name , ProcExpr

o`u Name est le nom du processus et ProcExpr est une expression de processus du langage Circus. Les expressions de processus sont d´efinies en Circus par :

begin Declaration • Action end

o`u Declaration d´esigne un ensemble de paragraphes Z standard ou de d´ eclara-tions de processus.

Les actions en Circus sont d´ecrites par des sch´emas Z, des commandes gard´ees et des op´erateurs CSP. Les actions de base sont : Stop (l’action qui arrˆete l’ex´ecution du processus), Skip (l’action qui ne fait rien) et Chaos (l’ac-tion qui diverge). Les ac(l’ac-tions gard´ees sont de la forme : Predicate&Action. Les op´erateurs sur les actions sont : les choix interne (u) et externe (2), la synchro-nisation param´etr´ee (| [∆] |, similaire `a ||, mais synchronis´ee uniquement sur les actions de l’ensemble ∆), l’entrelacement (|||), la restriction (

\

), la s´equence ( ;), et les communications (de la forme c ?x → A ou c !x → A). Circus permet enfin d’utiliser les µ-expressions de Z pour d´efinir des actions de mani`ere r´ecursive :

µ N • A(N )

o`u N est un identifiant et A(N ) est une expression d’action qui d´epend de N . Cette expression repr´esente le plus petit point fixe tel que : N = A(N ).

Les processus de la forme ProcExpr peuvent ˆetre compos´es entre eux avec les op´erateurs suivants : les choix interne (u) et externe (2), la synchronisation param´etr´ee (| [∆] |), l’entrelacement (|||), la restriction (

\

) et la s´equence ( ;). Les processus peuvent ´egalement ˆetre index´es avec l’op´erateur comme suit. Le processus i : T P , o`u T est un ensemble et P est une expression de processus, se comporte comme P , mais agit sur diff´erents canaux ; chaque occurrence d’un canal de communication c est alors index´ee par i ∈ T , autrement dit, elle est remplac´ee par ci.

3.5.2 Sp´ecification

3.5.2.1 D´eclaration

Notre exemple de r´ef´erence peut ˆetre sp´ecifi´e en Circus de la mani`ere sui-vante. Le type des produits est d´efini par : [PRODUCTS ]. Le type STATES est un ensemble ´enum´er´e qui contient les trois ´etats du syst`eme :

STATES = Stop | Active | Created

Un canal de communication appel´e In permet de d´eclarer le nouveau produit `a cr´eer. Le canal Out est utilis´e pour retourner le produit courant.

channel In, Out : PRODUCTS Une constante Null est d´efinie par :

Null : PRODUCTS

Le processus principal est appel´e Machine : process Machine ,

begin .../* sch´emas Z et syst`eme d’actions indiqu´es ci-dessous */ Les deux premiers sch´emas Z, State et StateInit, d´efinissent respectivement l’es-pace d’´etats et l’initialisation du syst`eme. Ils sont similaires aux sch´emas d’´etat d´efinis pour CSP-OZ (section3.4). Toutefois, une variable d’´etat suppl´ementaire est sp´ecifi´ee ici. Ainsi, la variable state repr´esente l’´etat courant du syst`eme.

3.5. CIRCUS 61 State state : STATES product : PRODUCTS StateInit State state0 = Stop product0= Null

Les sch´emas suivants d´efinissent les op´erations du syst`eme : On, Off, Create, Delete et DisplayProduct. On ∆State state = Stop state0 = Active product0= product Off ∆State state = Active state0 = Stop product0= product Create ∆State pdt ? : PRODUCTS

state = Active ∧ pdt ? 6= Null state0 = Created product0= pdt ? Delete ∆State state = Created state0 = Active product0= Null DisplayProduct pdt ! : PRODUCTS pdt ! = product

Une action interm´ediaire, ProductCycles, repr´esente le cycle de vie de chaque produit :

ProductCycles ,

µ X • In?pdt : PRODUCTS → ((pdt 6= Null & Create ;Delete) 2(pdt = Null & Skip)) ;X

L’action ProductCycles re¸coit tout d’abord un produit pdt en entr´ee par le ca-nal In. Si pdt est diff´erent de Null , alors les op´erations Z Create et Delete sont ex´ecut´ees cons´ecutivement. Sinon, rien ne se passe et le processus est it´er´e. Cette premi`ere action interm´ediaire permet d’´eviter un blocage au cas o`u une valeur ind´esirable serait donn´ee pour le param`etre d’entr´ee pdt. Une autre action, Re-quests, permet de sp´ecifier que l’op´eration Z DisplayProduct peut ˆetre ex´ecut´ee un nombre arbitraire fini de fois :

Requests ,

µ Y • (DisplayProduct ;Out !pdt → Y )2Skip

Le r´esultat de l’op´eration DisplayProduct est communiqu´e par le canal Out. 3.5.2.2 Action principale

L’action principale sp´ecifie le comportement global du syst`eme. Cette action utilise tous les paragraphes Z pr´esent´es dans la section3.5.2.1.

StateInit ;(µ V • (On ;((ProductCycles ||| Requests)2(Off ;V ))))

Ce syst`eme d’actions a le comportement suivant. Le sch´ema d’initialisation StateInit est ex´ecut´e en premier. Ensuite, une µ-expression d´efinit l’action r´ e-cursivement. Apr`es avoir ex´ecut´e l’action On, il existe deux alternatives : soit le processus ex´ecute ProductCycles, dont les actions sont entrelac´ees avec les ac-tions de Requests, soit il ex´ecute l’action Off et le syst`eme est prˆet `a ˆetre activ´e de nouveau.

3.5.3 V´erification et raffinement

La s´emantique de Circus est bas´ee sur la th´eorie unifi´ee de programma-tion [HJ98]. Dans leur unification, Hoare et al. s’appuient sur la th´eorie des relations pour repr´esenter les sp´ecifications et les impl´ementations. Ces travaux ont pour but d’apporter une base commune `a toutes les branches de la pro-grammation quels que soient les paradigmes utilis´es. Par exemple, la s´equence est repr´esent´ee par une composition relationnelle et le non-d´eterminisme par une disjonction. Des concepts comme la correction ou le raffinement d’une sp´ecification sont interpr´et´es comme des inclusions de relations. Cette base per-met ainsi de raisonner sur une repr´esentation des langages avec les lois du calcul relationnel.

Dans [WC02], Woodcock et al. utilisent cette th´eorie pour d´efinir la s´ e-mantique de Circus, d´ecrite en Z. Un analyseur syntaxique existe pour les sp´ecifications Circus. Un model-checker bas´e sur FDR [For97], un model-checker du langage CSP, et sur ProofPower, un prouveur de Z, est actuellement en cours de d´eveloppement [CSW05].

3.5. CIRCUS 63 Contrairement aux autres approches pr´esent´ees dans ce chapitre, Circus pro-pose une relation de raffinement qui int`egre les diff´erents aspects du langage : les actions, les processus et les donn´ees. Woodcock et al. proposent dans [SWC02,

CSW02] des r`egles de raffinement pour d´ecomposer une sp´ecification en plu-sieurs sous-composants et pour v´erifier ensuite l’ensemble de ces composants. Une strat´egie a ´et´e d´efinie pour d´eriver une sp´ecification abstraite en un syst`eme distribu´e. Tout processus Circus est compos´e d’une action principale et d’un es-pace d’´etats. Dans la s´emantique unifi´ee de Circus, un processus P est raffin´e par un processus Q s’il existe une relation de simulation entre les espaces d’´etats et si l’action principale de P est raffin´ee par celle de Q .

3.5.4 Ad´equation avec les SI

Le langage Circus a ´et´e cr´e´e dans le but d’unifier les calculs de raffinement de Z, CSP et des Action Systems. `A l’instar de CSP-OZ (section 3.4), une nouvelle syntaxe et une nouvelle s´emantique ont ´et´e d´efinies. Pour les mˆemes raisons, l’application de Circus requiert une nouvelle fa¸con d’appr´ehender la sp´ecification des syst`emes. En particulier, comme la s´emantique est unifi´ee, de nouvelles techniques de v´erification et de nouveaux outils doivent ˆetre cr´e´es pour analyser les sp´ecifications Circus.

Comme la d´efinition d’une th´eorie unifi´ee pour le raffinement est la motiva-tion premi`ere de Circus, le langage dissocie les transitions d’´etats des syst`emes d’actions afin d’am´eliorer les techniques de raffinement. Par cons´equent, les pro-pri´et´es bas´ees sur les ´etats peuvent ˆetre v´erifi´ees s´epar´ement. En Circus, les syst`emes d’actions permettent essentiellement de d´ecrire les propri´et´es d’ordon-nancement des ´ev´enements, car les transitions d’´etats sont encapsul´ees dans les sch´emas Z. Pour ´eviter les blocages, il faut alors analyser les gardes des ac-tions et v´erifier qu’elles sont coh´erentes avec les pr´econditions des sch´emas Z correspondants.

Pour permettre le raffinement d’un processus en plusieurs sous-processus en parall`ele, l’expressivit´e du langage Circus pour les syst`emes d’actions est limit´ee. En particulier, les actions entrelac´ees d’un mˆeme processus peuvent partager le mˆeme espace d’´etats, mais elles ne peuvent pas modifier les mˆemes variables d’´etat. Par cons´equent, la description de plusieurs entit´es du mˆeme type qui seraient en concurrence entre elles est difficile `a prendre en compte avec l’op´erateur d’entrelacement quantifi´e sur les actions. En revanche, l’op´erateur d’entrelacement sur les processus, coupl´e avec l’op´erateur , peut ˆetre utilis´e pour repr´esenter le comportement d’un type d’entit´e. Par exemple, si le pro-cessus Product d´efinit le comportement d’un produit, alors l’expression ||| pdt : PRODUCTS Product bpdt c repr´esente l’entrelacement de plusieurs instances de Product, index´ees par pdt . De plus, une extension orient´ee objet de Circus, appel´ee OhCircus [CSW05], a ´et´e d´efinie. Cependant, quelques restrictions de-meurent, en particulier sur les appels de m´ethodes, afin de conserver la propri´et´e de monotonicit´e du raffinement.

En conclusion, le principal b´en´efice du langage Circus est la d´efinition d’une relation de raffinement bas´ee sur une s´emantique unifi´ee. Ainsi, Circus est la seule approche de cet ´etat de l’art `a proposer un raffinement pour des combinai-sons de sp´ecifications. La strat´egie de raffinement consiste en des d´ecompositions successives des processus. Le raffinement de Circus inclut `a la fois les raffine-ments de processus, d’actions et de donn´ees. En particulier, si un processus est

d´ecompos´e en plusieurs sous-processus en paral`elle, et si un sch´ema d’´etat doit ˆ

etre utilis´e par l’ensemble de ces sous-processus, alors le sch´ema est divis´e et des canaux de communications sont introduits au cours du raffinement afin de par-tager les diff´erentes variables d’´etat du sch´ema initial. Une telle strat´egie peut s’av´erer int´eressante dans le cadre des SI pour mod´eliser le caract`ere concurren-tiel ou bien l’impl´ementation de syst`emes distribu´es.