J'ai souvent vu sur les forums UML des personnes se plaindre des performances des modeleurs UML, j'ai donc décidé de comparer BOUML à d'autres modeleurs au début de son développement :
La façon la plus facile pour moi d'avoir un projet contenant un grand nombre de classes ayant (normalement) la même définition sous plusieurs modeleurs est de reverser des sources de Java JDK (1.4.2). En utilisant des sources disponibles par tout le monde, chacun peut ainsi comparer son modeleur à BOUML. Bien-sûr le reverse sous BOUML n'utilise pas de catalogue produit pas Java catalog, ce qui ne serait pas équitable. Tous les tests sont fait sans firewall ou détecteurs de virus actifs.
La première observation est que seul BOUML et Enterprise Architect permettent de reverser l'ensemble des sources de Java (c'est à dire les répertoires com, java, javax, launcher, org, sunw et leurs sous répertoires), les autres outils demandant généralement trop de mémoire. Dans le cas de Visual Paradigm et UModel il n'a pas été possible de sauver le résultât, dans le cas de starUML il n'a pas été possible de recharger le modèle !
Sur mon PC (Pentium 4, CPU 3Ghz et 512 Mb de mémoire) sous Windows XP, Bouml 2.25 reverse tout les sources de Java version 6 (update 1) en 6 minutes 40 secondes, la taille do processus quand tout est reverse est de 172 Mo. Le reverse créé 9425 classes, 48506 propriétés (attributs and relations) et 85939 opérations.
Test fait sur mon PC sous Windows XP, Pentium 4, CPU 3Ghz, 512 Mb de mémoire.
Enterprise Architect n'a pas de phase de sauvegarde, toute modification impacte les fichiers mémorisant le modèle (ce trouve cela très étrange, car je considère que toute sauvegarde doit être explicite et choisie), aussi j'ai regroupé les phases de reverse et de sauvegarde en une pour donner le temps utilisé par BOUML. Evidemment je ne demande pas à Enterprise Architect de créer automatiquement les diagrammes pour ne pas le ralentir.
La séquence de test est :
BOUML | Enterprise Arch. | Enterprise Arch. / BOUML | |
Reverse+Sauvegarde | 51 sec | 11 min 25 | 13 |
Lecture | 3 sec | 4 sec | 1 |
Taille processus | 38 Mb | 31 Mb | 1 |
Génération | 16 sec | 4 min 31 | 17 |
Test fait sur mon PC sous Windows XP, Pentium 4, CPU 3Ghz, 512 Mb de mémoire.
Poseidon est un gros consommateur de mémoire et de CPU, il a seulement été possible de reverser le répertoire java.awt et ses sous répertoires. J'ai demandé à Poseidon de ne pas produire les diagrammes. La séquence de test est :
BOUML | Poseidon | Poseidon / BOUML | |
Reverse | 17 sec | 2 min 30 | 9 |
Sauvegarde | 2 sec | 51 sec | 25 |
Lecture | 0.7 sec | 49 sec | 70 |
Taille processus | 17 Mb | 314 Mb | 18 |
Note : Il n'a pas été possible de mesurer le temps de génération de code, car Poseidon ne permet de générer les sources que pour un très petit nombre des classes du modèle.
Test fait sur mon PC sous Windows XP, Pentium 4, CPU 3Ghz, 512 Mb de mémoire.
Rhapsody permet de reverser le répertoire java et ses sous répertoires. La séquence de test est :
BOUML | Rhapsody | Rhapsody / BOUML | |
Reverse | 47 sec | 6 min 17 | 8 |
Sauvegarde | 4 sec | 28 sec | 7 |
Lecture | 3 sec | 23 sec | 8 |
Taille processus | 38 Mb | 165 Mb | 4 |
Génération | 16 sec | 3 min 18 | 12 |
Test fait sous Windows XP prof 2002, Pentium 4, CPU 2.8Ghz, 1 Gb de mémoire.
Rose permet de reverser le répertoire java et ses sous répertoires. La séquence de test est :
BOUML | Rose | Rose / BOUML | |
Reverse | 39 sec | 12 min 55 | 20 |
Sauvegarde | 4 sec | 11 sec | 3 |
Lecture | 2 sec | 17 sec | 7 |
Taille processus | 38 Mb | 157 Mb | 4 |
Note : je n'ai pas mesuré la génération de code car celle-ci doit être demandée composant par composant !
Test fait sur mon PC sous Windows XP, Pentium 4, CPU 3Ghz, 512 Mb de mémoire.
Visual Paradigm permet de reverser le répertoire java et ses sous répertoires, mais il n'a pas été possible de sauver le projet : j'ai préférer tuer le processus après 11 minutes car la taille mémoire était devenue énorme. J'ai refais l'essai sur un PC ayant 1 Gb de mémoire, la sauvegarde à pris 44 secondes mais en fait rien n'était sauvé : en essayant de sortir VP demandait de sauver le projet, en répondant oui de nouveau une attente de 44 secondes sans que rien ne soit sauvé et si on essaye de sortir VP redemande de sauver le projet ! Si je refuse alors la sauvegarde (théoriquement déjà faite deux fois) et qu'on recharge le projet ce dernier est vide !
il est donc seulement possible de reverser le répertoire java/awt et ses sous répertoires (et de sauver le résultat). La séquence de test est :
BOUML | Visual P | Visual P / BOUML | |
Reverse | 17 sec | 25 sec | 1.5 |
Sauvegarde | 2 sec | 49 sec | 25 |
Lecture | 0.7 sec | 21 sec | 30 |
Taille processus | 17 Mb | 279 Mb | 16 |
Génération | 6 sec | 12 sec | 2 |
Note : comme vous pouvez le voir, Visual Paradigm prend curieusement deux fois plus de temps pour sauver le projet que pour faire le reverse !
Test fait sur mon PC sous Windows XP, Pentium 4, CPU 3Ghz, 512 Mb de mémoire.
starUML permet de reverser tout les sources de java (mais il faut presque 40 minutes alors que Bouml le fait en 3 minutes 35), de sauver le résultat mais pas de relire le projet : sur mon PC j'ai préféré tuer le processus après 10 minutes.
Durant le reverse je demande à starUML de ne pas produire les diagrammes pour ne pas le ralentir.
La séquence de test est :
BOUML | starUML | starUML / BOUML | |
Reverse | 57 sec | 5 min 5 | 5 |
Sauvegarde | 4 sec | 8 sec | 2 |
Lecture | 3 sec | 40 sec | 13 |
Taille processus | 38 Mb | 165 Mb | 4 |
Génération | 16 sec | 11 | 0.7 |
Test fait sur mon PC sous Windows XP, Pentium 4, CPU 3Ghz, 512 Mb de mémoire.
UModel permet de reverser tout les sources de java (en 5 minutes alors Bouml le fait en 3 minutes 35), mais il n'est pas possible de sauver le résultat : sur mon PC j'ai préféré tuer le processus après 10 minutes car la taille du processus était d'environ 1 Go.
Durant le reverse je demande à UModel de ne pas produire les diagrammes pour ne pas le ralentir.
La séquence de test est :
BOUML | UModel | UModel / BOUML | |
Reverse | 57 sec | 50 sec | 0.9 |
Sauvegarde | 4 sec | 34 sec | 9 |
Lecture | 3 sec | 14 sec | 5 |
Taille processus | 38 Mb | 115 Mb | 3 |
Génération | 16 sec | 21 sec | 1.3 |
Test fait sur mon PC sous Windows XP, Pentium 4, CPU 3Ghz, 512 Mb de mémoire.
Jude permet de reverser le répertoire java et ses sous répertoires. La séquence de test est :
BOUML | Jude | Jude / BOUML | |
Reverse | 47 sec | 8 min 20 | 11 |
Sauvegarde | 4 sec | 25 sec | 6 |
Lecture | 3 sec | 33 sec | 11 |
Taille processus | 38 Mb | 228 Mb | 6 |
Génération | 16 sec | 6 min | 23 |
Test fait sur mon PC sous Windows XP, Pentium 4, CPU 3Ghz, 2.5 Gb de mémoire.
Omondo est un des outils travaillant sous Eclipse, comme il est impossible d'utiliser Eclipse avec seulement 512 Mo de mémoire j'ai largement étendu celle-ci en ajoutant 2 Go.
Les tests de performance du reverse Java on été faits sur Xerces 2.8.1 car Omondo n'a pu reverser le package Java : après 3 minutes l'application était totalement bloquée sans consommer de CPU, tuer le processus fût la seule issue. Le reverse est effectué par via un Reverse UML > Deep Reverse > XMI Backup
Pour m'adapter aux spécificités de l'outil j'ai modifié la séquence de test, celle-ci est :
BOUML | Omondo | Omondo / BOUML | |
Reverse | 33 sec | 13 min 48 | 25 |
Taille processus (1) | 24 Mo | 420 Mo | 17 |
Taille processus (2) | 24 Mo | 162 Mo | 7 |
Diagramme de classes | < 0.1 sec | 1 min 50 | > 1000 |
Taille processus (3) | 25 Mo | 330 Mo | 13 |
Lecture | 1.5 sec | 1 min | 40 |
Réouverture diagramme | < 0.1 sec | 10 sec | > 100 |
Opérations basiques | ~ 0 sec | plusieurs sec | > 1000 |