SOTECHCO BLOG

Arquitectura de Aplicaciones con DSM y Lattix

curva de aprendizaje

¿Por qué es tan difícil hacerle mantenimiento a una aplicación?, ¿Por qué cuesta tanto?, ¿Por qué se demora?

Julio 11 de 2016 por SoTechCo

Hoy en día la documentación que se tiene de los diferentes proyectos de software es poca o irrelevante, los cambios que se deben hacer podrían generar un impacto profundo y deberse al diseño o al poco conocimiento detallado de la aplicación o a que muchas de las personas que se encargaron en su momento de su desarrollo ya no están en la compañía o la mezcla de todas ellas. Estas y muchas otras actividades hacen que soportar un aplicación desarrollada por nosotros mismos u otras personas tome bastante tiempo y por lo tanto su coste sea elevado.

Pero veámoslo desde una perspectiva mucho más amplia y arranquemos desde el inicio, cuando se concibe.

Primero definamos algunos cuestiones relevantes para demostrar nuestra perspectiva.

Un modelo es una abstracción visual de algo que busca objetivos específicos hacia un público especifico. Los ejemplos más claros que podemos dar son: el mapa de la ciudad, el mapa de redes de telefonía, luz o agua de la ciudad, entre muchas otras.

Estos mapas nos permiten abstraer la realidad, ver la realidad directamente no nos deja abstraer su estructura, su detalle ni mucho menos su comportamiento.

Para el caso del software, los modelos son primordialmente necesarios permiten generar abstracciones visuales para entender su construcción. Su idea puede centrarse en la comunicación validando conceptos de los interesados, ayudar a construir una aplicación aun no existente o simplemente documentarla. Una de las soluciones que ha adoptado la industria o parte de ella es visualizar el código directamente y construir mapas mentales, sin embargo esta idea no permite abstraer totalmente la realidad y nos induce a errores debido al poco conocimiento de la generalidad o del detalle, uno de los problemas que se enfrentan es su forma intangible e invisible y compleja.

Aunque se pueden crear varios modelos dependiendo el público al cual se desea llegar es importante conocer las ventajas y desventajas de ello. Cada uno tomara un tiempo de creación, actualización y mantenimiento además de la relevancia que pueda llegar a tener dependiendo su utilidad o necesidad, o de la etapa que se esta ejecutando en el proyecto en ese momento.

De acuerdo a nuestra experiencia y análisis, el software siempre va a necesitar de un modelo con la finalidad de comunicar de manera sencilla su idea, construcción o producto ya existente. El código en si es el modelo generado, sin embargo no permite generar abstracciones de la idea, construcción o entender sus aspectos relevantes por ejemplo para la etapa de mantenimiento.

El modelado del software es altamente relevante ya que permite visualizar su diseño de acuerdo a sus objetivos y uso; el software por su naturaleza es altamente modificable y es construido una sola vez. Debido a sus miles de partes que interactúan entre si es muy complejo y esto último afecta directamente la administración del mismo, de los proyectos y de los equipos y su desarrollo. Por todo ello, es necesario contar con mecanismos de modelado.

En la industria hay un sin fin de herramientas que permiten modelar el software, sin embargo se debe ser cuidadoso al momento de seleccionarlas debido a las múltiples necesidades que se deben solucionar.
 

¿Qué es DSM (Dependency Structure Matrix)?



Es una representación simple y compacta de un sistema o proyecto en forma de matriz. DSM Es una herramienta sencilla para realizar el análisis como la gestión de sistemas complejos. Permite al usuario modelar, visualizar y analizar las dependencias entre las entidades de cualquier sistema y obtener sugerencias para la mejora o la síntesis de un sistema.

Un sistema de este tipo puede ser la arquitectura de un producto o de un proceso de diseño de ingeniería; También, podría ser, la organización de una empresa o de un mercado puede tomar forma de un sistema complejo y, a menudo se necesita una mirada más cercana a su estructura.

DSM o Matriz estructura de dependencias se conoce por varios nombres:

• La matriz de estructura de dependencias
• Matrix de resolución de problemas(PSM)
• Matriz de Diseño de Precedencia

Para nuestro caso la seguiremos llamando "DSM" a modo de facilitar su entendimiento

Por otro lado, como herramienta para análisis de sistemas, DSM ofrece una representación compacta y clara de un sistema complejo y un método de captura para las interacciones / interdependencias / interfaces entre los elementos del sistema (es decir, los subsistemas y módulos).

Como herramienta de gestión, DSM es comúnmente aplicado en gestión de proyectos, proporciona una representación del proyecto permitiendo su retroalimentación, logrando ver las tareas cíclicas de dependencias. Esto es extremadamente importante ya que la mayoría de aplicaciones de ingeniería exhiben una propiedad cíclica. Como tal, esta representación a menudo resulta en un programa de ejecución mejorado y más realista para las actividades de diseño correspondientes. Obtenido de http://www.dsmweb.org
 

¿Para que Usar DSM?
 

