• Aucun résultat trouvé

Les r´esultats de cette th`ese ont ´et´e outill´es et sont utilisables, puisqu’ils ont ´et´e exploit´es dans

diff´erentes ´etudes de cas pour aider notamment `a leur v´erification et `a leur documentation

(Sec-tion 6.3.2). Toutefois, certains points de ces r´esultats pourraient ˆetre am´elior´es ou adapt´es pour

ˆetre appliqu´es dans d’autres domaines. Nous d´eveloppons ici ces deux types de perspectives.

Am´eliorations

– L’utilisation de deux conditions de franchissement permet d’am´eliorer la compr´ehension du

lien entre le mod`ele et ses comportements, car cela permet de distinguer les valuations ne

permettant pas de d´eclencher l’´ev´enement et celles ne permettant pas d’atteindre un ´etat

donn´e. Cependant, ces deux conditions portent sur l’´etat des variables avant le d´eclenchement

de l’´ev´enement. Il serait int´eressant de caract´eriser ´egalement les valuations de l’´etat

d’ar-riv´ee qui sont atteignables. Cette information serait particuli`erement int´eressante pour

ai-der `a traiter des probl`emes d’atteignabilit´e d’une valuation `a travers une s´equence

d’occur-rences d’´ev´enements. Pour caract´eriser ce pr´edicat, il est alors possible soit d’utiliser le calcul

de plus forte post-condition, d´ecrit initialement dans [Dij76, Hes92], puis adapt´e `a B par

S. Dunne [Dun03], soit leWP. Dans ce dernier cas, il serait possible d’exprimer la condition

T caract´erisant que ((toutes les valuations de l’´etat F sont atteignables par l’´ev´enement ev

depuis l’´etat E ))par l’obligation de preuve suivante :

T =ˆ ∀x

· ∃x·(E ∧ D ∧ A ∧ hAction(ev)i[x:=x

]F)

– L’une des heuristiques introduites tout au long de ce manuscrit est de r´eduire le nombre de

d´efauts de preuve sans restreindre le langageB´ev´enementiel consid´er´e. Pour am´eliorer encore

les r´esultats obtenus, nous avons alors exp´eriment´e une utilisation de tactiques utilisateur

dans la version actuelle deG´en´eSyst. Pour chaque condition de franchissement, si le prouveur

automatique ´echoue `a prouver une formule, alors nous proposons d’utiliser successivement

les tactiques suivantes dans le prouveur interactif de l’AtelierB ou de B4free, jusqu’`a ce que

8.2. Perspectives

toutes les cinq soient tent´ees ou que le but soit prouv´e :

1. dd && pp(rp.0)

2. re && pp(rp.0)

3. re && dd && pp(rp.1)

4. re && dd && pp(rp.2)

5. re && pp(rp.1)

La commande dd permet de ne consid´erer que le but de la preuve et de r´eunir toutes les

hypoth`eses dans un ensemble d’hypoth`eses globales, tandis que la commandeppest un appel

au prouveur de pr´edicats. Le param`etre rp.xpermet alors de pr´eciser le sous-ensemble des

hypoth`eses globales qu’il peut utiliser

3

. Enfin, la commande re permet de recommencer la

preuve `a z´ero. L’utilisation de ces tactiques a permis de r´esoudre la quasi-totalit´e des cas

de d´efaut de preuve de la batterie de tests (section 6.3.1). Dans cette version prototype de

