# Cartographie logicielle

La cartographie logicielle est la représentation d'une information statique ou dynamique d'un programme informatique et de ses processus à l'aide d'une carte en 2D ou 3D. Elle constitue un concept fondamental et un outil de visualisation et d'analyse logicielle.
Les objectifs de la cartographie logicielle sont :
* l'analyse de la qualité du code source ;
* l'évaluation de l'activité de l'équipe et de la progression du développement du logiciel ;
* l'amélioration de l'efficacité de l'ingénierie logicielle dans le respect des processus de développement et de maintenance logicielle.

## Motivation et concept

La cartographie logicielle est appliquée dans le contexte de l'ingénierie logicielle.
Les projets de développement de logiciel doivent faire face à de nombreuses difficultés, comme la problématique entre développer les fonctionnalités du système et en même temps, obtenir une bonne qualité du code source et du logiciel afin de permettre une meilleure maintenance future. En effet « la maintenance des systèmes logiciels complexes tend à être coûteuse car les développeurs passent une importante partie de leur temps à essayer de comprendre la structure et le comportement du système. »
L'idée principale de la cartographie logicielle est de pallier ce problème en apportant une meilleure vision sur le logiciel, fournissant ainsi un meilleur moyen de communication. Les cartes logicielles profitent de techniques de représentation cartographique sous forme de modèle urbain 3D afin de représenter des systèmes complexes. Les logiciels n'ayant pas de forme physique, ils n'ont pas de représentation naturelle sous forme d'espace bidimensionnel, la représentation métaphorique est nécessaire. Les cartes logicielles convertissent la hiérarchie des données et ses attributs en représentation spatiale.

## Applications

Les cartes logicielles permettent de mieux comprendre et appréhender les risques et les coûts de développement d'un projet, en prenant en compte toutes les parties prenantes telles que le management et les équipes de développement. Elles renseignent sur le statut des applications et systèmes en cours de développement ou déjà développés.
Elles facilitent la prise de décisions en ciblant les parties du code source susceptibles d'être améliorées en augmentant ainsi la rapidité de développement et en prévenant des risques de problèmes de maintenance future.
Grâce à leur grand pouvoir expressif tant sur la quantité d'informations représentées que sur la clarté des représentations, les cartes logicielles permettent une meilleure communication entre les équipes de développement et de management.

## Contenu d'une carte logicielle

La cartographie logicielle est basée sur des informations objectives aussi bien définies par une analyse dirigée par les indicateurs clés de performance ou importées d'un dépôt, du code source ou d'un outil de programmation et de développement.
Il est à noter que la cartographie logicielle n'est pas dépendante d'un langage de programmation ou de modélisation.

## Exemple de représentation des informations logicielles

La cartographie logicielle combine des informations thématiques sur le processus de développement, la qualité, la structure du logiciel et les représente sous la forme d'un plan hippodamien.
Par exemple :
* la hauteur d'un bâtiment virtuel peut être proportionnel à la complexité du code source (résultat d'une ou plusieurs métrique) ;
* la surface au sol d'un bâtiment peut être proportionnel au nombre de lignes de code (commentées ou non) dans le module ;
* la couleur peut informer sur le statut courant de développement, c'est-à-dire combien de développeurs sont en train de changer le code source.
Avec cet exemple de configuration, la cartographie logicielle montre les points cruciaux du code source en relation avec l'état du processus de développement.
Il devient donc plus évident de savoir ce qu'il faut changer pour :
* implémenter des changements rapidement ;
* évaluer efficacement l'impact du changement à un endroit donné sur une autre fonctionnalité ;
* réduire l'enchevêtrement qui mène à des processus non contrôlés dans l'application ;
* trouver des erreurs plus rapidement ;
* détecter et éliminer des mauvaises pratiques de programmation.
Voici une liste non exhaustive d'outils de projet open source de cartographie logicielle :
* Evospaces ;
* CodeCity ;
* Sourcecraft ;
* CodeMetropolis.
Sourcecraft et CodeMetropolis ont la particularité d'utiliser le moteur graphique du jeu vidéo Minecraft.
La société Software diagnostics propose également son propre outil de cartographie logicielle.

## La cartographie logicielle pour l'informatique décisionnelle

La cartographie logicielle peut être utilisée en particulier comme un outil d'analyse et de présentation des systèmes décisionnels spécialisés dans les données logicielles. De plus, la cartographie logicielle est utilisée pour les systèmes de recommandation de l'ingénierie logicielle.
La cartographie logicielle n'est pas limitée aux informations logicielles, elle peut aussi bien inclure tout système d'information hiérarchique comme celles de maintenance sur des artefacts techniques complexes par exemple.

## Histoire

Les méthodes et techniques de cartographie logicielle appartiennent au domaine scientifique de la visualisation logicielle et de la visualisation de l'information. Ils forment un concept clé et technique dans les domaines du diagnostic logiciel. Ils ont aussi des applications dans les logiciels d'exploration de données et d'analyse.
Les cartes logicielles ont été largement développées et étudiées entre autres par l'Institut Hasso-Plattner pour l'ingénierie des systèmes informatiques.