MeriseAcide une autre analyse que UML

Tags:: merise :: uml

Alors que nous entendons très souvent parler de UML, beaucoup oubli qu'il existe une autre méthode d'analyse qui permet d'être plus proche des données: l'analyse de Merise. Cette analyse n'a pas beaucoup percé par rapport à UML dans le monde, mais elle est pourtant toujours enseignée dans les écoles d'informatique. Son efficacité n'est pas à prouver, elle est fiable et permet la gestion d'un projet à l'inverse de UML qui ne peut se baser que sur le concept.

C'est justement dans le cadre d'un BTS d'informatique que le logiciel Merise Acide est né. Aujourd'hui sous licence GPL, vous pouvez l'utiliser pour générer les diagrammes essentiels (MCD et MPD, c'est à dire le Modèle Conceptuel de Données et le Modèle Physique de Données) et les scripts SQL de vos bases ainsi que le dictionnaire de données. Ces principales sorties permettent de préparer un projet de développement plus efficacement.

Nous allons voir comment cet outil fonctionne. En premier lieu, rendez vous sur: http://bombela-dev.is-a-geek.org/MeriseAcide pour avoir un aperçut du projet. Ensuite téléchargez la version compilée ici: http://bombela.free.fr/MeriseAcide/ (la version que j'utilise est la 0.4.4). Placez là dans votre "HOME". Décompresse l'archive dans un répertoire et allons dans ce répertoire.


cd
tar jxvf MeriseAcide.*.tar.bz2
cd MeriseAcide*
 

Pour des raisons de simplicité, nous travaillerons dans le répertoire du programme, il sera judicieux par la suite de rendre MeriseAcide accessible depuis n'importe quel répertoire... mais pour l'heure, nous ne ferons que tester.

Notre projet

Notre projet est un simple programme de vente de voitures. Après avoir analysé la demande, nous pouvons dégager ce dont nous avons besoin.

Voici le MLD (Modèle Logique de Données) que je veux utiliser. C'est à partir de cela que va se baser mon analyse.

  • Client (id_client, nom, prenom, adresse, age)
  • Voiture (id_voiture, marque, couleur, prix, @id_carburant)
  • Carburant(id_carburant, libelle)
  • Vente (id_vente, @id_voiture, @id_client,remise)

Ceci étant un exemple, je ne vais pas loin dans le système, l'idée est de vous présenter Merise Acide. Pour ceux qui connaissent mal Merise, les arobase (@) veut dire que le champs est une référence à un autre type de données. Les champs soulignés sont des clés.

Ecrire notre analyse

Nous pouvons commencer, la syntaxe d'un ficher Merise Acide est simple, elle est instinctive et claire. Créons un répertoire pour notre projet, et commençons à écrire:


mkdir analyse1

#sous gnome:
gedit analyse1/analyse.ma

#ou sous KDE:
kwrite analyse1/analyse.ma
 

Il nous faut expliquer nos données. Nous écrivons les données simple en ne spécifiant pas les références étrangère. Donc on ne défini pas les champs qui ont un arrobas (@) dans notre définition. On désigne nos clefs avec un plus + devant son nom, et on place un caractère de soulignement si on veut laisser MeriseAcide lui ajouter le nom de la table automatiquement. Voici donc nos données:


#nos données
[client]
+id_
nom
prenom
adresse
age

[voiture]
+id_
marque
modele
couleur
prix

[carburant]
+id_
type

[vente]
+id_
remise integer(3)
 

Remarquez je j'ai implicitement défini que "remise" serait un nombre...

Maintenant, on indique la cardinalité, c'est à dire le nom des relations entre nos données et le nombre de relations possibles. Par exemple, un client n'a pas forcément acheté de voiture. C'est à dire qu'il a de 0 à n ventes... Par contre, une vente est liée à un et un seul client. Nous l'écrivons de cette manière:


client 0,n génère 1,1 vente
 

La définition complète est celle-ci:


client 0,n génère 1,1 vente
voiture 0,n correspond 0,1 vente
voiture 1,1 utilise 0,n carburant
 

Voici donc le fichier complet:


#données

[client]
+id_
nom
prenom
adresse
age

[voiture]
+id_
marque
modele
couleur
prix

[carburant]
+id_
type

[vente]
+id_
remise integer(3)


client 0,n génère 1,1 vente
voiture 0,n correspond 0,1 vente
voiture 1,1 utilise 0,n carburant
 

Génération des documents

Enregistrez le fichier, puis quitter l'éditeur. Retournez dans votre terminal.

Nous allons générer les Documents donc nous avons besoin pour coder notre projet. A savoir,

  • notre MCD qui est le modèle conceptuel des données. On saura donc les associations qu'il existe entre nos données
  • notre MPD qui est le modèle physique de données, cela nous permet de voir nos tables telles qu'elle sont proposées dans la base
  • note dictionnaire de données, qui va nous permettre de lister tous les champs pour que nous puissions coder correctement dans le langage souhaité.

Réalisons, en premier lieu, le MCD:


./MeriseAcide -f png -m analyse1/MCD.png analyse1/analyse.ma
 

Ce qui nous génère dans le répertoire n'analyse: MCD_err1 L'image est en noir et blanc, pratique pour l'impression... mais pas très jolie. Vous pouvez demander de la couleur en ajoutant l'option -c


./MeriseAcide -f png -c -m analyse1/MCD.png .analyse1/analyse.ma
 

MCD_err2

Vous pouvez changer les couleurs avec -E pour les entités, -A pour les associations et -B pour les tables (dans le MPD, voir la suite). On peut tout aussi bien modifier la taille des liens avec -e, par défaut le PDF est utilisé, mais je préfère utilise le PNG pour vous afficher les exemples:


./MeriseAcide -c -E "#c49696" -A "#bbc496" -B "#96c4c1" -f png -m analyse1/MCD.png  -e 0.6 analyse1/analyse.ma
 

MCD_err3

Passons au MPD:


./MeriseAcide -c -E "#c49696" -A "#bbc496" -B "#96c4c1" -f png -p analyse1/MPD.png analyse1/analyse.ma
 

MPD_err1

Puis notre dictionnaire de données:


./MeriseAcide -d analyse1/dictionnay .analyse1/analyse.ma
 

Cela nous donne un fichier contenant:


 +id_client
 nom_client
 prenom_client
 adresse_client
 age_client
 +id_voiture
 marque_voiture
 modele_voiture
 couleur_voiture
 prix_voiture
 +id_carburant
 type_carburant
 +id_vente
 remise_vente
 

Et le SQL de données, par défaut MySQL:


./MeriseAcide -s analyse1/datas.sql analyse1/analyse.ma
#pour sqlite:
./MeriseAcide -t SQLIte -s analyse1/datas.sql analyse1/analyse.ma
#pour postgresql:
./MeriseAcide -t PostGreSQL -s analyse1/datas.sql analyse1/analyse.ma
 

Evidamment, vous pouvez combiner toutes les options et gérérer tout à la volée:


./MeriseAcide -s analyse1/datas.sql -c -E "#c49696" -A "#bbc496" -B "#96c4c1" -e 0.6 -f png -m analyse1/MCD.png  -p analyse1/MPD.png -d analyse1/dictionnay analyse1/analyse.ma
 

Cela vous produira l'ensemble des documents utiles à votre projet.

Vérification

Vérifiez le fichier SQL généré, si les types ne vous conviennent pas, changez les directement dans le fichier analyse.ma et regénérez le tout. Je vous conseil de toujours suffixer les noms de champs soit par votre propre nomenclature, soit par un caractère de soulignement _ pour laisser MeriseAcide ajoute le nom de la table pour vous.