G´en´eSyst, les temps de calcul sont d´emesur´es (la construction des comportements du canal

de communication passe de 4 secondes `a 77 secondes), mais ils pourraient ˆetre diminu´es en

n’utilisant les tactiques que dans les cas de d´efaut de preuve av´er´e. Nous n’avons pas encore

pu tester cette approche sur les plus gros mod`eles, mais le taux de r´eduction des cas de d´efaut

de preuve semble tr`es prometteur.

– Une autre approche pour minimiser le nombre de d´efauts de preuve consisterait `a utiliser

d’autres prouveurs, ayant chacun leur propres tactiques. Pour ce faire, nous pourrions nous

int´eresser aux d´emarches outill´ees telles queWhy [Fil03], qui est un g´en´erateur d’obligations

de preuve pour de multiples prouveurs (Simplify [DNS05], Ergo [CCK07], haRVey [RD03],

etc). Cet outil prend en entr´ee une sp´ecification Why d´ecrite en termes de pr´e et

post-conditions et g´en`ere des obligations de preuve dans le langage de chacun des prouveurs pris en

compte. Il suffit alors d’axiomatiser les symboles non interpr´et´es de la logiqueBet d’exprimer

les assertions `a l’aide du langage des pr´edicats deWhy. En ce sens, ce travail pourrait s’inspirer

de ce qui a ´et´e fait avec succ`es dans l’outil Barvey [CDD

+

04, CDGR04] et plus r´ecemment

dans [CD07].

Utilisations

– En section 2.3.1, nous avons vu que diff´erentes approches ont ´et´e propos´ees pour d´eriver

un mod`ele B `a partir d’une description comportementale [MS99, GFL07, But00]. Il serait

int´eressant de coupler ces approches avec celle deG´en´eSyst pour proposer une m´ethode de

d´eveloppement multi-vues. La principale difficult´e de ce type d’approche est de maintenir

une certaine coh´erence entre les diff´erentes vues. Pour ce faire, l’id´ee serait de d´eriver le

squeletteB`a partir d’une sp´ecification comportementale, puis de v´erifier le mod`ele d´evelopp´e

en comparant ses comportements effectifs avec ceux attendus. Cette validation peut alors

ˆetre effectu´ee avec G´en´eSyst apr`es le d´eveloppement de chaque raffinement. Typiquement,

3rp.0: aucune hypoth`ese ;rp.1hypoth`eses qui ont une variable libre en commun avec le but ;rp.2: hypoth`eses qui ont une variable libre en commun soit avec le but, soit avec une hypoth`ese ayant une variable libre en commun avec le but.

l’int´egration deG´en´eSystdans la plateforme Rodin [JCI

+

05,BLS05] sous la forme d’un plugin

permettrait d’atteindre facilement ce r´esultat.

D’autres approches de d´eveloppement multi-vues ont d´ej`a ´et´e propos´ees. Nous pouvons citer

par exemple les approches CSP——B [ST05] et CSP+B [BL05] qui consistent `a s´eparer les

aspects contrˆole, d´ecrit en CSP, et donn´ees, d´ecrit en B. Il est alors possible de d´evelopper

s´epar´ement les deux aspects, modulo des preuves de coh´erence. L’approcheUML-B [OJS05]

permet ´egalement de consid´erer en mˆeme temps une vue UML et une vue B du mod`ele.

Ces deux vues sont ici consid´er´ees comme toujours coh´erentes. D´evelopper un tel mod`ele

consiste alors `a appliquer des r`egles de r´e´ecriture modifiant conjointement les deux vues, en

pr´eservant leur coh´erence. Contrairement `a ces approches, la m´ethode que nous proposons

aurait l’avantage de conserver la s´eparation des trois phases du cycle de d´eveloppement en

V : conception, d´eveloppement et validation. Il serait alors possible de concevoir le syst`eme

en UMLavant de d´evelopper le mod`ele formel et de valider ensuite la conformit´e de chaque

raffinement avec le cahier des charges.

– Diff´erents aspects de la m´ethode de v´erification de propri´et´es de s´ecurit´e bas´ee sur le langage

SEPL (pr´esent´e en section 7.4.3) pourraient ˆetre d´evelopp´es. Il serait notamment int´eressant

d’exploiter la hi´erarchie des syst`emes de transitions pour v´erifier des propri´et´es par partie et

ainsi simplifier leur v´erification. Par extension, cela reviendrait `a v´erifier des propri´et´es sur

le mod`ele abstrait et de les pr´eserver par raffinement. Par exemple dans [MMJ00,Lan05], les

auteurs caract´erisent une classe de propri´et´es logiques pouvant ˆetre v´erifi´ees par partie sur un

mod`ele modulaire. Intuitivement, cette approche devrait pouvoir ˆetre adapt´ee aux syst`emes

de transitions hi´erarchiques.

– Enfin, nous avons commenc´e, `a travers le stage d’ing´enieur de deuxi`eme ann´ee d’´Evelyne

Altariba, `a ´etudier l’impact de la modularit´e sur la construction des comportements d’un

mod`ele B classique. Cependant, les premiers r´esultats n’ont pas encore pu ˆetre exploit´es.

Intuitivement, dans un mod`ele d´efini par un ensemble de composants communicants, c’est

le composant appelant qui va contraindre les comportements du composant appel´e. De la

mˆeme mani`ere les r´esultats des appels d’op´erations peuvent influencer les comportements

de l’appelant. Il serait donc int´eressant de permettre un calcul des comportements d’un

composantBen prenant en compte son environnement d’ex´ecution. De plus, nous avons utilis´e

la hi´erarchie pour d´ecrire les comportements d’un mod`ele raffin´e. Ce type de repr´esentation

pourrait ´egalement ˆetre utilis´e pour repr´esenter les comportements d’un mod`ele compos´e de

plusieurs modules. En effet, si une transition repr´esente l’ex´ecution d’une op´eration, alors

une vue plus fine du syst`eme permettrait de visualiser les op´erations appel´ees lors de cette

ex´ecution.

Cinqui`eme partie

Compl´ement sur les

substitutions g´en´eralis´ees

A

A.1 Calcul de la terminaison

Le tableau A.1 r´esume le r´esultat du calcul de la terminaison des principales substitutions

primitives.

Substitution Condition de terminaison

trm(x:=E) btrue

trm(x, y:=E, F) btrue

trm(skip) btrue

trm(P |S) P ∧ trm(S)

trm(P =⇒S) P ⇒trm(S)

trm(S

1

[]S

2

) trm(S

1

) ∧ trm(S

2

)

trm(@z·S) ∀z·trm(S)

trm(S ;S

2

) [S]trm(S

2

)

Tab. A.1 – Terminaison des principales substitutions