Mapper des dépendances avec des cartes de code

Dans cet article, vous apprendrez à visualiser les dépendances dans votre code à l’aide de cartes de code.

Que sont les cartes de code ?

Dans Visual Studio, les cartes de code vous permettent de voir plus rapidement comment le code de votre programme s'articule, sans avoir à lire des fichiers ou des lignes de code. Grâce à ces cartes, vous pouvez voir l'organisation et les relations dans votre code, y compris sa structure et ses dépendances, comment le mettre à jour, et comment estimer le coût des changements proposés.

View dependencies with code maps in Visual Studio

Vous pouvez mapper les dépendances de code dans les langages suivants :

  • Visual C# ou Visual Basic dans une solution ou des assemblys (.dll ou .exe)

  • Code C ou C++ natif ou managé dans des projets, fichiers d’en-tête (.h ou #include) ou des fichiers binaires Visual C++

  • projets et assemblys X++ créés à partir de modules .NET pour Microsoft Dynamics AX.

Notes

Pour les projets autres que C# ou Visual Basic, il existe moins d’options pour démarrer une carte de code ou ajouter des éléments à une carte de code existante. Par exemple, vous ne pouvez pas cliquer avec le bouton droit sur un objet dans l’éditeur de texte d’un projet C++ et l’ajouter à une carte de code. Toutefois, vous pouvez glisser-déplacer des éléments de code individuels ou des fichiers à partir de l’Explorateur de solutions, de l’affichage de classes et de l’Explorateur d’objets.

Prérequis

Pour créer une carte de code dans Visual Studio, installez d’abord les composants Carte de code et Validation de dépendances dynamique

Pour créer et modifier des cartes de code, vous devez utiliser Visual Studio édition Enterprise. Cependant, dans les éditions Visual Studio Community et Professional, vous pouvez ouvrir des diagrammes qui ont été générés dans l’édition Entreprise, mais vous ne pouvez pas les modifier.

Notes

Avant de partager des cartes créées dans Visual Studio Enterprise avec d’autres personnes utilisant Visual Studio Professional, vérifiez que tous les éléments présents sur la carte (comme les éléments masqués, les groupes développés et les liens entre les groupes) sont visibles.

Ajouter une carte de code

Vous pouvez créer un plan de code vide et y faire glisser des éléments, notamment des références d'assembly, des fichiers et des dossiers, ou vous pouvez générer un plan de code pour tout ou partie de votre solution.

Pour ajouter une carte de code :

  1. Dans l’ Explorateur de solutions, ouvrez le menu contextuel du nœud racine de votre solution. Choisissez Ajouter>Nouvel élément.

  2. Dans la boîte de dialogue Ajouter un nouvel élément, sous Installé, choisissez la catégorie Général.

  3. Choisissez le modèle Document de graphe orienté (.dgml), puis sélectionnez Ajouter.

    Conseil

    Il se peut que ce modèle n'apparaisse pas dans l'ordre alphabétique. Si vous ne le voyez pas, faites défiler la liste des modèles jusqu'en bas.

    Une carte vide apparaît dans le dossier Éléments de solution de votre solution.

De même, vous pouvez créer un nouveau fichier de carte de code sans l'ajouter à votre solution en sélectionnant Architecture>Nouvelle carte de code ou Fichier>Nouveau>Fichier.

En savoir plus :

Générer une carte de code pour votre solution

Pour afficher toutes les dépendances dans votre solution :

  1. Dans la barre de menus, choisissez Architecture>Générer une carte de code pour la solution. Si votre code n’a pas changé depuis la dernière fois que vous l’avez créé, vous pouvez sélectionner à la place Architecture>Générer une carte de code pour la solution sans génération.

    Generate a code map command

    Vous obtenez une carte qui affiche les assemblys de niveau supérieur et les liens globaux qui les relient. Plus le lien global est large, plus il représente de dépendances.

  2. Utilisez le bouton Légende dans la barre d’outils de la carte de code pour afficher ou masquer la liste des icônes de type de projet (comme Projet de test, Projet web et Projet de téléphone), les éléments de code (comme Classes, Méthodes et Propriétés) et les types de relations (comme Hérite de, Implémente et Appelle).

    Top-level dependency graph of assemblies

    Cet exemple de solution contient des dossiers de solution (Tests et Composants), des projets de test, des projets web et des assemblys. Par défaut, toutes les relations d’imbrication apparaissent sous forme de groupesque vous pouvez développer et réduire. Le groupe Externes contient les éléments qui ne font pas partie de votre solution, notamment les dépendances de plateforme. Les assemblys externes affichent uniquement les éléments utilisés. Par défaut, les types de base du système sont masqués pour ne pas trop encombrer la carte.

  3. Pour descendre dans la hiérarchie de la carte, développez les groupes qui représentent des projets et des assemblys. Pour développer tout, appuyez sur Ctrl+A pour sélectionner tous les nœuds. Ensuite, choisissez Groupe, puis Développer dans le menu contextuel.

    Expanding all groups in a code map

  4. Ceci peut toutefois ne pas s’avérer très utile pour une solution de grande taille. En fait, pour les solutions complexes, les limitations de mémoire peuvent vous empêcher de développer tous les groupes. Pour visualiser l’intérieur d’un nœud individuel, développez-le. Déplacez le pointeur de la souris au-dessus du nœud, puis cliquez sur le chevron (flèche bas) quand il apparaît.

    Expanding a node in a code map

    Ou bien, sélectionnez l’élément et appuyez sur la touche plus (+) du clavier. Pour explorer des niveaux plus profonds de code, procédez de même pour les espaces de noms, les types et les membres.

    Conseil

    Pour plus d’informations sur l’utilisation des cartes de code à l’aide de la souris, du clavier et de l’interface tactile, consultez Parcourir et réorganiser des cartes de code.

  5. Pour simplifier la carte et cibler des parties individuelles, choisissez Filtres dans la barre d’outils de la carte de code et sélectionnez uniquement les types de nœuds et de liens qui vous intéressent. Par exemple, vous pouvez masquer tous les conteneurs Dossier Solution et Assembly.

    Simplify the map by filtering containers

    Vous pouvez également simplifier la carte en masquant ou en supprimant des groupes et des éléments individuels de la carte, sans affecter le code de la solution sous-jacent.

  6. Pour visualiser les relations entre les éléments, sélectionnez-les dans la carte. Les couleurs des liens indiquent les types de relations, comme le montre le volet Légende .

    View dependencies across your solutions

    Dans cet exemple, les liens violets correspondent aux appels, les liens en pointillés aux références et les liens bleu clair à l’accès aux champs. Les liens verts peuvent représenter l’héritage ou correspondre à des liens globaux qui indiquent plusieurs types de relations (ou catégories).

    Conseil

    Si vous voyez un lien vert, il ne signifie peut-être pas qu’il existe simplement une relation d’héritage. Il peut également exister des appels de méthode, mais ceux-ci sont masqués par la relation d’héritage. Pour afficher des types de liens spécifiques, utilisez les cases à cocher dans le volet Filtres pour masquer les types qui ne vous intéressent pas.

  7. Pour obtenir plus d’informations sur un élément ou un lien, déplacez le pointeur sur celui-ci jusqu’à ce qu’une info-bulle apparaisse. Celle-ci donne des détails sur un élément de code ou les catégories représentées par un lien.

    Show the categories of a relationship

  8. Pour examiner les éléments et les dépendances représentés par un lien global, sélectionnez d’abord le lien, puis ouvrez son menu contextuel. Choisissez Afficher les liens de contribution (ou Afficher les liens de contribution sur des nouvelles cartes de code). Cette opération développe les groupes aux deux extrémités du lien et affiche uniquement les éléments et les dépendances qui participent au lien.

  9. Pour cibler des parties spécifiques de la carte, continuez à supprimer les éléments qui ne vous intéressent pas. Par exemple, pour analyser l’affichage des classes et des membres, filtrez simplement tous les nœuds d’espace de noms dans le volet Filtres .

    Drilling down to class and member level

  10. Pour simplifier une carte de solution complexe, vous pouvez aussi générer une nouvelle carte contenant une sélection d’éléments à partir d’une carte existante. Maintenez la touche Ctrl enfoncée tout en sélectionnant les éléments qui vous intéressent, ouvrez le menu contextuel, puis choisissez Nouveau graphique à partir de la sélection.

    Show selected items on a new code map

  11. Le contexte est reporté sur la nouvelle carte. Masquez les dossiers de solution et tout autre conteneur que vous ne souhaitez pas afficher à l’aide du volet Filtres .

    Filter the containers to simplify the view

  12. Développez les groupes et sélectionnez les éléments dans la carte pour afficher les relations.

    Select items to view the relationships

Voir aussi :

Afficher les dépendances

Supposons que vous deviez réviser du code dans certains fichiers contenant des modifications en attente. Pour visualiser les dépendances dans ces modifications, vous pouvez créer une carte de code à partir de ces fichiers.

Show specific dependencies on a code map

  1. Dans l’Explorateur de solutions, sélectionnez les projets, références d’assembly, dossiers, fichiers, types ou membres que vous souhaitez afficher sur la carte.

    Select the items you want to map

  2. Dans la barre d’outils Explorateur de solutions, choisissez Afficher sur la carte du codeCreate New Graph From Selected Nodes Button. Vous pouvez également ouvrir le menu contextuel d’un ou plusieurs groupe d’éléments, puis choisir Afficher sur la carte de code.

    Vous pouvez également faire glisser des éléments à partir de l’Explorateur de solutions, de l’affichage de classes ou de l’Explorateur d’objets vers une carte de code nouvelle ou existante. Pour inclure la hiérarchie parente de vos éléments, maintenez la touche Ctrl enfoncée tout en faisant glisser des éléments ou utilisez le bouton Inclure les parents dans la barre d’outils de la carte de code pour spécifier l’action par défaut. Vous pouvez également faire glisser des fichiers d’assembly en dehors de Visual Studio, par exemple à partir de l’Explorateur Windows.

    Notes

    Lorsque vous ajoutez des éléments à partir d’un projet partagé par plusieurs applications, comme Windows Phone ou Microsoft Store, ces éléments apparaissent sur la carte avec le projet d’application actif. Si vous modifiez le contexte vers un autre projet d’application et ajoutez des éléments à partir du projet partagé, ces éléments apparaissent alors avec le projet d’application qui vient d’être activé. Les opérations que vous effectuez avec un élément de la carte s’appliquent uniquement aux éléments qui partagent le même contexte.

  3. La carte montre les éléments sélectionnés au sein des assemblys conteneurs.

    Selected items shown as groups on the map

  4. Pour explorer des éléments, développez-les. Déplacez le pointeur de la souris au-dessus d’un élément, puis cliquez sur l’icône en forme de chevron (flèche bas) quand elle apparaît.

    Expand a node in a code map

    Pour développer tous les éléments, sélectionnez-les en appuyant sur Ctrl+A, ouvrez le menu contextuel de la carte, puis choisissez Groupe, >Développer. Toutefois, cette option n’est pas disponible si le développement de tous les groupes crée une carte inutilisable ou entraîne des problèmes de mémoire.

  5. Continuez à développer les éléments qui vous intéressent jusqu’au niveau de la classe et du membre si nécessaire.

    Expand groups to class and member level

    Pour afficher les membres qui figurent dans le code, mais qui n’apparaissent pas sur la carte, cliquez sur l’icône Récupérer à nouveau les enfantsRefetch Children Icon en haut à gauche d’un groupe.

  6. Pour afficher d’autres d’éléments associés à ceux présents sur la carte, sélectionnez un élément et choisissez Afficher les éléments associés dans la barre d’outils de la carte de code, puis sélectionnez le type d’éléments associés à ajouter à la carte. Vous pouvez également sélectionner un ou plusieurs éléments, ouvrir le menu contextuel, puis choisir l’option Afficher pour le type d’éléments associés à ajouter à la carte. Par exemple :

    Pour un assembly, choisissez :

    Option Description
    Afficher les assemblys qui sont référencés par cela Ajoutez les assemblys que cet assembly référence. Les assemblys externes apparaissent dans le groupe Externes .
    Afficher les assemblys qui référencent cela Ajoutez les assemblys de la solution qui référencent cet assembly.

    Pour un espace de noms, choisissez Afficher l’assembly conteneurs’il n’est pas visible.

    Pour une classe ou une interface, choisissez :

    Option Description
    Afficher les types de base Pour une classe, ajoutez la classe de base et les interfaces implémentées.

    Pour une interface, ajoutez des interfaces de base.
    Afficher les types dérivés Pour une classe, ajoutez des classes dérivées.

    Pour une interface, ajoutez les interfaces dérivées et les structures et classes d’implémentation.
    Afficher les types qui sont référencés par cela Ajoutez toutes les classes, avec leurs membres, que cette classe utilise.
    Afficher les types qui référencent cela Ajoutez toutes les classes, avec leurs membres, qui utilisent cette classe.
    Afficher l’espace de noms contenant Ajoutez l’espace de noms parent.
    Afficher l’espace de noms contenant et l’assembly conteneur Ajoutez la hiérarchie de conteneurs parents.
    Afficher tous les types de base Ajoutez la hiérarchie de classe de base ou d’interface de manière récursive.
    Afficher tous les types dérivés Pour une classe, ajoutez toutes les classes dérivées de manière récursive.

    Pour une interface, ajoutez toutes les interfaces dérivées et les structures et classes d’implémentation de manière récursive.

    Pour une méthode, choisissez :

    Option Description
    Afficher les méthodes qui sont appelées par cela Ajoutez les méthodes que cette méthode appelle.
    Afficher les champs qui sont référencés par cela Ajoutez les champs que cette méthode référence.
    Afficher le type conteneur Ajoutez le type de parent.
    Afficher le type conteneur, l’espace de noms contenant et l’assembly conteneur Ajoutez la hiérarchie de conteneurs parents.
    Afficher les méthodes remplacées Pour une méthode qui remplace d’autres méthodes ou implémente la méthode d’une interface, ajoutez toutes les méthodes abstraites ou virtuelles dans les classes de base qui sont substituées et, le cas échéant, la méthode de l’interface implémentée.

    Pour un champ ou une propriété, choisissez :

    Option Description
    Afficher le type conteneur Ajoutez le type de parent.
    Afficher le type conteneur, l’espace de noms contenant et l’assembly conteneur Ajoutez la hiérarchie de conteneurs parents.

    Show methods called by this member

  7. La carte affiche les relations. Dans cet exemple, le mappage affiche les méthodes appelées par la méthode Find et leur emplacement dans la solution ou à l’extérieur.

    Show specific dependencies on a code map

  8. Pour simplifier la carte et cibler des parties individuelles, choisissez Filtres dans la barre d’outils de la carte de code et sélectionnez uniquement les types de nœuds et de liens qui vous intéressent. Par exemple, désactivez l’affichage des dossiers solution, des assemblys et des espaces de noms.

    Use the Filter pane to simplify the display