Outils & Techniques d'analyse des applications héritées

Webinaire May 2016
Dans ce webinaire, nous vous montrerons comment:
  • Ingénierie inverse du code source d'une application héritée
  • Profil de l'application en cours d'exécution pour un aperçu rapide et un rapport
  • Visualiser le comportement au moment de l'exécution pour améliorer la compréhension et automatiser la documentation

Avez-vous des applications héritées que vous devez documenter et conserver?
Avez-vous hérité d'une grande base de code que vous avez simplement besoin de comprendre?

Ben Constable
Ben Constable

Explorer l'exemple de modèle d'application

Nous avons fourni l'exemple du modèle Enterprise Architect et le code de l'exemple de code City Loop utilisé dans le webinaire.
Exemple Modèle: city-loop-legacy-application-model.eap Download the Enterprise Architect Model of the City Loop Example Application
Code d'applicatione: city-loop-cpp-application-code.zip Download the Enterprise Architect Database Engineering Example Model

Questions de l'auditoire

Cliquez sur une question pour voir la réponse.

Général

Quelle version d'Enterprise Architect me donnera ce que vous avez démontré?

J'ai utilisé Enterprise Architect 12.1, Build 1229, bien que de nombreuses versions antérieures supportent l'ingénierie inverse du code. Le Profiler a été introduit dans la version 8 et le support pour le débogage et l'enregistrement des applications natives Windows a été introduit avec Enterprise Architect 7.

Des améliorations significatives ont été apportées à ces outils dans des versions plus récentes d'Enterprise Architect.

Quelle édition d'Enterprise Architect va faire cela?

