MeriseAcide une autre analyse que UML

12/08/2008

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: 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

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

Passons au MPD:

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

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]

Ça peut vous intéresser aussi


Petit outil UML

Je vous ai parlé de MeriseAcide, un petit outil bien ...


Générer un graph pseudo UML PHP

Je vous ai parlé de mon petit outil, GTU (Graphlanguage ...


Les designs patterns une preuve de faiblesse du langage

Le titre peut faire frémir et vous pensez que je ...


CSS 3 et tant pis pour les autres

Un truc me titillent les neurones depuis quelques temps, et ...

Merci de m'aider à financer mes services

Si vous avez apprécié cet article, je vous serai reconnaissant de m'aider à me payer une petite bière :)

Si vous voulez en savoir plus sur l'utilisation de flattr sur mon blog, lisez cette page: Ayez pitié de moi

Commentaires

Ajouter un commentaire

Metal3d - 12/08/2008

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

Fabrice - 07/11/2008

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.”

Metal3d - 10/11/2008

@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é :)

Fabrice - 13/11/2008

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

Fabrice - 14/11/2008

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

[…]

rillator - 03/02/2009

bonjour, Je suis impatient de tester l’outil mais pour le moment si je fait le tuto, lorsque je fait : ./MeriseAcide -f png -m analyse1/MCD.png analyse1/analyse.ma j’ai l’erreur suivante : ./MeriseAcide_Linux32: error while loading shared libraries: libltdl.so.3: cannot open shared object file: No such file or directory Avez vous deja eu cela chez vous ? Merci

sur ubuntu 8.10

Metal3d - 09/02/2009

Salut, Pour la librairie libltdl je ne sais pas trop ce qu’il en est sur ubuntu mais tu devrais tenter de voir avec aptitude (ou apt-get) si tu ne la trouve pas…

diarchen22 - 03/02/2011

Bonjour, Je suis vraiment impressionné par ce projet, qui m’est actuellement très utile. Par contre , il y a un souci , dans le cas d’un champ qui n’appartient à aucune des tables mais plutôt à une relation, existe il une syntaxe pour faire apparaître ce champ dans la relation ?

Ajouter un commentaire

(*) Votre e-mail ne sera ni revendu, ni rendu public, ni utilisé pour vous proposer des mails commerciaux. Il n'est utilisé que pour vous contacter en cas de souci avec le contenu du commentaire, ou pour vous prévenir d'un nouveau commentaire si vous avez coché la case prévue à cet effet.