1 Introduction
En modélisation des systèmes d’information (SI), il n’est plus nécessaire aujourd’hui d’insister
sur l’importance de la prise en compte des relations statiques et dynamiques entre les acteurs et
les objets du système, mais aussi de celle des contraintes de domaine ou de gestion nécessaires à
une spécification correcte. Les ateliers de modélisation actuels insistent beaucoup sur l’apport de
l’outil comme moyen d’évaluer l’impact de l’évolution des systèmes afin de conserver une
spécification conforme aux applications développées. Cependant ils supportent essentiellement la
modélisation des relations et assez faiblement l’expression des contraintes et la validation des
cohérences que celles-ci sont sensées permettre.
Nous étudions ici la faisabilité d’un outil intégrant cette prise en compte des contraintes dans un
couplage fort à un environnement de spécification industriel. Nous proposons aussi un guidage
afin que la validation des contraintes et de la spécification du système puisse être mieux
maîtrisée. Nous avons fait le choix d’étudier nos propositions sur la notation UML [RATI97]
reconnue industriellement comme une évolution « standardisée » des méthodes d’analyse
orientées objet. Nous proposons qu’une modélisation UML et ses contraintes soient exprimées et
couplées à des spécifications formelles. Cette démarche est limitée à ce jour à la modélisation des
aspects statiques en vue d’aider à la validation de base de données (BD) traduisant la
modélisation du SI. L’outil Rational Rose sur lequel nous implantons cette démarche permet
effectivement la génération vers un certain nombre de systèmes de gestion de BD dont Oracle 8.
Comme les précédentes notations (OMT, OOSE, OOA…), UML ne permet pas d'exprimer toutes
les contraintes (comme par exemple, des clés sur les classes des objets). Plusieurs propositions
ont donc été faites pour permettre d'intégrer l'expression de contraintes de domaine à UML. La
première [OU98] propose d'étendre le méta-modèle d'UML pour ajouter à chaque classe une
partie textuelle exprimant des contraintes. La deuxième prévoit d'ajouter en commentaires aux
diagrammes, des contraintes exprimées dans un formalisme proche de la logique du premier
ordre. Avec la notation UML, est apparu un langage d'expression de contraintes OCL (Object
Constraints Language [WARM98]). Ce langage doit permettre d'exprimer les contraintes de
façon précise et non ambiguë. Contrairement à la première proposition, cette approche a
l’avantage de ne pas surcharger les notations graphiques. Mais OCL offre aujourd’hui une
sémantique pauvre et ne possède pas de support outil permettant d’exploiter les contraintes ; en
conséquence les contraintes exprimées peuvent être mutuellement incohérentes ou incohérentes
avec le diagramme qu’elles annotent. De plus, il n’existe pas de guide méthodologique pour
savoir où exprimer une contrainte afin de la rendre exploitable.
Or pour bénéficier pleinement de l’enrichissement apporté par les contraintes en détectant
d’éventuelles erreurs sans attendre l'implantation dans une base de données, il faut créer une
ingénierie qui les intègre réellement. Nous proposons d’exploiter ici le potentiel de raisonnement
des langages formels. Notre approche est basée sur l'expression concomitante des diagrammes
UML et des contraintes dans un langage formel. Les concepts d’UML traduits en squelettes de
spécifications formelles sont complétés par les contraintes.
Dans cet article, la traduction d'un sous-ensemble du diagramme de classes UML en Z
([SPIV95]) est présentée. Elle aide à localiser les limites d’expression du diagramme de classes
comme les « trous » des squelettes Z correspondant aux aspects qu’UML n’exprime pas.
L’identification de ces « trous » permet de classer les contraintes. Cette classification est utilisée
pour créer un guide méthodologique pour l’expression des contraintes sans connaissance des
aspects formels qui ont conduit à sa définition. Notre but n’est donc pas de proposer une n-ième