Les éditions professionnelles et supérieures permettent tous les outils pertinents. (J'ai utilisé Ultimate édition pour cette présentation). Vous pouvez comparer les fonctionnalités disponibles à chaque édition d'Enterprise Architect sur Comparer la page Web des éditions.

Savez-vous si cette fonctionnalité fonctionnera lorsque vous exécutez Enterprise Architect sur Linux avec WINE?

Oui. Nos ingénieurs utilisent régulièrement Visual Execution Analyzer sous Linux lors du développement d'Enterprise Architect lui-même.

Pourriez-vous fournir le code source de ce programme de train?

Nous avons fourni le code source dans la section ressources de cette page. Vous pouvez également trouver le code source sous votre dossier d'installation d'Enterprise Architect. Recherchez le sous-dossier \ Code Samples \ VEA.

Y at-il une limite à la taille du projet?

Enterprise Architect ne fixe aucune limite. Les limites pratiques dépendront des spécifications de votre machine. Si vous utilisez un RDBMS dédié pour héberger votre modèle, votre serveur de base de données et la vitesse réseau entre votre machine et le serveur peuvent également imposer des contraintes sur la taille maximale possible de votre projet.

Cela dit, chez Sparx, nous travaillons systématiquement sur un modèle partagé avec plus de 100 000 éléments et relations qui sont contenus dans des milliers de différents packages et diagrammes. Dans le contexte de l'ingénierie de code, nous avons trouvé Enterprise Architect fonctionne bien, même avec des bases de code extrêmement grand.

Sparx Systems propose-t-il une formation vidéo?

Bien que nous fournissions des webinaires courts et des démonstrations vidéo qui vous montrent comment appliquer divers outils dans Enterprise Architect, nous ne considérons pas cette formation formelle de produit. La formation professionnelle est assurée par nos partenaires de service. Pour trouver un partenaire autorisé de Sparx Systems Training près de chez vous, veuillez consulter notre Page web des formateurs.

Est-ce que Enterprise Architect prend en charge le Métamodèle de Découverte de Connaissances (Knowledge Discovery Metamodel - KDM) de l'OMG?

Pas actuellement.

Pourriez-vous fournir vos fichiers d'exemple pour C # et Java?

Alors que l'exemple City Loop a été écrit spécifiquement comme un exemple Visual C ++ MFC, nous fournissons également d'autres exemples pour C # et Java. Ces derniers sont fournis avec l'installation d'Enterprise Architect. Pour accéder à ces exemples:

  1. Ouvrez Enterprise Architect
  2. Du Aide menu, choisissez Ouvrez Modèle d'Exemple
  3. Dans le Explorateur de Projet, naviguez jusqu'à la vue d'analyse d'exécution. Sous cette vue, vous trouverez des paquets nommés .Net et Java. Chacun d'entre eux contient des modèles d'ingénierie inversée d'exemples d'applications.
  4. Vous pouvez trouver le code source correspondant sous votre dossier d'installation d'Enterprise Architect. Recherchez le sous-dossier \ Code Samples \ VEA.

Ingénierie Inverse

Où était l'option du menu d'importation pour la source que vous avez importée?

J'ai sélectionné un package dans l'Explorateur de projets d'Enterprise Architect. Puis j'ai cliqué avec le bouton droit de la souris et j'ai choisi le menu Code Engineering | Importer le répertoire source. Vous pouvez voir cela démontré dans la vidéo de présentation à partir de 2:40 minutes.

Quelles sont les langues prises en charge - que les langages orientés objet ou SQL et ETL sont également pris en charge?

Enterprise Architect prend en charge 15 langages de programmation prêts à l'emploi, dont certains ne sont pas des langages orientés objet. Pour une liste complète, consultez la rubrique d'aide Importation du code source.

Le SQL, en forme des fichiers DDL, n'est pas soutenu par les outils d'ingénierie de code d'Enterprise Architect. Au lieu de cela, vous générez des schémas de base de données à l'aide du Générateur de bases de données d'Enterprise Architect, qui se connecte à une base de données en direct via ODBC pour extraire le schéma et créer un modèle UML correspondant. Pour une démonstration, voir notre précédent Webinaire de Génie de la base de données.

Enterprise Architect ne fournit pas actuellement d'intégration avec les outils ETL (Extract, Transform and Load) hors de la boîte.

Comment Enterprise Architect gère-t-il des bases de code très volumineuses?

Nous avons utilisé Enterprise Architect pour réussir l'ingénierie inverse des applications à grande échelle, y compris notre propre base de code C ++ extrêmement importante. La capacité avancée d'ingénierie inverse d'Enterprise Architect, combinée à un référentiel de modèles hautement évolutif, permet aux utilisateurs d'importer des bases de code très volumineuses tout en conservant un environnement de modélisation performant et performant.

Qu'en est-il des applications distribuées?

L'ingénierie inverse de la structure statique de votre code doit être la même que pour les autres bases de code d'application. Toutefois, lorsque vous utilisez les outils VEA pour analyser l'application en cours, gardez à l'esprit que le Profiler, l'Enregistreur et le Débogueur ne peuvent attacher qu'une instance de votre code d'exécution. Cela peut limiter votre analyse si votre application distribuée implique plusieurs instances de votre application s'exécutant sur différents serveurs / processeurs.

Est-ce que Enterprise Architect stocke le code source ou est-ce que la source est disponible sur la machine? Comment cela fonctionne-t-il dans un environnement partagé où la source peut ne pas se trouver sur la machine sur laquelle le modèle Enterprise Architect est affiché?

Généralement, Enterprise Architect ne stocke pas le code source. Il conserve un chemin vers le code importé, qui peut se référer à votre machine locale ou une ressource partagée.

Lorsque votre modèle est utilisé dans un environnement partagé ou dans un scénario où les copies de la base de code résident sur des machines différentes pour différents éditeurs de modèles, la fonctionnalité Chemins locaux d'Enterprise Architect est utile. Il vous permet de représenter la première partie du chemin du code source sous forme de symbole. Cela peut représenter le nom du lecteur ou du serveur et la partie initiale du chemin du dossier sur ce périphérique. Chaque auteur de modèle peut résoudre ce symbole, ID de chemin local, à un emplacement différent sur leur machine. Vous pouvez ultérieurement modifier l'emplacement du code sur votre machine, tout simplement en mettant à jour la valeur de chemin local afin que Enterprise Architect puisse continuer à tracer du modèle au code.

Je vis dans un monde COBOL. Avez-vous des outils pour cela?

Non, actuellement Enterprise Architect ne prend pas en charge l'ingénierie inverse de COBOL.

Est-il possible d'inverser l'ingénierie PL / SQL sur Oracle?

Pas actuellement.

Les types de fichier multiples peuvent-ils être importés, par exemple, .java et fichiers .jsp?

Vous pouvez importer des bases de code à partir de plusieurs langues dans un seul modèle Enterprise Architect. Cependant, vous n'immandez pas de plusieurs langues en même temps. Utilisation du dialogue répertoire Source d'importation, vous ne pouvez choisir qu'une langue cible ou type de source. Ce type de source peut avoir plusieurs extensions de fichier associées, mais ils sont toujours tous pour la même langue.

A noter également: Enterprise Architect ne prend pas en charge l'ingénierie de code pour JSP.

Pouvez-vous importer le code source des programmes IBM i RPG?

Non.

Existe-t-il des plans pour ajouter de la prise en charge du Progress OpenEdge ABL language?

Actuellement, il n'existe aucun plan pour la mise en œuvre de la prise en charge d'OpenEdge ABL. Il existe la possibilité pour les utilisateurs de construire des grammaires de reverse engineering de code personnalisé pour Enterprise Architect pour importer des langages de programmation non pris en charge, mais cela nécessite un investissement considérable de temps. Pour plus d'informations, reportez-vous à la rubrique Guide d'aide Grammar Framework.

J'ai besoin d'ingénierie inverse à partir d'un fichier NoSQL (json). Tout projet de mise à jour du Générateur de bases de données?

Il n'y a pas de plans immédiats pour prendre en charge NoSQL dans le Générateur de bases de données.

J'ai utilisé Enterprise Architect pour faire de l'ingénierie inverse C ++ et C #. Quelles nouvelles fonctionnalités ont été ajoutées à C # depuis 2011?

Nous avons publié de nombreuses mises à jour du support d'Enterprise Architect pour l'importation de code C ++ et C #, y compris les améliorations qui acceptent les nouvelles constructions de langage. Pour plus de détails sur les mises à jour spécifiques, vous pouvez rechercher l'historique des versions d'Enterprise Architect: Dans le menu Aide dans Enterprise Architect, choisissez l'option Lisez-moi

Remarque: les versions les plus récentes de C # et C ++ introduisent la syntaxe que Enterprise Architect 12.1 ne prend pas en charge. Nous nous attendons à ce que la prochaine version majeure d'Enterprise Architect apporte un support pour ces deux langues à jour.

Existe-t-il un moyen de supprimer les macros (directives de préprocesseur) dans l'importé?

Oui. Pour obtenir des instructions, consultez la rubrique d'aide Language Macros.

Pouvez-vous générer un diagramme de séquence en pointant vers une méthode?

Pas directement à partir du modèle de classe UML, car il représente la structure statique de l'application. Vous générez des diagrammes de séquence à l'aide des outils Visual Execution Analyzer d'Enterprise Architect, comme Profiler and Recorder. Ces outils génèrent des diagrammes de séquence basés sur le comportement d'exécution de votre application.

Pouvez-vous importer du code source dans des blocs SysML au lieu d'UML?

Non, cela n'est pas pris en charge. Vous pouvez toutefois appliquer le stéréotype de bloc SysML en tant qu'étape de post-traitement après l'importation de votre code.

Vous planifiez des améliorations liées à Delphi, comme l'analyseur semble cassé à moi?

Si vous avez essayé d'importer du code Delphi et que celui-ci a échoué, je vous recommande d'envoyer un e-mail à notre support technique (support@sparxsystems.com) avec un échantillon de votre code.

Tous les plans pour support Objective-C ou Swift?

Actuellement, il n'y a pas de plans pour la mise en œuvre du soutien pour Objective-C ou Swift.

Prévoyez-vous de prendre en charge JavaScript ou TypeScript?

Actuellement, il n'existe aucun projet de mise en œuvre de la prise en charge de JavaScript ou de TypeScript.

Lorsque nous utilisons Enterprise Architect pour effectuer l'ingénierie inverse du code C #, nous devons dessiner manuellement le lien entre les modules ou les projets. Existe-t-il une fonctionnalité dans Enterprise Architect qui affichera automatiquement le lien entre les modules?

En supposant que la liaison requise est un ensemble de dépendances entre les packages UML créés dans le cadre de l'importation de code: Il n'existe actuellement aucune fonctionnalité intégrée à Enterprise Architec pour effectuer cette opération automatiquement.

Qu'en est-il des références externes en important - sont-ils convertis en classes ou comment sont-ils représentés à l'intérieur d'Enterprise Architect?

Cela dépend de la nature de la référence. Dans la plupart des cas, la référence sera maintenue sous la forme d'un nom de type, sans classificateur sous-jacent. Par exemple, considérons une classe A, avec une variable membre (attribut UML) v1, de type B, qui est une classe externe, non définie dans le code source importé. Ce scénario est illustré comme suit:

L'attribut v1 a une référence externe non résolue à la classe B. Seul le nom de type "B" est modélisé.

Notez le type d'attribut UML pour A.v1 est B. Le nom de type, B, peut être résolu à un autre classificateur après une importation de code ultérieure qui contient la définition de classe B.

La référence à B de v1 peut être résolue plus tard par l'importation du code contenant la définition de classe B.

De même, pour les relations parent-enfant non résolues, le nom de la classe de base (parent) sera tenu comme une chaîne. Comme illustré ici, la classe B a une référence externe à sa classe parente C.

Les classes avec des références externes non résolues à une classe parent ne présentent que le nom de classe parent

Le nom de la classe de base peut être résolu plus tard dans une classe spécifique du modèle si la définition de code correspondante est importée. À ce moment, la chaîne de nom simple représentant le nom de la classe de base sera remplacée par une relation d'héritage UML tirée de la classe enfant à la classe de base.

Les références externes aux classes parent peuvent être résolues ultérieurement en important le code avec la définition de classe parent

Enterprise Architect support un mélange de code procédural et basé sur une classe pour Visual C ++ 6.0?

Lorsque vous reverse engineering code C ++, seul le code basé sur la classe est importé, qui inclut structs et typedefs. Il existe également un support pour l'importation de code C qui utilise des fichiers d'en-tête et le mappage vers un modèle de classe UML. Toutefois, vous ne pouvez pas importer le code comme cible C pur et comme cible C ++ en même temps.

J'ai essayé d'importer du code PHP, et comme il n'a pas été écrit dans un formulaire orienté objet, il n'a rien importé du tout.

Il est exact que Enterprise Architect importe uniquement le code PHP orienté objet, qui peut être mappé à un modèle UML.

Est-ce que Enterprise Architect prend en charge l'Ingénierie Inverse pour les applications sur Android ou iOS?

Vous pouvez effectuer un reverse engineering et un débogage des applications Java, comme décrit dans la rubrique d'aide Le Débogueur Android. L'ingénierie Inverse des applications iOS n'est pas prise en charge actuellement.

En synchronisant le code, il est possible de supprimer accidentellement des opérations et des attributs dans le modèle. Est-ce qu'il y a un moyen d'éviter cela?

Oui, vous pouvez indiquer à Enterprise Architect de ne pas supprimer les attributs et les méthodes lors de la mise à jour du modèle pendant la synchronisation du code:

  1. Appelez la boîte de dialogue Optionsà partir du menu principal en utilisant Outils | Options.
  2. Ouvrez l'onglet Attribute / Opérations de l'onglet de Source Code Engineering | Attribut / Opérations.
  3. Décochez les deux options suivantes:
    • On reverse synch, delete model attributes not in code
    • Sur synchronisation inversée, supprimez les méthodes du modèle non dans le code
  4. Cliquez sur le bouton Fermer.

Profilage

Qu'est-ce que 'Inclusive Hit%' veut dire?

Cette figure est répertoriée en regard de chaque fonction dans le résumé du Profiler. Il représente le pourcentage d'échantillons où le Profiler a trouvé que la fonction était en cours d'exécution, y compris lorsque l'échantillon impliquait d'autres fonctions qui ont été invoquées dans le cadre de l'exécution de cette fonction. (En termes de pile d'appels, les hits inclusifs pour une fonction donnée incluent toutes les fonctions ci-dessous).

