Disposition graphique de diagrammes sous Open ModelSphere Présentation finale GLO-3002 David Poulin-Gagnon Louis-Vincent Guay Philippe Létourneau Gabriel Roy-Lortie Qu’est-ce qu’Open ModelSphere (OMS)? • Connu auparavant sous le nom de SILVERRUN ModelSphere • Logiciel open source sous licence GPL, mais de plus en plus de ses composants sont sous licence LGPL • Modélisation de tous types de diagrammes UML et de modèles de données • Permet de faire du reverse engineering • Projet dirigé par Grandite • Neosapiens inc., notre client, participe activement à son développement www.ulaval.ca Projet à réaliser • Problématique • OMS ne permet pas de disposer automatique un diagramme de façon acceptable • L’utilisateur doit donc disposer lui-même le diagramme après un reverse engineering avant qu’il ne soit utilisable • Besoin • Un diagramme rapide à lire et à parcourir • Un diagramme facile à comprendre www.ulaval.ca 3 Projet à réaliser • Développer un plugiciel (plugin) de disposition automatique de diagrammes pour le logiciel de modélisation UML OpenModelSphere • Idéalement, le plugiciel doit être sous licence LGPL • Principalement utilisé pour disposer un diagramme après une opération de reverse engineering www.ulaval.ca 4 Objectifs • Implanter un ou plusieurs algorithmes de disposition de diagrammes • Critères des algorithmes • Fonctionner pour les diagrammes de classes et les diagrammes de modélisation relationnelle de données • Être performant et s’exécuter rapidement • Éviter le croisement des arêtes et la superposition des tables/classes • L’espace occupé par un diagramme doit être minimal www.ulaval.ca Contraintes et difficultés du projet • Problème très complexe • La disposition automatique de diagrammes est un problème NP-Complet • Il n’y a pas de solution miracle permettant de disposer tous les diagrammes parfaitement • Les algorithmes avancés sont majoritairement issus de documents et de thèses de doctorat assez complexes • Peu d’implantation • Domaine de recherche très actif en constante évolution • Par conséquent, peu de librairies de disposition graphique sont disponibles • Bien comprendre le problème est essentiel! www.ulaval.ca Architecture logicielle • OMS possède déjà une certaine architecture pour la disposition de diagrammes : • Représentation du diagramme dans l’application à l’aide de métadonnées • Construction d’une abstraction du diagramme (Graph) pour la disposition • Les algorithmes de disposition peuvent alors manipuler les nœuds et les arêtes à l’aide du Graph • Possibilité pour l’utilisateur de choisir les algorithmes de disposition qu’il désire • Seules les métadonnées mises à jour par les algorithmes sont conservées • Le Graph est jeté après chaque disposition www.ulaval.ca Architecture logicielle - suite • L’équipe n’a pas modifié cette architecture • Le type Graph a cependant été modifié et bonifié par l’intégration de la librairie JGraphT • Les algorithmes ont été implantés de telle façon que le comportement de l’application n’a pas été modifié www.ulaval.ca Stratégie de test • Tests d’acceptations • 7 cas de test d’acceptation ont été identifiés en début de projet • Utilisés tout au long du développement pour évaluer l’atteinte des demandes • Tests unitaires • Absence de tests unitaires dans OMS • L’équipe et Neosapiens ont convenu que des tests unitaires seraient un atout pour le développement du plugiciel • Utilisation de JUnit et Mockito • Vérification de la couverture de code avec EclEmma www.ulaval.ca Solutions envisagées • Tentative d’utilisation de la librairie JGraphX pour la disposition • Échec • Les algorithmes disponibles ne fonctionnaient pas bien • L’algorithme de disposition en damier qui motivait l’utilisation de cette librairie n’était finalement pas implanté • Mentionnons au passage que l’architecture de cette librairie était d’une rare médiocrité… • Algorithme de Sugiyama • Algorithme d’Arevalo • Algorithme UML-Kandinsky www.ulaval.ca Solution finale - JGraphT • Intégration de JGraphT pour la représentation d’un Graph • Simplifie la manipulation des nœuds et des arêtes • Les représentations des graphes de cette librairie sont generic • Le type des nœuds et des arêtes est donc indépendant du type de graphe utilisé • Les nœuds n’ont plus besoin de connaitre leurs voisins c’est le Graph qui s’occupe de tout. • Particulièrement utile étant donné que les nœuds et les arêtes étaient déjà définis dans le plugiciel www.ulaval.ca Solution finale - Sugiyama • Bien connu dans le domaine de la disposition de diagrammes • Permet de tracer un graphe avec des arêtes le plus droit possible tout en évitant les croisements • Approprié pour l’héritage des classes puisque le diagramme résultant est dirigé du bas vers le haut • Plusieurs implantations disponibles, mais l’équipe en a développé une sur mesure afin de faciliter l’intégration à OMS www.ulaval.ca Solution finale – Sugiyama (suite) • Algorithme en 4 étapes 1. Retrait des cycles 2. Mise en couche (layering) 3. Ordonnancement des nœuds 4. Assignation des coordonnées • Implémenté avec succès! www.ulaval.ca Solution finale - Arevalo • Compacte les clusters (ensemble de nœuds) ce qui minimise l’espace occupé par le diagramme • Fonctionnement simple • Chaque cluster est délimité par un rectangle • Les rectangles sont emboités de gauche à droite et de haut en bas • L’algorithme permet de définir une marge qui ne sera pas occupée autour de chaque cluster • Utilisé en tandem avec Sugiyama • Implémenté avec succès! www.ulaval.ca Solution finale – UML-Kandinsky • Algorithme conçu par Markus Eiglsperger en 2003 pour la disposition de diagrammes de classes UML • Fonctionne en 3 étapes : 1. Planarisation • Élimine le croisement des arêtes 2. Orthogonalisation • Dispose les nœuds en damier 3. Compaction www.ulaval.ca Solution finale – UML-Kandinsky (suite) • Seule documentation disponible : thèse de doctorat • Très lourd à démarrer • Beaucoup d’heures passées pour comprendre le fonctionnement des diverses étapes • Et à chercher les algorithmes qui n’étaient pas décrits dans la documentation • Seule la planarisation a été complétée • Plusieurs semaines auraient été encore nécessaires pour les 2 autres étapes • Néanmoins une avenue à explorer www.ulaval.ca Solution finale - Bilan des tests • Tests unitaires • Plus de 200 tests • Près de 80% de couverture de code • Tests d’acceptations • 3 dont les attentes ont été réalisées • 3 qui le sont partiellement • 1 qui ne répond pas aux attentes • Le plugiciel est un bon départ même si toutes les attentes des tests d’acceptations n’ont pas été réalisées www.ulaval.ca 17 Démonstration • Une petite démo en direct! www.ulaval.ca 18 Post-mortem - déroulement • Le projet a été divisé en 2 phases 1. 2. Recherche de librairies et d’algorithmes de disposition de diagrammes (State of the arts) Développement du plugiciel : l’implantation des algorithmes • Le développement a été découpé en 3 itérations de 3 semaines chacune • Revue de projet • À la fin de chaque itération • La progression du projet en fonction des tests d’acceptation • L’orientation à prendre pour la prochaine itération www.ulaval.ca Post-mortem – rôle des participants • David : Chargé de projet • Identifier les tâches à accomplir et les distribuer aux membres de l’équipe • Rédiger les revues de projet et la charte de projet • Développement sur Arevalo et la planarisation d’UML-Kandinsky • Gabriel • Implémentation de Sugiyama • Intégration de JGraphT • Développement sur la planarisation d’UMLKandinsky www.ulaval.ca Post-mortem – rôle des participants (suite) • Philippe • Intégration et essai de JGraphX • Javadoc et revue de code • Développement sur l’orthogonalisation de UML-Kandinsky • Louis-Vincent • Rédaction des documents sur la conception • Intégration de JGraphT • Développement sur l’orthogonalisation et la compaction d’UML-Kandinsky www.ulaval.ca Commentaires du client • Très satisfait des résultats • Appréciation de l’inclusion de tests unitaires • La fonctionnalité sera probablement incluse dans la prochaine version de Open ModelSphere • « La qualité des échanges avec les membres de l'équipe était également excellente et me laisse une impression d'avoir travaillé avec des gens professionnels. » Neosapiens www.ulaval.ca Bons coups • Algorithme de Sugiyama et d’Arevalo • Bons résultats vs le temps d’implantation • Code propre et respectant les standards d’OMS • Inclusion de tests unitaires • Bonne tentative de compréhension d’UMLKandinsky malgré la lourdeur de la tâche • Plugin fonctionnel et performant = objectif atteint! www.ulaval.ca Erreurs • L’équipe aurait dû pousser un peu plus les recherches en début de projet • L’implantation de Sugiyama a été faite from scratch alors qu’il existe plusieurs implantations Java LGPL disponibles. • Rien d’autre de majeur à signaler! www.ulaval.ca Conclusion • Questions/commentaires? www.ulaval.ca