Par exemple pour la table "carburant", le champs "type" peut créer une erreur puisque c'est un mot clef MySQL. Appelez ce champs type_carburant, ou simplemen "type_", MeriseAcide vous le rebaptisera automatiquement.

Bilan

Concrètement, MeriseAcide est un tout petit projet qui avance à son rythme, mais il peut être très utile pour la rédaction d'un cahier des charges fonctionnel ou simplement pour un démarrer un projet convenablement.

[Corrigé après relecture]

1 Mardi 12 Août 2008 15:10:45, Metal3d

Vous l'avez certainement remarqué mais j'ai fait une bourde dans les relations vente/voiture. Je m'en excuse.

L'idée était de vous montrer comment fonctionne l'outil et non pas de faire une analyse correcte. Je m'empresserai de corriger l'article soit ici, soit dans un errata.

La réalité étant :
vente 1,n correspond 0,1 voiture FAUX

il fallait lire
voiture 0,n correspond 0,1 vente

Avec mes excuses

2 Vendredi 07 Novembre 2008 12:23:28, Fabrice

Bonjour,
Merci pour cet outil que je trouve franchement génial et trés facile à prendre en main,
même pour un naze comme moi.
Une petite question cependant : je n'ai pas trouvé le moyen d'ajouter un commentaire aux entités
(par ex :
[client]
COMMENT "Table des clients"
+id_
...)
pouvant êtres ensuite convertie en commentaire de la table sql générée, alors que pour les champs, ca marche bien.
ex :
[client]
+id_
nom VARCHAR(30) DEFAULT "Machin" COMMENT "Nom du client."

3 Lundi 10 Novembre 2008 11:51:11, Metal3d

@Fabrice > Effectivement il n'y a pas de moyen direct, il faut demander à l'auteur si il peut ajouter cette idée qui me parait logique... A moins qu'il ne l'ait déjà implémenté :)

4 Jeudi 13 Novembre 2008 10:49:35, Fabrice

@Metal3d : Bonne suggestion, je viens d'en faire la demande à l'auteur, et vous fournirai sa reponse si cela vous dit.

5 Vendredi 14 Novembre 2008 12:04:21, Fabrice

Je viens d'avoir la réponse de Bombela à qui j'avais également posé une question sur les champs de type ENUM avec plus de 2 valeurs possibles qui retournent une erreur lors de la création du fichier sql.
Voic donc la réponse de l'auteur :

[...]
Alors pour ce qui est des commentaires, en réalité, ce n'est tout simplement pas prévus.
Tu sembles arriver à en placer car tu fait croire à MeriseAcide que ce sont des champs,
alors, il sont traité comme tels. Il faudrai que je travaille un peu le code pour
ajouter la possibilité de faire suivre des commentaires.

Pour ce qui est de ta deuxième question, c'est un bug de MeriseAcide.
Un check du parser un peu trop simpliste foire.

Le première risque fort de n'être jamais implémenté, mon temps est trop limité,
et pour le deuxième, j'essayerai de m'en occuper dans les jours (comprendre semaines)
à venir.

Voici tes tickets :

http://bombela-dev.is-a-geek.org/MeriseAcide/ticket/95
http://bombela-dev.is-a-geek.org/MeriseAcide/ticket/94

[...]


Ajouter un commentaire
Veuillez répondre à la question suivante : Tapez "clap" sans guillemets dans le champs suivant

Trackbacks

Pour ajouter un trackback (retrolien) sur ce ticket, utilisez cette adresse: http://www.metal3d.org/index.php/trackback/default/tb?id=blog%2F103

Ohloh profile for Metal3D

Suivre ce site:

Vous êtes déjà

à suivre ce site via RSS.
Vous voulez suivre le flux RSS du site ? vous pouvez utiliser votre lecteur favoris:

RSS feed

ou ajoutez les nouvelles de ce site sur votre page personnalisée:

Add to Google
netvibes
yahoo
feedreader
bloglines
newsgator
pageflakes
webwag
wikio
live
aol
You need to upgrade your Flash Player