Notez également: Le chiffre de hits inclusif pour chaque fonction représente les invocations combinées de cette fonction (et d'autres elle invoque) sur tous les threads engendrés par le processus profilé.

Pour plus d'informations sur la façon dont les comptes de frappe se rapportent aux piles d'appels, consultez la rubrique d'aide Profilage.

Les applications Web peuvent-elles être profilées?

Oui, si l'application est exécutée depuis votre machine locale.

Je n'ai pas vu de liste de types supportés de projet. Le Profiler marchera-t-il pour des apps Web ou des apps de type de service/démon de fenêtres ?

Oui, tant que l'application ou le service est exécuté depuis votre machine locale.

Comment fonctionne le Profiler pour le profil d'un site Web?

Le Profiler n'est pas conçu pour les sites Web de profil. Il peut, cependant, profil d'une application Web exécutée localement.

Pouvez-vous filtrer / exclure certaines classes / fonctions que vous ne voulez pas voir dans vos diagrammes générés? Par exemple, certaines fonctions sont trop bas.

Non. Le filtrage de ces fonctions dans le profileur aurait le potentiel de rendre le rapport trompeur, voire fallacieux. Rappelez-vous, les rapports du profil et ses diagrammes générés, s'appuient sur l'analyse statistique des échantillons prélevés sur la pile d'appels. Comparez cela avec l'enregistreur et ses diagrammes générés, où vous pouvez effectivement «zoom out» de l'exécution du programme en filtrant les fonctions de bas niveau.

Cet outil supporte-t-il des informations de profil de C ++/GCC ?

Non, le Profiler ne supoort pas de programmes construits avec GCC. L'Enregistreur et le débogueur supportent tous deux les applications GCC-compilées. Dans ce scénario, vous devez sélectionner GDB comme débogueur dans votre script d'analyseur

Le Profiler fonctionne-t-il avec les applications C ++ Constructeur?

Non.

Pouvez-vous connecter le Profiler à une application Web Java à distance sur Linux?

Non. Le Profiler ne se rattache pas aux applications distantes, mais vous pouvez faire le profil d'une application Web, d'un démon ou d'un service sur votre machine locale.

Notez également: Contrairement au Générateur de profils, l'enregistreur et le débogueur sont tous deux capables de cibler une application locale ou distante.

Les données peuvent-elles être exportées vers un fichier texte pour les rapports en dehors d'Enterprise Architect?

Oui. Vous pouvez exporter les données vers un fichier XML comme décrit dans la rubrique d'aide Générer, enregistrer et charger des rapports de profil.

Pouvez-vous s'il vous plaît prendre un exemple de code Java et montrer comment utiliser le Profiler?

Nous envisagerons de produire une courte vidéo montrant le profileur travaillant sur un exemple Java. Dans l'intervalle, vous pouvez explorer l'exemple Java fourni avec l'installation d'Enterprise Architect. Pour des instructions, voir la question précédente de C# et des exemples de code Java .

Comment puis-je faire le profil d'une application exécutée sur une cible intégrée, comme BeagleBone?

Actuellement, il n'y a aucun support de profilage pour le logiciel incorporé. Nous envisageons d'ajouter le support de notre Analyseur d'Exécution Visuel (VEA) pour le logiciel incorporé dans l'avenir.

Je suis particulièrement intéressé par l'utilisation d'Enterprise Architect pour le profil des applications dans un environnement croisé, où les outils de développement et d'analyse s'exécutent sur Linux et le code d'application s'exécute sur un système Linux incorporé

Nous trouvons vraiment le Profiler et d'autres outils VEA utiles dans un scénario trans-compilé où, par exemple, une application Windows est exécutée et établie le profil sur Linux. (Enterprise Architect et ses outils VEA travaillent bien sur Linux l'utilisation du WINE). Malheureusement le profilage une application fonctionnant sur un système incorporé n'est pas encore supporté.

