Estructuración del Comportamiento del Sistema: Una Guía Práctica sobre las Relaciones de Casos de Uso de UML
Introducción
En la ingeniería de software moderna, los diagramas de casos de uso a menudo se malinterpretan como simples inventarios de características o mapas de ruta de alto nivel del proyecto. En realidad, sirven como andamiaje arquitectónico. Cuando se aplican correctamente, las relaciones de casos de uso no simplemente listan lo que un sistema debe hacer; descomponen activamente comportamientos complejos en módulos manejables, reutilizables y lógicamente coherentes. Esta claridad estructural cierra la brecha entre las expectativas de los interesados y la ejecución del desarrollo, asegurando que la documentación de diseño detallada permanezca mantenible, sin ambigüedades y alineada con el comportamiento real en tiempo de ejecución.
Este estudio de caso explora cómo aprovechar las tres relaciones centrales de casos de uso de UML 2.0—<<include>>, Generalización, y <<extend>>—para arquitectar una plataforma empresarial escalable. A través de ejemplos prácticos, mapeos de documentación textual y directrices comprobadas por la industria, demostraremos cómo estas relaciones transforman documentos de requisitos extensos en planos simplificados y listos para desarrolladores.

Contexto del Estudio de Caso: La Plataforma Horizon
Para fundamentar estos conceptos en la realidad, examinaremos el diseño arquitectónico de la Plataforma Horizon, un sistema de grado empresarial encargado de gestionar cuentas de usuarios, flujos de trabajo de creación de contenido y verificación de identidad externa. A medida que los requisitos crecieron, el equipo de ingeniería enfrentó dos desafíos críticos:
-
Bulto en la documentación: Pasos repetitivos de validación y manejo de errores se copiaron y pegaron en docenas de especificaciones funcionales.
-
Variaciones ambiguas: Los tipos de cuentas especializados y las rutas condicionales de fallo se mezclaron, causando expansión del alcance y una implementación inconsistente.
Al aplicar las relaciones de casos de uso de UML de forma estratégica, el equipo resolvió ambos problemas. Las siguientes secciones detallan cómo se aplicaron, visualizaron y documentaron cada relación.
1. La <<include>> Relación: Impulso de la Reutilización de Comportamientos
Propósito y Mecanismo
La <<include>> relación existe para eliminar la redundancia. Cuando múltiples casos de uso comparten pasos procedimentales idénticos, dichos pasos se extraen en un sub-caso de uso independiente. El caso de uso base incorpora explícitamente este comportamiento compartido, asegurando que los pasos incluidos siempre se ejecuten como parte del flujo principal.
Crucialmente, el caso de uso incluido no requiere una asociación directa con un actor. Hereda automáticamente la conexión contextual desde el caso de uso base que lo invoque, manteniendo el diagrama limpio y centrado en los objetivos empresariales en lugar de los detalles de implementación.
Visualización con PlantUML
En PlantUML, una flecha de dependencia punteada apunta desde el caso de uso base hasta el caso de uso incluido.

@startuml
skinparam theme plain
skinparam packageStyle rectangle
actor Administrador como admin
actor :Base de datos de credenciales del autor: como db
rectángulo "Sistema de gestión de contenidos (CMS)" {
' Ejemplo de incluir
usecase "Crear una nueva cuenta de blog" como UC_Blog
usecase "Crear una nueva wiki personal" como UC_Wiki
usecase "Verificar identidad" como UC_Check
UC_Blog ..> UC_Check : <<incluir>>
UC_Wiki ..> UC_Check : <<incluir>>
' Ejemplo de extender
usecase "Registrar un fallo de aplicación" como UC_Fall
UC_Fall ..> UC_Blog : <<extender>>
UC_Fall ..> UC_Wiki : <<extender>>
}
admin --> UC_Blog
admin --> UC_Wiki
UC_Check --> db
@enduml
Mapeo de documentación textual
En lugar de reescribir los pasos de validación de identidad en múltiples especificaciones, el equipo adoptó una sintaxis de inclusión estandarizada en el flujo principal de éxito:
| Campo de caso de uso | Valor / Pasos del flujo |
|---|---|
| Nombre del caso de uso | Crear una nueva cuenta de blog |
| Flujo principal de éxito | 1. El administrador selecciona el tipo de cuenta.
2. El administrador ingresa los detalles del autor. 3. incluir::Verificar identidadpara verificar al autor. 4. El sistema crea la nueva cuenta de blog. |
2. Generalización de casos de uso (herencia): gestión de variaciones especializadas
Propósito y mecanismo
La generalización se aplica cuando un caso de uso base define un flujo de trabajo principal que se aplica a múltiples contextos especializados, cada uno de los cuales requiere solo pequeñas desviaciones. Un caso de uso hijo hereda todoslos comportamientos, objetivos y relaciones de su padre. Solo los pasos únicos o sobrescritos necesitan documentarse en el hijo.
La regla del «todo o nada»:La herencia en casos de uso es estricta. Cada paso definido en el padre debe ejecutarse lógicamente en el hijo. Si un escenario especializado requiere omitir o alterar fundamentalmente un paso del padre, la generalización es la herramienta incorrecta.
Visualización en PlantUML
La generalización utiliza una línea sólida con una punta de flecha hueca, apuntando desde el hijo hasta el padre.

