PyUt1.1 Python UML Tool version 1.1 Rapport de projet Cédric

Transcription

PyUt1.1 Python UML Tool version 1.1 Rapport de projet Cédric
PyUt1.1
Python UML Tool version 1.1
Rapport de projet
Cédric Dutoit
EI6, eivd
17 juillet 2002
PyUt 1.1
Table des matières
1 Informations générales
3
2 Rappel du cahier des charges
2.1 Etat au début du projet . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Responsabilités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Fonctionalités à implémenter . . . . . . . . . . . . . . . . . . . . . . . .
4
4
4
4
3 Déroulement du développement
5
4 Etat final du projet
4.1 Correction des bugs de PyUt 1.0 . . . . . . . . . . . . . . . . .
4.2 Amélioration de l’édition de classes : Ajout de commentaires .
4.3 Ajout de l’édition du diagramme des cas d’utilisation (use-case
4.4 Internationalisation . . . . . . . . . . . . . . . . . . . . . . . .
4.5 Arbre de projet . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 Reverse-engineering et génération de code . . . . . . . . . . .
4.7 Notes UML . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.8 XMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.9 Tests automatisés . . . . . . . . . . . . . . . . . . . . . . . . .
4.10 Aide contextuelle . . . . . . . . . . . . . . . . . . . . . . . . .
4.11 Localisation des sources . . . . . . . . . . . . . . . . . . . . .
5 Tests
5.1 Tests
5.1.1
5.1.2
5.1.3
5.1.4
5.2 Tests
unitaires . . . . . . . . . . . . .
Fonctionnement . . . . . . . .
Philosophie des tests unitaires
Programmes nécessaires . . .
Ecrire de nouveaux tests . . .
utilisateurs . . . . . . . . . . .
Rapport de projet
2 / 12
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . .
. . . .
view)
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
6
6
6
6
6
6
7
7
7
7
8
.
.
.
.
.
.
9
9
9
9
9
10
10
C.Dutoit, EI6
PyUt 1.1
Résumé
PyUt est un petit éditeur UML graphique qui permet la génération, l’impression et l’export de diagrammes de classes et use-cases sous différents formats. Ce document présente
le rapport final du projet PyUt 1.1 qui est la suite directe du projet PyUt 1.0.
1
Informations générales
PyUt 1.1 fait suite au projet PyUt 1.0 développé comme projet de groupe durant le
cinquième semestre de notre formation d’ingénieurs informaticien à l’école d’ingénieurs
d’Yverdon (Suisse). Le projet PyUt 1.1 est également développé à l’EIVD durant le
sixième et dernier semestre de notre formation.
Nom du projet PyUt - Python UML Tool
Site de référence http://pyut.sf.net
Sources du projet Disponible par CVS (cf 4.11 page 8)
Professeur responsable T. Gagnebin <[email protected]>
Membres du groupe
–
–
–
–
–
–
Laurent Burgbacher <[email protected]>
Nicolas Dubois <[email protected]>
Cédric Dutoit <[email protected]>
Nabil Hamadi <[email protected]>
Dève Roux <[email protected]>
Philippe Waelti <[email protected]>
Rapport de projet
3 / 12
C.Dutoit, EI6
PyUt 1.1
2
Rappel du cahier des charges
2.1
Etat au début du projet
PyUt 1.0 offre les fonctionalités suivantes :
– Edition de diagrammes de classes UML 1.3
– Enregistrement et chargement dans des formats de fichier propriétaire XML compressé et XML non compressé (*.put)
– Support de plugins pour l’enregistrement et le chargement de diagrammes de
classes
– Aide standard et tutorial (exemple)
– Documentation développeur grâce à pyDoc, outil de génération de documentation
dynamique semblable à JavaDOC.
2.2
Responsabilités
Chef de groupe, Site web Cédric Dutoit
Chef de groupe remplaçant, CVS, Configuration, Releases : Dève Roux
Documentation, Qualité : Philippe Waelti
Tests : Laurent Burgbacher
Internationalisation : Nicolas Dubois
Feedback : Nabil Hamadi
2.3
Fonctionalités à implémenter
Pour le projet PyUt 1.1, nous souhaitons réaliser les tâches suivantes :
–
–
–
–
–
–
–
–
–
–
Correction des bugs de PyUt 1.0
Amélioration de l’édition de classes : Ajout de commentaires
Ajout de l’édition du diagramme des cas d’utilisation (use-case view)
Internationalisation : possibilité de choisir la langue du logiciel parmis l’anglais et
le français, avec extension possible pour d’autres langages
Ajout de la possibilité d’ouvrir plusieurs fichiers en même temps (arbre de projet)
Ajout de Roundtrip (génération de code et reverse engineering) pour les langages
Python et Java. Ajout de la génération de code C++
Ajout des notes UML dans le diagramme de classes
Ajout de tests automatisés du logiciel
Ajout d’une aide contextuelle (infobulles)
Ajout de l’import/export XMI, qui est un format standard d’échange de données
UML, reconnu entre autre par Rational Rose
Rapport de projet
4 / 12
C.Dutoit, EI6
PyUt 1.1
3
Déroulement du développement
Dans une ambiance agréable, les développeurs ont su collaborer tout au long de ce
projet, ainsi qu’assumer leurs rôles respectifs.
Le développement de ce projet s’est déroulé dans des conditions parfaitement idylliques,
conformément aux planification temporelles prévues en début de projet. Celui-ci s’est
déroulé en plusieurs phases, soit une phase d’étude et d’analyse (très rapide, car il y
avait peu de besoin) pour l’établissement du cahier des charges. Chaque développeur
s’est alors attelé à corriger les bugs de la version précédente de PyUt. Une première
deadline a clôturé la correction des bugs et a marqué le début de la phase suivante, soit
le développement des nouvelles fonctionalités.
Durant cette phase, L.Burgbacher a continué à travailler sur les liens entre les classes,
qui ne s’affichaient pas comme attendu.
Notons encore l’utilité du système CVS (Logiciel de contrôle et suivi de versions) lorsque
N.Dubois a du s’occuper d’implémenter l’internationalisation de PyUt. En effet, il devait travailler sur la majorité des fichiers sources sur lesquels les autres développeurs
travaillaient, sans pour autant corrompre ces fichiers. Avec le système CVS, nous avons
pu déclarer que N.Dubois travaillait sur une nouvelle branche du projet et que ses modifications étaient compartimentées et mémorisées, en vue d’une fusion (merge) plus
tard avec la branche de développement principale de PyUt(devel 1 0).
Cette phase de développement s’est arrêtée début juin pour permettre une phase de
tests d’une séance de cours (2 périodes), suivie par L.Burgbacher, responsable des tests.
(Voir rapport de test, section 5)
Les trois séances suivantes ont été consacrées à la correction des bugs et au développement
de la documentation, ainsi qu’à la création de la distribution finale de PyUt.
D.Roux, responsable des releases a alors crée toutes les distributions de PyUt1.1 :
distribution .exe auto-installable pour Windows, distribution .tar.gz multi-plateforme
(sources) et distribution Linux en .RPM.
La session suivante a été consacrée à la préparation de la présentation à la classe, puis
la dernière session à la présentation proprement dite. La dernière semaine, PyUt1.1 a
également été présenté à nos successeurs, soit aux étudiants de deuxième année, section
logiciel.
Travailler à plusieurs sur un projet tel que PyUt est extrêmement gratifiant. La motivation des membres par rapport au projet amène tous les jours des satisfactions. Par
exemple, un jour alors que nous venons de charger depuis le CVS la dernière version
de PyUt, nous constatons qu’une nouvelle fonctionalité s’est ajoutée et est directement employable pour nos laboratoires, pour d’autres cours. Parfois, un collaborateur
particulièrement motivé travaille tout un week-end sur le projet et le transforme radicalement vers un idéal. Les éléments se montent progressivement comme se monte un
chateau de carte, pour construire une unité utile et stable : PyUt1.1 !
Rapport de projet
5 / 12
C.Dutoit, EI6
PyUt 1.1
4
Etat final du projet
Tous les points du cahier des charges ont été remplis, exception faite de l’exportation
XMI. Cette tâche est terminée à 70%; la raison en est donnée à la section 4.8 page
suivante
4.1
Correction des bugs de PyUt 1.0
Tous les bugs détectés et marqués comme capitaux lors de PyUt 1.0 ont été corrigés.
Certains bugs détectés par la suite ont été également corrigés. Le bug essentiel corrigé étaient les liens entre les classes qui ne se chargeaient/sauvaient/affichaient pas
correctement.
4.2
Amélioration de l’édition de classes : Ajout de commentaires
Les commentaires de classes ont étés ajoutés et sont disponible à l’édition d’une classe.
4.3
Ajout de l’édition du diagramme des cas d’utilisation (use-case view)
Les acteurs et les systèmes ont été intégrés dans Pyut. Seul défaut actuel (en est-ce
vraiment un), la possibilité de mixer le diagramme de classe et le use-case view.
4.4
Internationalisation
La Possibilité de choisir la langue du logiciel parmis l’anglais et le français a été rendue
posible grâce à l’outils standard GNU gettext, outil prévu pour l’internationalisation
(i18n). Il est possible d’ajouter rapidement d’autres langues à PyUt . (Voir la section
i18n dans la documentation développeurs)
4.5
Arbre de projet
L’arbre de projet a été codé et intégré dans PyUt et permet d’ouvrir plusieurs fichiers
en même temps, un seul diagramme par fichier.
4.6
Reverse-engineering et génération de code
– La génération de code Python fonctionne, avec support de commentaires standards
pydoc.
Rapport de projet
6 / 12
C.Dutoit, EI6
PyUt 1.1
– Le reverse-engineering Python fonctionne pour plusieurs fichiers. Le programme
lit les fichiers et demande de sélectionner les classes à analyser puis génère les
diagrammes de classe UML. L’héritage est reconnu, mais le reverse-engineering
d’agrégation et de composition n’est pas réalisé, car il engendre trop de problèmes
politiques (Par exemple, faut-il afficher une agrégation pour l’agrégation d’une
classe réalisée seulement dans une procédure?)
– La génération de code C++ fonctionne avec génération de fichiers .h et .cpp dans
des dossiers distincts, et avec support du système de documentation standard
doxygen. (support = génération des tags de commentaires pour les en-têtes de
procédure, de classe, ...)
– La génération de code Java fonctionne avec support du système de documentation
automatique JAVADOC.
– Le reverse engineering Java fonctionne pour un seul fichier à la fois. L’implémentation d’interface et l’héritage sont implémentés, en plus du reverse engineering
des éléments standards : méthodes, données-membres, classes, ...
4.7
Notes UML
Les notes UML ont été ajoutées dans PyUt et permettent de documenter les classes
présentes dans le diagramme de classe, comme tout autre élément graphique.
4.8
XMI
Ajout de l’import/export XMI : l’importation fonctionne pour des fichiers XMI simples,
et l’exportation ne fonctionne pas actuellement, mais il manque peu de chose pour
qu’elle fonctionne. XMI est un format de fichier complexe qui demande beaucoup de
lignes de code par classe sauvée et pour cette raison, l’exportation ne fonctionne pas.
La moindre ligne de code XML oubliée entraı̂ne une lecture impossible, ou refusée d’un
lecteur XMI. (Par exemple, le lecteur XMI de Rational Rose). Nous espérons que cette
fonctionalité sera développée pour la prochaine version de PyUt.
4.9
Tests automatisés
Une série de tests automatisés par canevas de test ont été mis en place et sont disponibles dans le dossier src/tests. Lancer testall.py ou chaque fichier indépendamment.
Les tests s’exécutent et retournent le résultat de test à l’écran.
4.10
Aide contextuelle
Une aide contextuelle s’affiche lorsque l’utilisateur reste avec la souris sur un élément
graphique de PyUt , comme un bouton de commande (sous le menu).
Rapport de projet
7 / 12
C.Dutoit, EI6
PyUt 1.1
4.11
Localisation des sources
Les sources du projet sont disponibles sur le site WEB de pyut (http://pyut.sf.net),
sur Sourceforge(http://www.sf.net/projects/pyut) ou par CVS.
CVS est un logiciel de gestion de versions de documentation puissant, beaucoup utilisé
dans le monde libre et par des entreprises de développements conséquentes (ELCA).
L’accès aux sources par CVS 1 se fait par les lignes de commandes suivantes, en console
de type unix (Unix, Linux, Cygwin) :
cvs -d :pserver:[email protected]:/cvsroot/pyut login
cvs -z3 -d :pserver:[email protected]:/cvsroot/pyut co pyut
Si CVS demande un mot de passe, entrer un mot de passe vide (return). Pour obtenir la documentation, effectuer les mêmes commandes en remplaçant co pyut par
co pyutDoc.
1. http://www.cvshome.org
Rapport de projet
8 / 12
C.Dutoit, EI6
PyUt 1.1
5
Tests
Deux sortes de tests ont été réalisés sur PyUt : des tests unitaires et des tests utilisateurs.
5.1
5.1.1
Tests unitaires
Fonctionnement
Les tests unitaires sont automatisés. Ils sont réalisés avec le module Python standard
unittest. Ces tests sont pratiques une fois réalisés, car ils peuvent être lancés très facilement, et leur résultat est immédiat et binaire : réussi ou échoué. unittest est dérivé du
canevas de tests JUnit 2 qui est le canevas de référence, écrit en Java. Pour plus d’informations, voir le document “Unit : Canevas de tests” 3 réalisé par Laurent Burgbacher
serviteur dans le cadre d’un projet personnel.
En pratique, peu de tests unitaires ont été réalisés, du fait qu’ils sont relativement
mal adaptés à des projets axés sur l’interface graphique. Comme PyUt fait très peu de
choses en dehors de la gestion d’objets graphiques, les seuls tests unitaires concernent
les classes :
– Singleton
– FlyweightString
– PyutPreferences
Ces derniers sont disponibles dans le répertoire src/tests. L’exécution du fichier
TestAll.py lance tous les tests et affiche un petit rapport.
5.1.2
Philosophie des tests unitaires
Le but des tests unitaires est de vérifier en tout temps l’état du programme développé
de manière rapide et automatique. Ainsi, on lancera les tests le plus souvent possible,
de manière à repérer au plus vite la modification qui aura fait échouer un des tests.
Il est bon de commencer le développement d’un module en écrivant tout d’abord ses
tests. Ainsi, le développeur devra fixer l’interface du module avant de le développer, et
saura en tout temps quelles sont les parties qui ne respectent pas encore les tests.
5.1.3
Programmes nécessaires
unittest est un module standard Python, donc tout ce qu’il faut se résume à une
distribution Python.
2. http://www.junit.org
3. http://www.alawa.ch/eivd/unit/unit report.pdf
Rapport de projet
9 / 12
C.Dutoit, EI6
PyUt 1.1
5.1.4
Ecrire de nouveaux tests
S’il vous venait l’envie (excellente) de créer de nouveaux tests, un fichier template.py
fourni un modèle, toujours dans le répertoire src/tests. Le fichier TestAll.py crée
une suite de tests en chargeant tous les fichiers nommés TestXXX.py (où XXX est le nom
de la classe que vous testez) et en les exécutant.
5.2
Tests utilisateurs
Le mercredi 12 juin 2002 a été consacré aux tests. Chaque développeur a utilisé PyUt
dans le but de trouver des erreurs, et un système de “bug reports” a été mis en place
de la manière suivante :
– Détection d’un bug
– Annonce du bug au responsable tests
– Réponse positive
– Création d’un rapport de bug selon le fichier modèle (src/bugs/template.txt)
dans un nouveau fichier
– Ajout du fichier au CVS
– Catalogage du bug par le responsable tests et assignation à un développeur
– Réponse négative
– Le bug a déjà été déclaré, un rapport de bug existe, suite de la recherche
Le mercredi suivant a commencé par la correction des bugs les plus importants. Chaque
bug corrigé est consigné dans le rapport correspondant et vérifié par le responsable tests.
Les rapports sont disponible dans src/bugs.
Rapport de projet
10 / 12
C.Dutoit, EI6
PyUt 1.1
6
Ouvertures
Voici les éléments à implémenter dans PyUt pour les versions ultérieures :
–
–
–
–
–
–
–
–
–
–
–
–
7
Ajout d’édition d’autres diagrammes UML
Possibilité d’enregistrer plusieurs diagrammes par fichier
Support de plus de langages (reverse-engineering et génération de code)
Compatibilité et support d’autres logiciels (XMI)
Ajouter des préférences dans les préférences existantes
Réaliser une bounding box pour l’exportation Bitmap, pour n’exporter que ce qui
est utile
Améliorer les plugins, proposer des templates pour la génération de code (dans
lesquels on peut mettre les conventions de codage, par exemple)
Supporter plus de langages : C#, Visual Basic, ADA, SQL, ...
Améliorer la méthode de travail dans PyUt : Ajout de racourcis clavier, ajout
de création rapide de méthodes de classes en entrant un texte du style ”int methode(param1:type, param2:type)”
Permettre la réalisation de liens qui se ’crochent’ sur des liens
Elargir le champ d’horizon des plugins, proposer un tutorial pour la création
de plugins et stimuler les étudiants de l’EIVD ou le monde de l’Open-Source à
développer des plugins (comme projet de semestre, par exemple)
Améliorer la structure de base des données pour mieux apréhender la complexité
future du développement de PyUt. (=Refactoring)
Références
–
–
–
–
–
Site de Sourceforge : http://www.sourceforge.net
CVS (Concurrent Versions System) : http://www.cvshome.org
Python : http://www.python.org
wxPython : http://www.wxpython.org
Site du projet : http://pyut.sf.net
Rapport de projet
11 / 12
C.Dutoit, EI6
PyUt 1.1
8
Conclusion
Dans le cadre du premier projet de groupe, nous avons réalisé le logiciel PyUt1.0, éditeur
de classes UML codé en Python. Ce projet y fait suite et sous le numéro de version 1.1,
ce projet implémente des fonctionalités supplémentaires, comme le Roundtrip Java et
Python ainsi que la génération C++.
D’autres fonctionalités ajoutées lors de ce projet ont été l’intégration d’un arbre de
projet, la possibilité d’importer les données à partir du format XMI, reconnu dans
Rational Rose.
Ce projet a connu un vif succès puisque la première version, PyUt1.0, a été téléchargée
plus de 5000 fois. La version Alpha de PyUt1.1 a été téléchargée plus de 360 fois sans
que nous ayons fait aucune publicité (compteurs du 9 juillet 2002).
Ce projet intéressant et utile mérite d’être poursuivi, par exemple lors des travaux de
groupe ou de semestre de nos successeurs à l’EIVD.
Nous tenons à remercier ici l’EIVD pour son support et pour nous avoir permis de
développer ce projet une année durant notre formation, comme projet de groupe.
Rapport de projet
12 / 12
C.Dutoit, EI6