La granularidad indica el tamaño o nivel de detalle de un caso de uso. Un caso de uso puede ser demasiado grande, demasiado pequeño o estar en un nivel adecuado para comunicar un objetivo del actor.
Definir bien la granularidad es importante porque afecta el diagrama, la especificación textual, la planificación, las pruebas y la comprensión del alcance. Si los casos de uso son demasiado grandes, mezclan varios objetivos. Si son demasiado pequeños, se convierten en pasos o detalles de interfaz.
El desafío consiste en encontrar unidades de comportamiento que tengan sentido para el actor y que entreguen un resultado reconocible.
La granularidad responde a la pregunta: ¿qué tan grande debe ser este caso de uso? No existe una medida exacta, pero sí criterios prácticos.
Un caso de uso adecuado suele representar un objetivo completo del actor. Tiene inicio, desarrollo y resultado. Puede describirse con un nombre claro, como Solicitar turno, Cancelar turno o Consultar agenda diaria.
Un modelo claro evita los extremos. Un caso de uso demasiado grande, como Gestionar turnos, puede ocultar varios objetivos. Un caso demasiado pequeño, como Seleccionar fecha, puede ser solo un paso. Un caso adecuado, como Solicitar turno, representa una interacción completa y útil.
Un caso de uso es demasiado grande cuando reúne varios objetivos que podrían existir por separado. Suele tener nombres amplios como Gestionar, Administrar, Procesar o Manejar.
Ejemplos de casos demasiado grandes:
Estos nombres pueden ser útiles como agrupaciones o módulos, pero muchas veces no son buenos casos de uso individuales.
Conviene dividir un caso de uso cuando:
El caso Gestionar turnos puede dividirse en varios casos más claros:
Cada uno representa un objetivo más específico, con actor, flujo y resultado propios.
Un caso de uso es demasiado pequeño cuando describe una acción mínima que no entrega valor propio al actor. Muchas veces son pasos del flujo, validaciones, campos o acciones de interfaz.
Ejemplos:
Estas acciones pueden ser importantes, pero normalmente pertenecen al flujo de un caso mayor.
Conviene unir casos de uso cuando:
Los supuestos casos Seleccionar especialidad, Seleccionar fecha, Seleccionar horario y Confirmar solicitud pueden formar parte de un único caso de uso llamado Solicitar turno.
Separarlos como casos independientes haría que el modelo describa pasos de interfaz en lugar de objetivos del actor.
El criterio más importante es el objetivo del actor. Si el nombre del caso de uso expresa algo que el actor reconocería como una meta completa, probablemente la granularidad sea adecuada.
Un paciente reconoce Solicitar turno como objetivo. Difícilmente reconozca Validar campo fecha como un objetivo por sí mismo.
Un caso de uso debe entregar algún valor observable. Ese valor puede ser una reserva creada, un reporte generado, un pago registrado, una solicitud enviada o información consultada.
Si al finalizar el supuesto caso no queda un resultado claro, puede ser una señal de que es demasiado pequeño o de que está mal definido.
Un buen caso de uso suele poder probarse como una unidad funcional. Esto no significa que sea una única prueba, sino que puede verificarse si el objetivo se cumple.
Si el caso es tan pequeño que solo prueba un campo aislado, quizá pertenece a una validación. Si es tan grande que requiere probar medio sistema, quizá debe dividirse.
La granularidad también afecta la planificación. Casos de uso adecuados permiten priorizar y entregar funcionalidades con valor. Si los casos son demasiado grandes, cuesta estimar. Si son demasiado pequeños, la planificación se llena de detalles de bajo nivel.
Por ejemplo, Solicitar turno puede ser una unidad razonable para análisis y planificación. Gestionar clínica es demasiado amplio; Seleccionar fecha es demasiado pequeño.
Algunas partes de un caso de uso pueden separarse como subflujos dentro de la especificación textual sin convertirse en casos de uso independientes.
Por ejemplo, "buscar disponibilidad" puede ser un subflujo dentro de Solicitar turno si solo tiene sentido allí. En cambio, si esa búsqueda se reutiliza en varios casos y tiene entidad propia, podría analizarse como caso incluido mediante <<include>>.
La siguiente tabla muestra posibles ajustes de granularidad:
| Candidato inicial | Problema | Ajuste recomendado |
|---|---|---|
| Gestionar turnos | Demasiado amplio. | Dividir en Solicitar turno, Cancelar turno, Modificar turno y Consultar turnos. |
| Seleccionar horario | Demasiado pequeño. | Incluir como paso dentro de Solicitar turno. |
| Solicitar turno | Nivel adecuado. | Mantener como caso de uso principal. |
| Validar disponibilidad | Puede depender del uso. | Usar como subflujo o caso incluido si se reutiliza y es obligatorio. |
Para decidir si dividir, unir o mantener, conviene preguntar:
Al trabajar con granularidad, suelen aparecer estos errores:
Antes de cerrar una lista de casos de uso, conviene revisar:
Definir la granularidad correcta es una de las habilidades más importantes al trabajar con casos de uso. No se trata de hacer más o menos documentos, sino de representar objetivos en unidades claras y útiles.
Cuando los casos de uso tienen el tamaño adecuado, el modelo se entiende mejor, se valida con más facilidad y se convierte en una mejor base para desarrollo y pruebas. En el próximo tema estudiaremos paquetes y organización de casos de uso en sistemas grandes.