@startuml
skinparam theme plain
skinparam packageStyle rectangle
actor Administrador como admin
rectángulo "Gestión de Cuentas" {
usecase "Crear una nueva Cuenta de Blog" como UC_Padre
usecase "Crear una nueva Cuenta Regular" como UC_Regular
usecase "Crear una nueva Cuenta de Blog Editorial" como UC_Editorial
' Flechas de generalización apuntando al Padre
UC_Padre <|-- UC_Regular
UC_Padre <|-- UC_Editorial
}
admin --> UC_Padre
@enduml
3. El <<extend>> Relación: Captura de Flujos Condicionales y Opcionales
Propósito y Mecanismo
A diferencia de <<include>>, que representa una reutilización obligatoria, <<extend>> modela comportamiento opcional o condicional que solo se activa bajo circunstancias específicas en tiempo de ejecución. El caso de uso base sigue siendo completamente funcional por sí solo; el caso de uso extendido actúa como un “gancho” en tiempo de ejecución que inyecta pasos adicionales cuando se cumplen condiciones predefinidas.
Arquitectónicamente, esto separa las rutas principales de éxito del manejo de excepciones, el enrutamiento alternativo o las características opcionales, evitando flujos principales demasiado cargados.
Asignación con Documentación Textual
Las extensiones suelen asignarse directamente a partir de los flujos alternativos o de excepción en la especificación textual:
| Campo de Caso de Uso | Valor / Pasos del Flujo |
|---|---|
| Nombre del Caso de Uso | Crear una nueva Cuenta de Blog |
| Condición de Finalización Fallida | La solicitud para una nueva cuenta de blog es rechazada. |
| Sección de Extensiones | Paso 3.1: La Base de Datos de Credenciales del Autor no verifica los detalles.
Paso 3.2: extendido por::Registrar Fallo en la Solicitud. |
4. Directrices arquitectónicas y mejores prácticas
Aplicar con éxito estas relaciones requiere disciplina. Las siguientes directrices surgieron de una refinación iterativa durante el despliegue de la plataforma Horizon:
-
Evite el sobre-modelado («sopa de flechas»):Las relaciones de casos de uso están diseñadas para combatir la redundancia en la documentación, no para microgestionar las interacciones de la interfaz de usuario. Si un paso no representa una submeta independiente con criterios de aprobación o rechazo claros, manténgalo como texto inline. Hacer clic en un botón o navegar por un menú rara vez justifica un caso de uso dedicado.
-
La «trampa del programador» con
<<extender>>:Los desarrolladores con formación en programación orientada a objetos a menudo confunden erróneamente<<extender>>con la herencia de clases.No es así.La herencia de casos de uso se gestiona exclusivamente mediante la relación de generalización. Trate<<extender>>estrictamente como un complemento opcional en tiempo de ejecución o un gancho condicional. -
Verifique cuidadosamente las dependencias de generalización:Antes de dibujar una flecha de generalización, verifique rigurosamente que el caso de uso hijo realmente requieracada paso individualdel padre. Si un caso de uso hijo necesita omitir, saltar o alterar fundamentalmente los pasos del padre, reemplace la generalización por
<<incluir>>o<<extender>>. -
Aislar actores externos en módulos reutilizables:Cuando extraiga una rutina compartida en un caso de uso incluido (por ejemplo,
Verificar identidad), migre la conexión con el subsistema de apoyo externo (por ejemplo,Base de datos de credenciales del autor) directamente a ese sub-caso de uso. Esto aclara instantáneamente los límites de dependencia y mantiene los diagramas de nivel superior enfocados en las interacciones comerciales en lugar de los detalles de infraestructura.
Conclusión
Las relaciones de casos de uso de UML son mucho más que convenciones de diagramación; sondecisiones de diseño estructuralque impactan directamente la mantenibilidad del sistema, la claridad de la documentación y la velocidad de desarrollo. Al aplicar estratégicamente<<include>>para el reuso obligatorio, Generalización para variaciones especializadas, y<<extend>>para flujos condicionales, los arquitectos pueden transformar conjuntos de requisitos extensos en planos modulares y lógicamente sólidos.
El verdadero valor de estas relaciones reside en su consistencia entre diagramas visuales y especificaciones textuales. Cuando los diagramas y las narrativas funcionales están alineados, los equipos eliminan la ambigüedad, reducen la documentación redundante y establecen una única fuente de verdad que crece junto con el sistema. A medida que las plataformas aumentan en complejidad, dominar estas relaciones sigue siendo una de las formas más efectivas de garantizar que la intención arquitectónica se traduzca sin problemas en software funcional.