Est-ce possible d'établir le profil des modules spécifiques d'une plus grande application? Dois-je importer tout le code source ou suis là des techniques pour se concentrer sur certains modules?

Les modules ne peuvent pas être discriminés. Vous ne devez cependant pas importer de code source pour utiliser le Profiler.

Que diriez-vous de l'application multi-niveaux complexe quand la couche de présentation utilise le Javascript exécuté dans un explorateur?

The VEA tools cannot deal with JavaScript in browsers / apps. When we investigated this previously, we found the debugging API is browser-dependent (so different for Chrome, Opera, Firefox and Internet Explorer) and not published. The exception was Internet Explorer, though Microsoft is withdrawing support for their process debug manager 'scripting', which allowed you to intercept the script engine in any process.

Enregistreur

Pouvez-vous exporter les diagrammes générés dans des formats comme HTML, DOCX ou PDF?

Oui. Ces formats sont tous supportés. Pour plus d'informations voir le sujet d'Aide Génération de rapports.

Vous pourriez également être intéressé par les webinaires suivants:

Comment le code se lie-t-il avec la state machine? (Comme dans la cueillette d'une variable qui donne l'état pour l'affichage)

Premièrement, vous définissez une state machine sous une classe particulière. Enterprise Architect peut alors relater cette state machine à une classe particulière dans la base de code.

En outre, chaque state dans la state machine contient des contraintes avec des références aux variables membres définies dans le code de cette classe. Les contraintes stipulent quelles valeurs les variables doivent avoir pour être dans cet state et permettre la transition vers le state suivant. (Dans le modèle fourni, vous pouvez voir ces contraintes en ouvrant les propriétés d'un élément State et en regardant sous l'onglet Constraints. La state machine et son diagramme sont définis dans la classe CTrain.)

Pendant l'enregistrement, l'Enregistreur comparera vos valeurs modelées pour les variables de classe contre les valeurs réelles utilisées dans le code d'exécution, l'accentuation n'importe quels changements illégaux de le state (selon la state machine. Pour plus de détails voir le sujet d'Aide Rapport d'une State Machine.

Comment le diagramme de séquence généré (Stations) qui déclare que chaque objet est?

Comme mentionné dans la réponse précédente, la state machine est modelée sous une classe UML particulière dans votre modèle - efficacement obligatoire la state machine à cette classe dans le code aussi. Enterprise Architect peut alors comparer des valeurs variables dans cette classe contre les valeurs indiquées dans les contraintes de l'élément de la state. Pour plus de détails voir le sujet d'Aide Rapport d'une State Machine.

Debug Platform Support

Un lien vers une démo C # serait apprécié.

Veuillez consulter notre webinaire antérieur sur Visual Execution Analyzer, qui contenait un exemple d'application C #: Utiliser l'Analyseur d'Exécution Visuel dans Enterprise Architect.

Je voudrais analyser des applications incorporées - disent quelque chose de construit pour une plate-forme de BRAS utilisant IAR, ou le processeur de Jacinto TI si exécutant un système en temps réel d'exploitation (RTOS) comme le Noyau ou QNX. C'est possible ?

On considère le profilage et l'enregistrement de logiciel incorporé pour une sortie future. Aussi des systèmes en temps réel d'exploitation ne sont pas actuellement supportés par l'ensemble d'outils VEA d'Enterprise Architect.

Puis-je analyser le code Java?

Oui. Pour plus de détails voir le sujet d'Aide Analyseur d'Exécution Visuel.

Delphi Frameworks, Fire Monkey et VCL sont-ils supporté par Enterprise Architect?

Ces cadres ne sont pas supportés par les outils VEA. Vous pouvez cependant étudier par ingénierie inverse le code Delphi, qui doit fonctionner indépendamment du framework Delphi utilisé par votre application.