Ingenieria de Software: Preguntas particulares...

Iniciado por astinx, 7 Febrero 2012, 05:45 AM

0 Miembros y 1 Visitante están viendo este tema.

astinx

Hola me he topado con algunos ejercicios particulares de casos de uso y diagrama de flujo de datos (DFD) y tengo mis propias interpretaciones sobre los enunciados, generalmente son sencillos, pero algunos me generan dudas y pienso que otra persona pensaría distinto, por lo que quiero comprobar mis suposiciones con quien quiera y ver si nuestros puntos de vista difieren. Por ejemplo:

Casos de uso:

Se desea modelar un sistema que controle una máquina para reciclar latas, botellas y cajas de botellas.
El sistema registra cuántos elementos un usuario coloca en la máquina e imprime un recibo con el valor de dichos elementos junto con el total que se le debe pagar al usuario.
El sistema también es utilizado por un operador que desea conocer el número de elementos de cada tipo que se han introducido durante el día. El operador también debe poder actualizar los valores de los elementos.

Este es sencillo, primero tendríamos a dos actores; el usuario y el operador. Los casos de uso son bastante sencillos, esta el caso en el que un usuario introduce elementos a reciclar (que se puede explotar), el caso en el que se imprime el ticket, y por el lado del operador, tenemos el caso en el que el operador consulta la cantidad de elementos de cada tipo registrados en el día y el caso en el que los actualiza.

Este enunciado aunque muy sencillo me hace pensar; ¿Sería correcto explotar el caso de uso "Reciclar basura" del actor "Usuario" de manera que tengamos el caso de uso "Reciclar basura" y además 3 casos de uso que lo extiendan (<extend>) "Reciclar latas", "Reciclar botellas" y "Reciclar cajas"?. Desde el punto de vista de la definición de las asociaciones y cuando es correcto usarlas y cuando no, esta idea me parece correcta. Sin embargo cuando pienso en los pasos elementales que voy a tener que describir en el escenario, pienso que van a ser muy pocos y los mismos, solo diferente uno de otro, en que uno va a decir "Paso 1. Se valida que la botella ingresada este sana" y en otro "Paso 1. Se valida que la lata ingresada este sana", por decirlo así. ¿Ustedes que piensan?, ¿Sería mejor dejar un solo caso de uso llamado "Reciclar basura" o seria mejor explotarlo, extendiéndolo con otros 3 casos?

Osea, ¿cual de los dos les parece mejor?
A.
 
B.
 

En otro ejemplo

Se desea desarrollar un sistema para utilizar en un consultorio médico. El sistema debe realizar el manejo de pacientes, turnos e historias clínicas.
Los pacientes pueden sacar turno llamando por teléfono o acercándose al consultorio. Para ello el paciente comunica a la secretaria el médico y día que quiere atenderse. La secretaria busca en el sistema los horarios libres para el día y médico indicado y se lo comunica al paciente para que este último decida en qué horario desea asistir a la visita.
En caso de que no exista horario libre el sistema debe notificarlo. Además es importante recalcar que si el paciente no existe en el sistema al momento de solicitar el turno la secretaria debe darlo de alta ingresando sus datos personales (nombre, fecha de nacimiento, domicilio) y obra social.
Cuando el paciente asiste al turno el médico revisa al paciente e ingresa al sistema los síntomas, diagnóstico y tratamiento.
Un paciente puede cancelar un turno de la misma forma que lo solicita (por teléfono o en persona).
Además el médico tiene la posibilidad de obtener un listado de todas las consultas que tuvo un determinado paciente.

En este ejercicio en particular casi todos los casos de uso se me hacen transparentes, sin embargo, creo que hay un actor "trampa", el paciente. Si bien el paciente aparece en el enunciado, el nunca interactúa directamente con el sistema, es la secretaria la que lo hace, por lo que me parece que no debería ir en el diagrama. Otra trampa que me parece que hay es el caso en el que dice "el paciente se puede acercar a solicitar un turno de dos maneras; prensentandose ante la secretaria o llamando por teléfono", yo creo que un alumno con poca experiencia en casos de uso, miraría esto y diría: "claro, como existe la posibilidad de que el paciente reserve un turno de dos maneras, esto significa que tenemos un caso de uso "Reservar turno" y dos casos de uso "Reservar turno por teléfono" y "Reservar turno presentandose" que extienden al primer caso de uso mencionado". A mi esto me parece incorrecto creo que hay un solo caso de uso y la manera de realizarlo seria la siguiente:


Y en un ultimo ejemplo:
Se desea modelar un sistema de pago de cuotas en un gimnasio.
Las cuotas se pagan mensualmente y sus montos varían según la disciplina (aparatos, bicicleta y gimnasia aeróbica) y la cantidad de veces por semana que va a asistir (1 a 5).
Al ingresar un nuevo cliente al gimnasio debe abonar una matrícula que también depende de la disciplina y la cantidad de veces que desea asistir. Un cliente puede ser dado de baja del sistema.
Se sistema debe permitirle al empleado realizar las siguientes operaciones:
Consultar los montos de la matrícula y la cuota para una disciplina.
Registrar el ingreso de un nuevo cliente.
Consultar el "estado de cuenta" de un cliente.
Registrar el pago de cuotas de un cliente.
Eliminar los clientes morosos.
Mensualmente se envía automáticamente un correo a los socios del gimnasio con
novedades.


En este la única interrogante que me puede venir a la mente es; Este ultimo párrafo, yo lo representaría como un caso de uso "Enviar correos" que sea una asociación con el actor "Socio", puesto que una asociación bilateral (es decir, una linea sin flecha), implica que el primer paso elemental en el escenario del caso de uso, sera llevado a cabo por el sistema, y en efecto, el que da el primer paso es el sistema, ¿me equivoco?.

Yo lo haría de la siguiente manera:


Bueno si han llegado hasta aquí, gracias por detenerse a leer!
Cualquier critica es bienvenida, Saludos!
La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando