Tecnología y Synergix

Casos de Uso Avanzados: Relación de Inclusión

Posteado por: Iván Garcerant en: 7-06-08

El modelado de casos de uso persigue capturar la funcionalidad del sistema visto desde el punto de vista de sus operadores -actores- por lo que es fundamentalmente una construcción de elementos de modelado comprensibles por los clientes -stakeholders- y no solo por los analistas.

Sin embargo, en ocasiones es conveniente introducir algunos pocos elementos que no sean directamente los conceptos que manejan los clientes. Por ejemplo, en aras de evitar la redundancia, es posible pensar en extraer algunos fragmentos que nos permita indicar en uno o más casos de uso este fragmento repetido, por referencia en lugar de repetirlo en cada caso.

A este proceso de extracción del fragmento repetido lo modelamos por medio de la relación de inclusión <<include>>, tal como se ve en el siguiente diagrama:

Fig. 1 - Relación de inclusión entre casos de uso

En la figura, el caso de uso “A” es un fragmento, que define un trozo de un flujo de eventos que es referido por el caso de uso “B”. En este tipo de relación, el caso incluido (el “A”) debe ser un fragmento, nunca un caso concreto, en tanto que el caso que incluye (el “B” del ejemplo) si ha de ser un caso de uso completo.

A diferencia de la relación de extensión, aquí ninguno de los casos de uso involucrados puede ser entendidos por completo como piezas aisladas. Por un lado, el caso incluido es solo un fragmento, por lo que no es posible considerarlo un caso de uso pleno; en tanto que el caso que incluye al hacer referencia a un fragmento externo tiene necesariamente que ser entendido en presencia del fragmento.

Formalmente, como para el glosario:

Relación de Inclusión <<include>> Un caso de uso concreto incluye a un fragmento de caso de uso, cuando como parte de su descripción breve o su flujo de eventos, se hace referencia al texto del fragmento; de forma tal que lo dicho en el fragmento pasa a ser parte de la especificación del caso de uso.

Para lograr que se entienda el concepto, nada mejor que un ejemplo. Supongamos que estamos hablando de un sistema de gestión de agenda de un empresas con gerentes y asistentes. En este sistema hemos identificado dos casos de uso:

Código: UC-0100.
Nombre: Acepta cita.
Actor: Gerente.
Descripción: El Gerente visualiza su calendario de citas y aprueba aquellas citas que desee aceptar.

Código: UC-0200.
Nombre: Coordina cita.
Actor: Asistente.
Descripción: El asistente busca un momento apropiado para las citas pendientes al visualizar el calendario de citas del Gerente. Indica para cada cita propuesta la descripción, el día y la hora.

Tabla 1 - Casos de uso del sistema

Como se nota, en ambos casos se requiere de visualizar la agenda. Es posible imaginar que esta función abarca no solo la visualización del calendario, sino también ciertas funciones de búsqueda y filtrado por criterios. Para especificar esta funcionalidad pero evitar hacerlo en cada uno de los flujos de eventos de los casos de uso ya definidos, se opta por crear un fragmento que contenta esos detalles e incluirlo en los casos de uso originales. La situación da lugar al siguiente diagrama:

Fig. 2 - Modelo de casos de uso con un
ejemplo de relación de inclusión

De esta forma, evitamos tener que definir en múltiples lugares una misma funcionalidad. Sin embargo, el fragmento que se incluye ha de ser visto siempre como lo que es: un fragmento sin significado completo. En verdad es una lastima que de momento no tengamos una forma de marcar a los fragmentos de manera que se diferencien a simple vista de los casos de uso. Sugiero que al menos, en tanto surge un estereotipo estándar para esta tarea, tengamos una serie de numeración particular para los fragmentos. O bien, tomar la iniciativa y definir un estereotipo de UML por nosotros mismos.

Naturalmente que a la hora de hacer la especificación detallada de los casos de uso, en particular en los flujos de eventos, debemos marcar muy claramente en que lugar se ha de realizar la inclusión de lo dicho en el fragmento.

