vendredi 30 juillet 2010

Rétro-conception UML de classes par introspection java


Objectif

Utiliser les mécanismes d’introspection java pour afficher un diagramme de classes UML.

Introduction

Hier je me suis demandé s’il était faisable de générer un diagramme UML à partir d’une classe de base Java. Après une nuit blanche passée à plancher sur le problème, voici la première version d’un outil développé en 24 heures pouvant se révéler fort pratique et qui va bientôt concurrencer doxygen ou umlGraph ;)

Pseudo cahier des charges

  • Traiter toutes les classes dépendantes d’une classe mère ( ou classe de base )
  • Ne pas introspecter les packages java natifs ( commençant par java, javax et sun )
  • Afficher les superClasses, les interfaces et les classes utilisées par les attributs de classe
  • Afficher un diagramme UML global au format PNG à partir de l’outil graphviz

Améliorations ( version 1 )

  • Traiter toutes les classes d’une arborescence ( package ou racine )
  • Discriminer les interfaces des classes normales
  • Mettre les superclasses au dessus des classes spécialisées

Améliorations ( version 2 )

  • Faire des sous-graphes par packages
  • Gérer en objet les éléments Graphviz
  • Paramètres gérés : afficher les détails, détailler les interfaces, afficher les superclasses

Améliorations possibles

  • Traiter des jar
  • Générer un fichier petal rose
  • Remplir un fichier de propriétés avec les informations ( quasiment déjà intégré depuis la version 0 )

Diagramme UML de l’outil ( version 0 )

Diagramme UML de l’outil ( version 1 )

Diagramme UML utilisé pour les tests

Diagrammes UML utilisés pour les tests ( version 2 )

 

Pour approfondir les sujets

2 commentaires:

  1. Ca fait un moment que je cherche à faire exactement la même chose : générer à la volée des schémas UML de mes classes Java, le plus simplement du monde.

    Mon cahier des charges serait simple :
    - aussi peu intrusif que possible (ne pas avoir à mettre d'annotations dans chaque classe, etc.) ;
    - aussi peu de configuration que possible (ne pas devoir déclarer toutes les classes dans un XML) ;
    (bref aussi "automatique" que possible = trouver le bon niveau de granularité entre "configurations" et "rendus" (un seul schéma avec toutes les classes,ce n'est sans doute pas jouable non plus).
    - lançable depuis un plugin Maven et/ou en ligne de commande ;
    - génération de fichiers images *UNIQUEMENT* en Java, pas de dépendances vers Graphviz que je ne peux *pas* installer sur les serveurs de ma boîte (une misère ...) ;

    Au final je n'ai quasiment trouvé que UMLGraph (nécessite Graphviz) et yDoc (a l'air assez génial, mais payant, impossible de l'avoir chez moi).

    Si ton projet peut aller dans les directions que j'évoque, çà m'intèresse ! (de l'utiliser, de le tester, voire de participer).

    Niveau génération de .dot en Java, j'ai longtemps cherché, il y a eu qqs ébauches de projets, mais rien d'opérationnel.
    La librairie qui a l'air le + sympa pour faire des graphs, c'est Prefuse, mais bon, le rendu est quand même franchement lent pour avoir un positonnement correct (pas trop de croisements) quand il commence à y avoir bcp de nodes (inévitables en UML avec un gros projet).

    Bon courage en tout cas ;)

    RépondreSupprimer
  2. Pour la plupart de tes besoins, c'est OK.
    Par contre, il y a une classe "DotFileManager" qui génère le fichier utilisé par GraphViz et aussi l'appel à l'outil d'AT&T.
    Tu peux toujours récupérer le fichier généré et l'appliquer sur un PC utilisant GraphViz si ma solution t'intéresse ;)

    Cordialement,

    Sylvain

    RépondreSupprimer