Modelar o diagramar ¿cuál es la mejor opción?

Los ingenieros trabajamos con modelos, no con diagramas. La aseveración es claramente una exageración, pero lo cierto es que cuando los sistemas de software se vuelven lo suficientemente grandes y complejos, los diagramas disminuyen su utilidad y debemos considerar el trabajo con modelos.

¿Cuál es la diferencia entre un modelo y un diagrama? Me gusta la definición dada por Delligatti [1] en la que se enfatiza que los elementos de un modelo capturan decisiones de diseño (si estas decisiones de diseño están a un nivel de la estructura del sistema, hablaremos de decisiones arquitectónicas del software o sistema). Según el diccionario Cambridge [2] un diagrama es “un plano simple dibujado para representar algo, como una máquina, usualmente para explicar cómo funciona o cómo se ensambla.”

El diagrama emerge como una representación gráfica del modelo (o sus elementos) [3][4]. El modelo incluye decisiones de diseño que definen con mayor o menor precisión al sistema en un espacio análogo a los componentes del sistema de software. La mayor o menor precisión del modelo para definir un sistema de software está dada por diversos factores tales como el nivel de abstracción deseado (según el objetivo que se tenga con el modelo, siendo modelos creados para la generación de código uno de los tipos que menos abstracción permite), el lenguaje utilizado (por ejemplo, UML permite mayor precisión que el lenguaje natural en la mayoría de los casos), entre otros. La diferencia entre diagramas y modelos se observa también en la existencia de software con especialización en el diagramado y software especializado en modelado.

Este artículo no es un llamado a abandonar los diagramas. Por el contrario, es un llamado a hacer uso operacionalmente adecuado de diagramas y modelos: cuando trabajamos con stakeholders para analizar y diseñar un sistema preferiremos el diagramado en pizarra. Luego en forma “offline” procedemos a “almacenar” las decisiones de diseño en un software de modelado. Y este almacenamiento lo haremos por medio del diagramado en el software de modelado. Por ejemplo, si queremos expresar un conjunto de conceptos relacionados que describen el dominio explicado por un stakeholder, preferiremos el diagrama de clases de UML, independiente de si estos conceptos corresponden directamente a clases del software.

La forma descrita de trabajo es frecuentemente usada ya que el software de modelado se experimenta especialmente resistido para el modelado en la práctica de la ingeniería ya que la representación de los modelos o elementos de este por medio de un software de modelado requiere poner atención a asuntos que son ajenos al modelo tales como colores de los elementos del diagrama, nombres de archivos, versionamiento, entre otros.

¿Cuáles son las ventajas de trabajar con un modelo? Una de las principales ventajas de trabajar con modelos es que podemos usar software de modelado (como Visual Paradigm o Enterprise Architect) que facilita mantener la consistencia entre los elementos de un modelo. Aquí volvemos a la discusión inicial: cuando los sistemas de software se vuelven grandes y complejos, pretender mantener manualmente la consistencia entre componentes del sistema se vuelve difícil y propenso a errores. Basta un simple cambio de nombre en alguno de los elementos para ver el beneficio de un modelo en software de modelado: el cambio se replicará en todos los modelos que usen este elemento. También podremos generar diagramas equivalentes en términos de sus pares evitando esfuerzo innecesario.

[1] “SysML Distilled: A Brief Guide to the Systems Modeling Language,” Delligatti, Addison-Wesley, 2014.

[2] “Diagram,” https://dictionary.cambridge.org/es/diccionario/ingles/diagram (rev: 02-05-2022)

[3] “Unified Modeling Language (UML),” version 2.5.1, OMG, 2017.

[4] “OMG Systems Modeling Language (SysML),” versión 1.6, OMG, 2019.

NOTA: Por software de modelado intento hacer referencia al software que incluyendo diagramado permite almacenar modelos, es decir, los diagramas se entienden como una más de las representaciones posibles para un modelo o elementos de este.