Le permite crear un mapa de todos los elementos de un sistema y ver las dependencias entre ellos. Es una matriz cuadrada, donde cada celda representa la dependencia de un subsistema en otro. La identidad diagonal es la dependencia del subsistema en sí mismo. Pueden cambiar la jerarquía de descomposición para examinar diferentes arquitecturas "qué pasaría si". Obtener algoritmos de partición para reordenar los elementos y ayudar a descubrir las capas y los componentes del sistema. Por otro lado descubrir deficiencias en el software que deberían ser atacados con la finalidad de disminuir el número de errores que podrían generarse. Ver fácilmente, ciclos, saltos de capas, estructuras sin capas, elementos aislados o sin uso, etc., o obtener todos los elementos y dependencias en un cambio, conocer su impacto.
 

¿Con que herramientas podemos apoyarnos?



Lattix ha sido pionero en el uso de las dependencias explícitas para la gestión de la arquitectura de los sistemas complejos. La tecnología soporta el ciclo de vida del proceso de desarrollo sin sobrecargar los arquitectos o los desarrolladores, mientras que proporciona visibilidad a todo el equipo de desarrollo. Lattix utiliza DSM (Dependency Structure Matrix) y Diagramas conceptuales de arquitectura (CAD) para la visualización. El enfoque es altamente escalable y se ha utilizado para examinar y visualizar sistemas con millones de elementos.

Lattix permite modelar el software fácilmente, hacerle trazabilidad mientras es desarrollado y siempre contar con un modelo actualizado para las diferentes etapas de desarrollo incluida la etapa de mantenimiento que termina muchas veces convirtiéndose en una etapa muy costosa.

Además permite

• La comunicación entre el equipo de Arquitectos, desarrollo, pruebas y gerencia.
• Como herramienta de apoyo para el desarrollo, ya que deja ver fácilmente el diseño y permite conocer el impacto, dependencias y detalle.

El primer caso usamos Lattix para mejorar el entendimiento del software para cada uno de los interesados y crear ambientes de propuestas de ideas para la solución de problemas del desarrollo en cualquier etapa del proyecto.

Permite crear la comunicación entre los interesados pero su finalidad deberá ir mas allá al procurar facilitarla, ya que podremos crear matrices de alto nivel como de detalle permitiendo adentrarse en el diseño y los problemas inherentes a su desarrollo y proponiendo soluciones de largo plazo.

Permite generar diagramas en el momento mismo del desarrollo, por lo tanto si deseamos mantenerlos como parte de la documentación, posteriormente será muy fácil reemplazarlos, desechar los viejos sin miedo a problemas futuros y así mantener la documentación actualizada.

Permite alinearse con las diferentes metodologías de desarrollo al tener dentro de sus objetivos el transmitir el diseño a los diferentes grupo de trabajo para su desarrollo, y mejor aún permitir la trazabilidad del diseño con respecto al código. Por otro lado, permitir que dos o mas personas se pongan de acuerdo con el diseño o con alternativas propuestas y esperan visualizarlo de forma rápida y grafica.

Una de las principales ventajas de acceder a tecnologías como DSM claves en Lattix es que sirve para los proyectos grandes y pequeños, ya que la documentación no solo se centrara para grandes proyectos sino que además permite de manera rápida y confiable obtener el mapa de diseño y su análisis en un tiempo muy pero muy corto.

Para el segundo caso, La suite Lattix es muy provechosa ya que permite utilizarse como herramienta de soporte de desarrollo, puede partir de un modelo de alto nivel e ir ampliando el detalle hasta el momento de llegar a como estará construido. Imaginemos construir una clase y ver su entramado sus elementos internos, ejemplo los métodos o en bases de datos los elementos de las tablas, vistas y store procedures entre otros.

Se ha dicho que el desarrollo de software es un proceso creativo y por ello su necesidad no debe centrarse en analizar mediante el código su diseño, arquitectura, elementos o dependencias, es necesario contar con herramientas que permitan realizar este proceso muy rápido dando paso y generando tiempo al proceso creativo.

Es necesario destacar que metodologías como DSM y tecnologías como Lattix permiten generar modelos desde el código viendo ese detalle que se requiere, convirtiéndose completamente en el diagrama del código. Para ello hay que mantener sincronizados los diagramas con el código. La claridad de los modelos es fundamental para la mantenibilidad del mismo.

Una de las principales ventajas es referente al uso de las metodologías agiles ya que una de las principales características es estas metodologías es que no necesitan de una documentación detallada debido a que su énfasis esta puesto en el desarrollo cara a cara, además de la dificultad de mantener sincronizados los diseños del software con el código generado. Para Lattix, la ventaja además de ser la tecnología DSM es la velocidad para obtener mapas de las aplicaciones, o lanzar algoritmos que reordenen o reorganicen los elementos para millones de líneas de código proponiendo soluciones a los problemas de diseño que la han ido erosionando debido a la evolución del software y a la falta del sincronismo del código con los modelos.

Para mayor información visita www.sotechco/lattix.html.