Posteado por: Iván Garcerant en: 5-06-08
En muchas ocasiones el uso de características avanzadas de los casos de uso generan dudas en los equipos de desarrollo. La razón básica es que estos modelos 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 características.
Sin embargo, por muy de acuerdo que podamos estar con el deseo de claridad y sencillez, existen situaciones en que hacer uso de una relación avanzada entre casos de uso mejora en lugar de reducir, la claridad del modelo de requisitos. De ahí por tanto que todo analista de requisitos debe comprender perfectamente el significado de estas relaciones. En el presente post abordamos la relación de extensión <<extend>>.
Técnicamente como para el glosario, la relación de extensión <<extend>> se define como:
Relación <<extend>> Un caso de uso extiende a otro cuando sin alterar a este, se incorpora su funcionalidad como parte integral del primero. Se denota con una relación que apunta del caso extendido al caso base y la conexión se hace o bien al principio del flujo de eventos principal del caso base o en alguno de los puntos de extensión que este haya definido.
La notación gráfica es la siguiente:
Fig. 1 - Relación de extensión <<extend>>
La relación del ejemplo significa que un caso de uso ya existente (el caso “A”) se aprovecha en la definición de un segundo caso (el caso “B”). Dado que la reutilización que requerimos agrega funcionalidad pero no altera al caso base, se ha optado por la relación de extensión. Dicha relación se ha denotado gráficamente con una flecha de dependencia desde el caso extendido (el caso “B”) al caso base (el caso “A”). La dependencia la hemos estereotipado con <<extend>> para que quede claro lo que pretendemos decir.
A nivel de los flujos de eventos, se podría decir que el flujo principal del caso base no se ve alterado, pero que en cambio, el flujo de eventos del caso extendido hace referencia al primero, de manera tal que no puede ser entendido en ausencia de los pasos del caso base.
A fin de contar con un ejemplo completo, consideremos un sistema de compras electrónico. Digamos que este sistema va a atender tanto a clientes finales como a clientes corporativos, permitiendo que adquieran productos en nuestra tienda en línea. La diferencia será que los clientes corporativos hacen compras masivas, quizás programando la entrega a lo largo de un periodo de tiempo de lo que compraron. Esta visión la podemos expresar en el siguiente diagrama:
Fig. 2 – Ejemplo de relación <<extend>> en un sistema
de tienda electrónica en Internet
Ahora si vamos al caso de uso base “Compra artículo (UC-0100)” podríamos tener la funcionalidad de escoger el artículo a comprar y el de pagar con tarjeta de crédito, por ejemplo. Esta funcionalidad esta disponible a los clientes finales, tal como se ve en el diagrama.
Por su parte, los clientes corporativos pueden escoger el artículo a comprar y el modo de pago: digamos tarjetas de crédito. Además el caso de uso captura también la funcionalidad de programar la entrega parcial de lo comprado a lo largo de un periodo de tiempo. Dado que gran parte del caso de uso “Compra masiva (UC-0200)” es idéntica a la encontrada en el caso del cliente final, optamos por reutilizar la especificación por vía de la relación de extensión.
Los criterios a aplicar para saber si la relación de extensión es aplicable son los siguientes:
La relación de extensión guarda relación con todos los restantes tipos de reutilización que están definidas para los casos de uso; en particular la relación es muy intima con la relación de inclusión <<include>> sin embargo la diferencia primordial entre <<extend>> e <<include>> es la modificación del caso base. Extensión no implica cambio, en tanto que la inclusión añade funcionalidad al caso base.
Otra relación, la herencia, es similar también a la extensión. En este caso la diferencia es que la herencia cambia o puede cambiar, la naturaleza de lo dicho en el caso base. Por ejemplo, podemos decir que aquello que fue llamado “artículo” en el caso base es ahora referido más detalladamente como “libro” o “juguete”. La herencia de casos de uso reutiliza al caso base sí, pero nos permite alterar la semántica de los detalles; algo que la relación de extensión (ni la de inclusión) pueden hacer.
Por tanto concluyamos: la relación de extensión permite reutilizar una especificación pero sin modificar al caso base.
[...] diferencia de la relación de extensión[3], aquí ninguno de los casos de uso involucrados puede ser entendidos por completo como piezas [...]
[...] es todo. Mucho más se 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 [...]
Realizando cierto analisis con “casos de uso” se me presentó la siguiente consideración de la cual me gustaría conocer vuestra opinión.
Supongamos que multiples analistas realizan en sus procesos particulares “casos de uso” de generacion de datos para estadistica. Cada uno debe proceder a “describir” su logica particular para obtener sus datos, asi como que datos son relevantes para su proceso. Sin embargo, otro analista debe llevar adelante un proceso central para “consultar” toda estadistica del sistema. Entonces, dada su experiencia como desarrollador de software, decide que sus compañeros deberan “implementar” la interfaz “consultable” a todos sus casos de uso. Pero “implementar” no es algo que pertenesca estrictamente a los elementos de Casos de uso, mas bien a “diagrama de clases”. ¿Como podria plasmarse que estos Casos de Uso “implementan” la interfaz requerida?
Recordando que la interfaz consultable, solo define ciertas “funcionalidades” que deben tener los Casos de uso, pero nunca el “como” lo haran.
[...] profesores 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 [...]
Consulta, un caso de uso puede tener multiples escenarios y podria decir que “un escenario es a un caso de uso, como un objeto es a una clase” considerando lo expuesto podria decir que ¿Un escenario que no es el principal es una extensión del caso de uso?
de antemano muchas gracias.
Muchas gracias por tu explicación sobre la relación de extensión, es muy clara, mi duda es la siguiente, estoy diseñando un sistema en donde el usuario tiene que logearse para poder utilizar los servicios de un sistema, es conveniente modelar un caso de uso etiquetado como presentar opciones del sistema CU-2 y otro autenticar usuario CU-1 y una relación de inclusión de CU-2 a CU-1 ??? y finalmente, si en una interfaz gráfica existen por ejemplo las opciones de crear usuario, modificar usuario, cada una de ellas serían casos de uso que extienden la funcionalidad de la GUI que las contiene ???, de antemano, mil gracias por la respuesta a mis dudas !…
Muy buen artículo, simple y concreto que es lo necesario para comprender metodologías que en muchas ocaciones terminan siendo expuestas o muy vagamente o de manera confusa.
Lo único que me cabe acotar es que no explicas la diferencia entre extender y generalizar un caso de uso, cosa que suele generar dudas al momento de decidir.
Cordial saludo, soy nuevo en este blog, y me ha parecido muy didáctico, me gustaría ver mas ejempos para concretar los conceptos, deseables en la parte comercial.
Gracias
Hola, muchas gracias por el esfuerzo.
No veo claro la relación de extensión dibujada como está. Yo creo que la flecha debe apuntar al revés. Según lo expresado el CU Compra Articulo es una funcionalidad que extiende la funcionalidad definida en el CU Compra Masiva.
El cliente corporativo podrá utilizar ambas opciones, podemos pensar que su opción principal es la Compra Masiva pero que opcionalmente puede utilizar la Compra de Artículos.
Para mí, como he dicho, el CU Compra Artículo extiende al CU Compra Masiva.
Espero vuestros comentarios.
Muchas gracias.
15-07-08 a 6:05 am
Jo, habeis explicado una cosa sencilla de una forma sencilla y entretenida. Es la explicación más clara que he leido hasta ahora (la gran mayoría, aburridas y confusas)