La relación de inclusión es claramente diferente a la relación de extensión y espero que haya quedado claro. La inclusión es una relación entre un caso de uso concreto y un fragmento, en tanto que la extensión involucra casos de uso concretos.

Por otra parte, a diferencia de la relación de extensión, la inclusión en cierta forma modifica al caso que incluye, por cuanto el fragmento define una parte de la funcionalidad del caso de uso completo. Esto significa que el caso de uso que incluye no puede ser entendido por completo en ausencia del fragmento que se incluye; algo muy diferente a la situación en una relación de extensión.

9 comentarios para "Casos de Uso Avanzados: Relación de Inclusión"

[...] deben ser claros antes que cualquier otra cosa, lo que lleva a evitar el uso de las relaciones de inclusión y extensión, entre otras [...]

[...] puede decir sobre los casos de uso: características avanzadas como la relación de extensión y la relación de inclusión; pero en casi todos los casos priva que mientras más sencillo mantengamos la especificación [...]

[...] tengan la presión de explicar métodos y técnicas avanzadas, como las relaciones de extensión e inclusión de casos de uso, forzando al estudiante a adoptar estar técnicas en forma demasiado temprana. Esto [...]

Felicidades por este artículo y por los demás que tratan esta temática de los casos de uso. Están muy bien explicados y son fáciles de entender. Acabo de llegar a este blog desde la Wikipedia, y voy a agregar su rss a mi netvibes ahora mismo. Un cordial saludo!

Saludos, te felicito por el contenido del blog, es de gran ayuda. Ademas, quisiera recomendar el cambio del color de la fuente del texto, me ocurre que después de un rato es algo incomodo leer.

La explicación de la relación inclusión es muy clara, según el libro de UML y Patrones lo importante cuando se modela casos de uso son los flujos de eventos mas que desgastarse en construir un gráfico de casos de uso y relaciones, en la práctica puede es conveniente adoptar esta metodología ???, y para terminar: cuando se construye un diagrama de casos de uso, se recomienda, cuando se intenta modelar las relaciones, comenzar con las de inclusión y extensión y por último las de asociación, con este proceso logramos una mejor especificación ???, de antemano mil gracias por tus explicaciones y estaré pendiente a tus artículos, °-)

Saludos Alvaro.

Efectivamente, la parte realmente importante de un caso de uso es su descripción breve y su flujo de eventos. Contar con un buen diagrama es un recurso agradable pero jamás será la parte primordial de un caso de uso bien construido.

Por lo mismo, al modelar requisitos con casos de uso, se debe comenzar por identificar a los actores, planteando para cada uno de ellos la pregunta “¿qué debe hacer el sistema para atender las necesidades de este actor?”. A cada una de las posibles respuestas las llamaremos caso de uso.

En este punto, tendríamos un grupo de actores y algunos casos de uso para cada uno de estos. Es decir entonces, que tendríamos el modelo de caso de uso a medio hacer y no tendríamos ni una sola relación de inclusión ni de extensión.

¿Cuando tienen sentido las relaciones de inclusión y extensión? Es la siguiente pregunta lógica.

Mi respuesta a esta pregunta es muy simple: solo cuando la situación real lo exija. No es posible prever una regla universal sobre la aplicación de estas relaciones, salvo reconocer que suelen ser sobre utilizadas por los analistas novatos y algunos profesores desorientados.

Para que tengas alguna guía, te digo que el modelo de casos de uso jamás es su diagrama. Siempre lo más importante son las descripciones breves y flujos de eventos de cada uno, quedando los diagramas como una forma agradable de estructurar el conjunto. Por lo tanto, no intentes expresar tus ideas por medio de relaciones de inclusión o extensión, hasta en tanto no hayas agotado las posibilidades de expresarlas por medio de la descripción breve y el flujo de eventos de tus casos de uso.

Miles de gracias por despejarme mi duda, y ojalá pueda colaborar en este espacio con algunos aportes, saludos !…

Gracias por facilitar la informacion, me ha servido de mucha ayuda a mi proyecto!! Dios les bendiga, Cristo les ama!!!

Escribe un comentario