---
title: "Analyse d'une application héritée avec Altova UModel – Partie 1"
date: "2009-04-16"
tags: 
  - "c"
  - "java"
  - "software-modeling"
  - "uml"
  - "uml-tool"
  - "umodel"
  - "visual-basic"
description: Découvrez comment Altova UModel facilite l'analyse des applications existantes grâce à la rétro-ingénierie, et comment il améliore la compréhension des projets Java, C# et Visual Basic.
---
Status: #blog

Tags:  #c #java #software-modeling #uml #uml-tool #umodel #visual-basic

Categories: [Altova](/blog/fr/category/altova.md) 
# Analyse d'une application héritée avec Altova UModel – Partie 1

Un jour ou l'autre, presque tous les développeurs professionnels se retrouveront à devoir corriger des erreurs ou à ajouter des fonctionnalités à une application existante dont ils n'ont pas participé à la création. Dans ces situations, une documentation inexacte ou incomplète, ainsi que le manque d'accès à l'équipe de développement d'origine, peuvent constituer des obstacles majeurs. Heureusement, [Altova UModel](https://www.altova.com/fr/products/umodel/uml_tool.html) peut [réaliser une rétro-ingénierie](https://www.altova.com/fr/features_reverse_engineer.html) de logiciels existants afin de créer un modèle visuel qui accélère l'analyse et améliore la compréhension d'une application existante. Voici la première d'une série d'articles dans lesquels nous allons utiliser UModel, la solution d'Altova [Outil UML pour la modélisation de logiciels](https://www.altova.com/fr/products/umodel/uml_tool.html) et au développement, afin d'analyser une simulation de distributeur automatique (ATM) rédigée en Java. L'application est basée sur plusieurs exemples de distributeurs automatiques tirés de tutoriels Java populaires. Étant donné que le système est simple et que le fonctionnement d'un distributeur automatique est bien connu, nous nous concentrerons davantage sur les techniques que vous pouvez appliquer à vos propres projets Java, C# et Visual Basic, plutôt que sur le code exemple. Voici une capture d'écran de l'application héritée en cours d'exécution dans une fenêtre de commande : 

[![Analyser une application existante avec Altova UModel](https://lh5.ggpht.com/_REdrfeVqYdU/Sed_-l0DTLI/AAAAAAAAABU/6-raolJrxpk/image1_thumb1.gif?imgmax=800 "Analyzing a Legacy Application with Altova UModel")](http://lh6.ggpht.com/_REdrfeVqYdU/Sed_-BNWN-I/AAAAAAAAABM/UsJK-uUZDsQ/s1600-h/image13.gif) 

Le développeur initial a gracieusement fourni les informations de connexion d'un compte de démonstration, ce qui nous permet de nous connecter. L'application affiche ensuite un menu de transactions de distributeur automatique familier :

[![Analyser une application existante avec Altova UModel](https://lh3.ggpht.com/_REdrfeVqYdU/Sed__4VIvHI/AAAAAAAAABc/eRfNTNU1BMc/image2_thumb1.gif?imgmax=800 "Analyzing a Legacy Application with Altova UModel")](http://lh5.ggpht.com/_REdrfeVqYdU/Sed__H7tHTI/AAAAAAAAABY/VDOrnnEzqxw/s1600-h/image23.gif) 

Si nous examinons le dossier contenant l'application, nous constatons la présence de fichiers sources Java et de fichiers .class compilés, mais aucun fichier de projet. 

[![Analyser une application existante avec Altova UModel](https://lh5.ggpht.com/_REdrfeVqYdU/SeeABYGobaI/AAAAAAAAABk/y7Q_dj7x3D8/image3_thumb1.gif?imgmax=800 "Analyzing a Legacy Application with Altova UModel")](http://lh5.ggpht.com/_REdrfeVqYdU/SeeABA_BmhI/AAAAAAAAABg/d1XUgpJ6tCw/s1600-h/image33.gif) 

Ce n'est pas un problème. Le menu du projet UModel nous permet d'importer un projet, un répertoire de code source, ou même les fichiers binaires d'une application compilée. Le code source de projets très volumineux est généralement organisé dans plusieurs dossiers, donc, même si vous avez un fichier de projet, il peut être utile d'examiner un dossier à la fois. 

[![Menu du projet UModel d'Altova](https://lh3.ggpht.com/_REdrfeVqYdU/SeeACSlKy2I/AAAAAAAAABs/DMIjj76IUrg/image4_thumb1.gif?imgmax=800 "Altova UModel Project Menu")](http://lh4.ggpht.com/_REdrfeVqYdU/SeeABvDWNpI/AAAAAAAAABo/0HNmMYw5ozY/s1600-h/image43.gif) 

Avant de commencer, nous allons nous assurer de configurer les options de UModel pour qu'il dessine automatiquement toutes les associations de classes définies dans le code source 

[![Dialogue des options d'Altova UModel](https://lh4.ggpht.com/_REdrfeVqYdU/SeeADbAPBmI/AAAAAAAAAB0/apw9S8S36qI/image5_thumb1.gif?imgmax=800 "Altova UModel Options dialog")](http://lh5.ggpht.com/_REdrfeVqYdU/SeeAC7sCJNI/AAAAAAAAABw/KJ5dD50EuvM/s1600-h/image53.gif)

Lorsque nous importons le dossier, nous souhaitons également inclure tous les commentaires JavaDoc présents dans le code source, afin de les utiliser comme documentation pour notre projet UModel 

[![Options du répertoire d'importation d'Altova UModel](https://lh3.ggpht.com/_REdrfeVqYdU/SeeAEb_SWQI/AAAAAAAAAB8/vyX0IzsXN1I/image6_thumb1.gif?imgmax=800 "Altova UModel Import Directory options")](http://lh3.ggpht.com/_REdrfeVqYdU/SeeAD4UkwmI/AAAAAAAAAB4/a09DTRdK1E8/s1600-h/image63.gif) 

Pour notre première exploration de cette application existante, nous souhaitons avoir une vue d'ensemble, nous n'ouvrirons donc pas tous les modules optionnels : 

[![Options de génération de diagrammes avec Altova UModel](https://lh5.ggpht.com/_REdrfeVqYdU/SeeAFCr9PXI/AAAAAAAAACE/hsT9EUQnh3k/image7_thumb1.gif?imgmax=800 "Altova UModel diagram generation options")](http://lh5.ggpht.com/_REdrfeVqYdU/SeeAErNf2wI/AAAAAAAAACA/c06PpbBlukA/s1600-h/image73.gif) 

UModel importe le projet en quelques secondes, et la fenêtre de messages indique qu'il n'y a aucune erreur. L'arborescence des diagrammes contient deux diagrammes : 

[![Projet de rétro-ingénierie utilisant Altova UModel](https://lh4.ggpht.com/_REdrfeVqYdU/SeeAGb4TU1I/AAAAAAAAACM/SNpifEp7W-E/image8_thumb1.gif?imgmax=800 "Altova UModel reverse engineering project")](http://lh3.ggpht.com/_REdrfeVqYdU/SeeAFm7VssI/AAAAAAAAACI/ARGlHfiFTYs/s1600-h/image83.gif) 

Nous pouvons cliquer sur l'onglet "Arbre des modèles" et développer le dossier source pour afficher les icônes représentant toutes les classes Java importées par UModel 

[![image9](https://lh3.ggpht.com/_REdrfeVqYdU/SeeAHUrKyHI/AAAAAAAAACU/hsRmFA_xVKE/image9_thumb1.gif?imgmax=800 "image9")](http://lh4.ggpht.com/_REdrfeVqYdU/SeeAG7BR_9I/AAAAAAAAACQ/eT803iLh0Ds/s1600-h/image93.gif) 

Nous pouvons revenir à l'arborescence des diagrammes pour ouvrir le contenu du diagramme de classes UML source [UML class diagram](https://www.altova.com/fr/features_class_diagram.html). Après avoir défini tous les styles de lignes comme étant orthogonaux et après avoir repositionné certaines lignes et classes pour éviter les chevauchements, nous constatons que le diagramme illustre clairement les classes de l'application et leurs relations : 

[![Diagramme de classes UML d'Altova UModel](https://lh3.ggpht.com/_REdrfeVqYdU/SeeAITR6w2I/AAAAAAAAACc/-Sq6tshlEaM/image10_thumb1.gif?imgmax=800 "Altova UModel UML class diagram")](http://lh3.ggpht.com/_REdrfeVqYdU/SeeAH5qIHRI/AAAAAAAAACY/S9YSO7cumAE/s1600-h/image103.gif)

Notez que le nom de la classe "Transaction" est en italique, ce qui indique qu'il s'agit d'une classe abstraite (ou classe mère), et que les sous-classes "BalanceInquiry", "Withdrawal" et "Deposit" héritent de ses caractéristiques. Si vous cliquez sur la classe "Transaction" pour la sélectionner, l'héritage est illustré dans la fenêtre d'aide "Hiérarchie" de UModel, et tous les commentaires JavaDoc apparaissant dans le code source immédiatement avant la définition de la classe sont affichés dans la fenêtre de documentation 

[![Fenêtre de la hiérarchie UModel d'Altova](https://lh6.ggpht.com/_REdrfeVqYdU/SeeAJMlCtgI/AAAAAAAAACk/B8XZcGNgqpQ/image11_thumb1.gif?imgmax=800 "Altova UModel Hierarchy window")](http://lh4.ggpht.com/_REdrfeVqYdU/SeeAI67t_2I/AAAAAAAAACg/EqzSgKSnA_A/s1600-h/image113.gif)

Si nous utilisions uniquement un éditeur de texte pour examiner l'application existante, nous devrions examiner chaque fichier de code source pour comprendre la hiérarchie illustrée ci-dessus. En effet, la classe Transaction ne reconnaît pas ses sous-classes en interne. Lorsqu'on identifie une sous-classe, elle ne reconnaît pas ses classes sœurs. Et nous ne pouvons pas être sûrs qu'une autre classe, dont le nom est illogique, ne soit pas une sous-classe de Transaction, tant que nous ne les avons pas toutes examinées. Vous pouvez également sélectionner chaque classe individuellement pour consulter sa documentation dans la fenêtre de documentation. Ou, si vous préférez un schéma plus clair, vous pouvez supprimer les étiquettes d'association du schéma uniquement : 

[![Menu contextuel accessible en faisant un clic droit dans Altova UModel](https://lh4.ggpht.com/_REdrfeVqYdU/SeeAKdOPRqI/AAAAAAAAACs/SbZaC71r3hg/image12_thumb1.gif?imgmax=800 "Altova UModel right-click context menu")](http://lh3.ggpht.com/_REdrfeVqYdU/SeeAJn5hYqI/AAAAAAAAACo/H2HMeR0EK9E/s1600-h/image123.gif) 

Maintenant, l'astérisque représentant la multiplicité "de zéro à plusieurs" des comptes dans la base de données bancaire est beaucoup plus visible. 

[![Diagramme de classes UML d'Altova UModel](https://lh4.ggpht.com/_REdrfeVqYdU/SeeALRzP2vI/AAAAAAAAAC0/Fdldw_Liu1g/image13_thumb1.gif?imgmax=800 "Altova UModel UML class diagram")](http://lh3.ggpht.com/_REdrfeVqYdU/SeeAK19kSnI/AAAAAAAAACw/YIEMn1DPyFY/s1600-h/image133.gif)

Un autre membre de notre équipe de développement a trouvé un diagramme de classes partiel, censé représenter l'ancien projet, et nous l'a transmis. Nous constatons immédiatement qu'il ne ressemble pas au diagramme généré par UModel : 

[![Diagramme de classes UML pour une application existante](https://lh6.ggpht.com/_REdrfeVqYdU/SeeAMbyxn_I/AAAAAAAAAC8/NBbye5jSIM4/image14_thumb1.gif?imgmax=800 "UML class diagram for legacy application")](http://lh6.ggpht.com/_REdrfeVqYdU/SeeAL5gvXsI/AAAAAAAAAC4/T1wD-oHmFCQ/s1600-h/image143.gif) 

La documentation de notre ancienne application ne correspond pas au code – un problème regrettable, mais courant ! Il existe plusieurs différences entre l'ancien schéma et celui que nous avons généré :

> · The associations between ATM and the physical components are shown as composition associations

> · The association between ATM and the BankDatabase is described by a text annotation

> · The association between ATM and Transaction also has a text annotation, and it does not even exist in the UModel diagram

> · Multiplicity is defined at each end of each association, but none were created by UModel

Examinons chaque point :

> · The representation of composition in the Java language is identical to ordinary association, so UModel could not deduce the composition characteristic. Of course the ATM “is composed of” a keypad, screen, cash dispenser, and deposit slot, so we can update the diagram to show composition.

> · We can add a text annotation to any UModel association arrow. Simply click the arrow and start typing.

> · If UModel did not create an association arrow between the ATM class and the Transaction, one must not be defined in the source code. We will postpone further investigation of this anomaly for now. · Multiplicity as shown in the legacy diagram would also require specific definition in the source code. We’ll leave this for investigation later too. Maybe that old diagram was left in the back of the file cabinet for a reason!

Nous allons ajouter l'annotation, puis mettre à jour la caractéristique d'agrégation de chaque association ATM dans la fenêtre des propriétés de UModel. Utilisons également la barre d'outils de mise en page de UModel pour rendre les rectangles représentant toutes les classes de la même taille. Notre diagramme de classes ressemble maintenant à ceci :


[![Diagramme de classes UML modifié pour le projet de distributeur automatique](https://lh4.ggpht.com/_REdrfeVqYdU/SeeANZJrhlI/AAAAAAAAADM/C7K2WWMrqwQ/image15a_thumb1.gif?imgmax=800 "Modified UMLclass diagram for ATM project")](http://lh5.ggpht.com/_REdrfeVqYdU/SeeAM25eGkI/AAAAAAAAADI/1hEHobCyq7o/s1600-h/image15a3.gif) 

Le diagramme de classes finalisé ne fait que nous permettre de commencer notre analyse. Dans les prochains chapitres, nous approfondirons l'étude du code de l'application et générerons automatiquement davantage de [Diagrammes UML](https://www.altova.com/fr/uml/), et créer de nouveaux schémas au fur et à mesure que notre compréhension du code existant s'améliore. 

Si vous souhaitez immédiatement commencer à analyser et à modifier vos anciennes applications Java, C# ou Visual Basic, [cliquez ici pour télécharger une version d'essai gratuite et entièrement fonctionnelle de 30 jours](https://www.altova.com/fr/download/umodel/uml_tool_enterprise.html) de [Altova UModel](https://www.altova.com/fr/products/umodel/uml_tool.html).
