Un mapa de software representa información estática, dinámica y evolutiva de los sistemas de software y sus procesos de desarrollo de software mediante visualización de información orientada a mapas 2D o 3D . Constituye un concepto y una herramienta fundamental en la visualización de software , el análisis de software y el diagnóstico de software . [1] Sus principales aplicaciones incluyen el análisis de riesgos y el monitoreo de la calidad del código , la actividad del equipo o el progreso del desarrollo de software [2] y, en general, la mejora de la efectividad de la ingeniería de software con respecto a todos los artefactos, procesos y partes interesadas relacionados a lo largo del proceso de ingeniería de software y el mantenimiento de software .
Los mapas de software se aplican en el contexto de la ingeniería de software : los proyectos de desarrollo de software complejos y a largo plazo suelen enfrentarse a múltiples dificultades, como la fricción entre completar las características del sistema y, al mismo tiempo, obtener un alto grado de calidad del código y del software para garantizar el mantenimiento del software del sistema en el futuro. En particular, "el mantenimiento de sistemas de software complejos tiende a ser costoso porque los desarrolladores dedican una parte importante de su tiempo a intentar comprender la estructura y el comportamiento del sistema". [3] La idea clave de los mapas de software es hacer frente a ese desafío y a los problemas de optimización proporcionando medios de comunicación eficaces para cerrar la brecha de comunicación entre las distintas partes interesadas y los dominios de información dentro de los proyectos de desarrollo de software y obtener información en el sentido de visualización de la información .
Los mapas de software aprovechan técnicas cartográficas bien definidas utilizando la metáfora del modelo de ciudad virtual en 3D [ 4] para expresar el espacio de información subyacente, complejo y abstracto. La metáfora es necesaria "ya que el software no tiene forma física, no hay una correspondencia natural del software con un espacio bidimensional". [5] Los mapas de software son mapas no espaciales que tienen que convertir los datos de la jerarquía y sus atributos en una representación espacial.
Los mapas de software permiten, en general, una comunicación comprensible y eficaz de los cursos, riesgos y costes de los proyectos de desarrollo de software a las distintas partes interesadas, como la dirección y los equipos de desarrollo. Comunican de un vistazo el estado de las aplicaciones y sistemas que se están desarrollando actualmente o que se están desarrollando más a los líderes del proyecto y a la dirección. "Un aspecto clave para esta toma de decisiones es que los mapas de software proporcionan el contexto estructural necesario para la correcta interpretación de estos indicadores de rendimiento". [6] Como instrumento de comunicación, los mapas de software actúan como espacios de información abiertos y transparentes que permiten equilibrar las prioridades de calidad del código y la creación de nuevas funciones y decidir e implementar las medidas necesarias para mejorar el proceso de desarrollo de software .
Por ejemplo, facilitan las decisiones sobre en qué parte del código un aumento de calidad sería beneficioso tanto para acelerar las actividades de desarrollo actuales como para reducir los riesgos de futuros problemas de mantenimiento.
Gracias a su alto grado de expresividad (por ejemplo, densidad de información) y a su generación instantánea y automatizada, los mapas sirven además para reflejar el estado actual del sistema y de los procesos de desarrollo, colmando una brecha de información esencial entre los equipos de gestión y de desarrollo, mejorando el conocimiento sobre el estado y sirviendo como instrumento de detección temprana de riesgos.
Los mapas de software se basan en información objetiva, determinada por el análisis de código basado en KPI , así como por información importada de sistemas de repositorio de software , información de los códigos fuente o herramientas de desarrollo de software y herramientas de programación . En particular, los mapas de software no están vinculados a un lenguaje de programación , lenguaje de modelado o modelo de proceso de desarrollo de software específicos .
Los mapas de software utilizan la jerarquía de los artefactos de implementación de software, como los archivos de código fuente , como base para construir un mapeo de árbol , es decir, un área rectangular que representa toda la jerarquía, subdividiendo el área en subáreas rectangulares. Un mapa de software, informalmente hablando, se parece a un modelo de ciudad virtual en 3D , en el que los artefactos del sistema de software aparecen como edificios o torres virtuales, rectangulares en 3D, que se colocan de acuerdo con su posición en la jerarquía de implementación de software.
Los mapas de software pueden expresar y combinar información sobre el desarrollo de software, la calidad del software y la dinámica del sistema al mapear esa información en variables visuales [7] de los elementos del mapa de árbol, como el tamaño de la huella, la altura, el color o la textura. Se pueden especificar sistemáticamente, generar automáticamente y organizar por plantillas.
Los mapas de software “combinan información temática sobre los procesos de desarrollo de software (evolución), la calidad, la estructura y la dinámica del software y muestran esa información de manera cartográfica”. [8] Por ejemplo:
Con esta configuración ejemplar, el mapa de software muestra puntos cruciales en el código fuente relacionados con aspectos del proceso de desarrollo de software. Por ejemplo, resulta evidente a simple vista qué se debe cambiar para:
Los mapas de software representan herramientas clave en el ámbito del diagnóstico automatizado de software.
Los mapas de software se pueden utilizar, en particular, como herramienta de análisis y presentación de sistemas de inteligencia empresarial , especializados en el análisis de datos relacionados con el software. Además, los mapas de software "sirven como sistemas de recomendación para la ingeniería de software". [8]
Los mapas de software no están limitados a la información relacionada con el software: también pueden incluir cualquier información jerárquica del sistema, por ejemplo, información de mantenimiento sobre artefactos técnicos complejos.
Los mapas de software se investigan en el campo de la visualización de software . La visualización de mapas de software se basa comúnmente en el mapeo de árboles , "un enfoque de relleno de espacios para la visualización de estructuras de información jerárquicas" [9] u otros enfoques de mapeo de jerarquías.
Para construir mapas de software, se utilizan diferentes enfoques de diseño para generar el mapeo espacial básico de los componentes, como:
La disposición espacial calculada mediante diseños como los definidos por los mapas de árbol depende estrictamente de la jerarquía. Si los mapas de software deben generarse con frecuencia para un sistema en evolución o cambio, la usabilidad de los mapas de software se ve afectada por diseños inestables, es decir, cambios menores en la jerarquía pueden causar cambios significativos en el diseño.
A diferencia de los algoritmos de mapas de árbol de Voronoi regulares, que no proporcionan diseños deterministas, el algoritmo de diseño para mapas de árbol de Voronoi se puede ampliar para proporcionar un alto grado de similitud de diseño para diferentes jerarquías. [10] Existen enfoques similares para el caso basado en mapas de árbol.
Los métodos y técnicas de mapas de software pertenecen a la disciplina científica de visualización de software y visualización de información . Forman un concepto y una técnica clave dentro de los campos del diagnóstico de software . También tienen aplicaciones en minería de software y análisis de software . Los mapas de software han sido ampliamente desarrollados e investigados, por ejemplo, en el Instituto Hasso Plattner para ingeniería de sistemas de TI, en particular para sistemas y aplicaciones de TI complejos y de gran escala.