examen junio del 99
Transcripción
examen junio del 99
EXAMEN DE METODOLOGÍA Y TECNOLOGÍA DE LA PROGRAMACIÓN EUI-FI-UPV JUNIO DE 1999 Solución 1. (0.5) Siguiendo el ciclo de vida clásico real especifique qué documentación genera cada fase como entrada para la siguiente cuando se sigue el enfoque Estructurado. Resumen: Análisis(DFD, DD, Especif. Procesos), Diseño (DE, Especif. Módulos), Codificación(Código Fuente), Pruebas e Integración (Casos de Prueba). Consultar tema de Análisis de clase de teoría. 2. (0.5) De entre las siguientes ramas aferentes indique cuál es la más adecuada y justifique la respuesta brevemente: AF AF Ciudad Existente Ciudad Existente Obtener Ciudad Existente Obtener Ciudad Existente nº error nº error Ciudad Existe Es Alfanumérica Ciudad Ciudad Ciudad Ciudad Obtener Cadena Válida Comprobar Ciudad Existe Ciudad Válida Error Obtener Cadena nº error Validar Cadena Alfanumérica Error Comprobar Ciudad Existe Registro Ciudad Es Alfanumérica Cadena Registro Ciudad Ciudad error Error Obtener Cadena Ciudad error Cadena Validar Cadena Alfanumérica Leer de Archivo de CIUDADES Leer de Archivo de CIUDADES Es más adecuada la de la izquierda pues se edita por niveles con las ventajas de reusabilidad, más fácil de mantener y de probar. 3. (1) Dado el proceso “Calcular Retenciones IRPF” se deriva el módulo correspondiente (ver figura). A partir de la explosión de dicho proceso factorice el módulo dado considenando el diccionario de datos anexo. Íntegro Sueldo Íntegro IRPF NIF empleado NIF empleado P9 Calcular Retenciones IRPF IRPF Seguridad Social Calcular Retenciones IRPF Seguridad Social D1 DATOS NÓMINAS P9.1 Obtener Datos Nómina NIF empleado P9.2 Horas Trabajadas Calcular Sueldo Íntegro Sueldo Íntegro Categoría D2 Seguridad Social Sueldo Íntegro CATEGORÍAS LABORALES Categoría P9.3 Calcular Retención IRPF IRPF Diccionario de datos: DATOS NÓMINAS = {@NIF Empleado + Horas Trabajadas + Categoría + Seguridad Social} CATEGORÍAS LABORALES = {@Categoría + Sueldo Base + Tipo IRPF} Descripción de procesos: Obtener Datos Nómina: A partir del NIF accede al almacén de DATOS NÓMINAS para leer los datos del empleados, es decir, Horas trabajadas, Categoría y cotización a la Seguridad Social. Calcular Sueldo Íntegro: A partir de la Categoría del empleado busca en el almacén de CATEGORÍAS LABORALES el Sueldo Base por hora y calcula el Sueldo Íntegro (Sueldo Base * Horas Trabajadas) Calcular Retención IRPF: A partir de la Categoría del empleado busca en el almacén de CATEGORÍAS LABORALES el Tipo IRPF de retención y calcula el total retenido o IRPF (Sueldo Íntegro*Tipo IRPF) Íntegro IRPF NIF empleado Seguridad Social Calcular Retenciones IRPF Categoría Seguridad Social NIF empleado IRPF Horas Íntegro Categoría Obtener Datos Nómina Calcular Sueldo Íntegro NIF empleado Reg. Datos Nómina error LEER de DATOS NÓMINAS Calcular Retención IRPF Reg.Cat.Lab. Categoría error LEER de CATEGORÍAS LABORALES Categoría 4. (0.5) Responda qué tipos de acoplamiento presenta la figura y justifíquelo brevemente. Fin Datos Validos Obtener Datos Válidos Necesito otro dato Datos Fin Leer Datos goto ErrorLectura Entre “obtener datos válidos “ y “leer datos” existe acoplamiento por contenido por saltar al código interior a “Obtener Datos Válidos”. Entre cualquier módulo que llame a “Obtener Datos Válidos” y éste existirá acoplamiento por control con flag descriptivo. 5. (0.5) Explique por qué el acoplamiento se hace peor cuando la cohesión disminuye. Al disminuir la cohesión las distintas actividades que forman el módulo están menos relacionadas entre sí, es decir, apenas se pasan información entre ellas lo que significa que cada actividad debe recoger del interfaz la información que necesite (tanto de datos como de control). Otro enfoque posible es el que se describe en la introducción del tema de cohesión. 6. (0.5) A partir de las siguientes operaciones sobre el fichero de pacientes de un hospital, dibuje el cluster o cúmulo de información que considere más oportuno. Las operaciones son: - A partir de número de la seguridad social (NSS) leer el registro completo. - Comprobar si el paciente lo es por primera vez. - Ver el número de veces que un paciente ha asistido a consultas. Nota: considere que NSS es el campo clave para acceder al registro de pacientes en el cual está toda la información necesaria. Utilice cualquiera de las notaciones para cluster vistas en la asignatura. a nss b existe reg paciente Leer registro paciente nss veces d es nuevo Calcular ver si nro. veces paciente es consulta nuevo lista de registros de pacientes nss error reg paciente Leer reg. pacientes nss 7. (0.5) Dada una transacción de un DFD al que se va a aplicar el análisis de transacciones y considerando que dato1, dato2 y dato3 son el final de la rama aferente y que dato6, dato7 son el principio de la eferente, dibuje el diagrama de estructura que puede deducir de esta información considerando que decide alquilar un jefe. dato3 dato1 dato2 Aferente Raiz dato7 dato6 dato3 dato1 dato2 dato7 dato6 Eferente Transform. 8. (0.5) Comente la dificultad añadida que existe en la bifurcación de las ramas de entrada de un DFD a la hora de generar el diagrama de estructura. Utilice un ejemplo para clarificarlo. Explicación en página 185 del libro. 9. (0.5) Qué cohesión tiene el módulo Obtener Datos Cliente de la figura?. Razone la respuesta considerando que la información necesaria debe obtenerse tanto desde el fichero de clientes como desde el de morosos. dni Reg1 Reg2 Obtener datos cliente error Reg1 Reg2 error dni Leer clientes Leer morosos Comunicacional pues se puede invertir el orden y se comparte el interfaz (dni). 10. (0.75) A partir de la siguiente porción de un DFD 0 construir el diagrama de estructura asociado. Datos_barco Socios Gestionar barcos barcos Diccionario de datos: barco = @matricula + eslora + manga + dni_propietario + fecha_llegada Descripción de procesos: Gestionar barcos: Realiza el mantenimiento del fichero de barcos en el club: alta barcos, modificaciones barcos o baja de barcos. Gestionar barcos opcion Obtener opcion Altas barcos Modificac iones error Baj error Barco error Barco Barco Obtener datos Escribir barcos matricula Obtener datos Leer barcos Baj Bajas barcos error matricula Obtener matricul borrar barcos 11. (0.5) Se plantea el problema de construir un registro que contiene 10 campos etiquetados con un número de campo (del 1 al 10). Los campos se leen de forma aleatoria. A continuación se presentan dos aproximaciones para resolver esta cuestión. En la segunda de ellas se ha factorizado la tarea de construcción del registro. ¿Qué desventajas plantea esta aproximación sobre la primera?. Justifica la respuesta Registro Registro Obtener registro Obtener registro # campo campo Obtener campo campo campo registro # campo campo # campo Rechazar Campo duplicado completo # campo Obtener campo Construir registro campo # campo Rechazar Campo duplicado Lo importante es la existencia de MEMO RIA PREVIA en el módulo “Contruir registro”. por lo motivos que se exponen en teoría. 12. (1) Construir el diagrama de flujo de la siguiente función y proporcionar un conjunto de casos de prueba. int validar_hora( hora h) {int error = 0; (1) (2) (3) if ((h.hora < 0)||(h.hora > 23)) error = 1; (4) (5) (6) else if ((h.minutos < 0)||(h.minutos > 59)) error = 1; (7) return (error);} (8) 1 2 T F 3 4 T 4 F 5 T 7 7 F 6 T F 7 7 8 casos de prueba: 1. h.hora = -1, 2. h.hora = 24, 3. h.hora = 0, 4. h.hora = 0, 5. h.hora = 0, h.minutos = 25 h.minutos = 25 h.minutos =-1 h.minutos = 60 h.minutos = 25 (h.hora < 0) (h.hora >23) (h.minutos < 0 and h.hora>=0 and h.hora <=23) (h.minutos >59 and h.hora>=0 and h.hora <=23) 13. (0.75) Dibuje la rama aferente de un Diagrama de Estructu ra que pida al usuario su NIF y realice las validaciones siguientes: ♦ ♦ ♦ Comprobar que el formato del dato introducido es correcto (8 dígitos y una letra), Comprobar que la letra del NIF es la correcta y Verificar que el usuario está registrado en el almacén de datos de USUARIOS. Si el NIF introducido no es válido (por cualquiera de los tres motivos anteriores) el sistema debe informar de ello al usuario. AF NIF Existente Obtener NIF Existente nº error NIF existe Error NIF Con Letra Válida NIF Con Letra Válida Obtener NIF con Letra Válida nº error Validar Existe NIF Reg. Usuarios NIFválido NIFválido Letra es válida NIF Válido error Error Obtener NIF Válido Validar es Letra NIF correcta NIF nº error NIF Obtener NIF error Formato es válido Validar Formato NIF NIF_E Leer de USUARIO Leer de Almacén de USUARIOS Error 14. (2 puntos) En el DE de la figura los parámetros tienen los siguientes tipos de datos: cadena, cadena_válida: string[20] fin_entrada, ok: boolean nro_error: entero OCV fin_entrada cadena-valida Obtener Cadena Válida cadena nro_error fin_entrada ok cadena Obtener Validar Mostrar Cadena Cadena Mensaje Error Implemente una función escrita en C para el módulo “Obtener Cadena Válida” e incluya los prototipos del resto de módulos. Considere que todas las funciones son de tipo “void”. Además, el pseudocódigo del módulo “Obtener Cadena Válida” es el siguiente: REPETIR Obtener Cadena(cadena, fin_entrada) SI fin_entrada = falso Validar Cadena(cadena, ok) SI ok = falso ENTONCES Mostrar Mensaje Error(10) FIN SI FIN SI HASTA fin_entrada = verdadero O ok = verdadero cadena_valida = cadena SOLUCIÓN void Obtener_Cadena_Valida(char *cadena_valida, int *fin_entrada) { char cadena[20]; int ok; do { Obtener_Cadena(cadena, fin_entrada); if (!(*fin_entrada)) { Validar_Cadena(cadena, &ok); if (!ok) Mostrar_Mensaje_Error(10); } } while (!(*fin_entrada) && !ok); strcpy(cadena_valida, cadena); } void Obtener_Cadena(char *, int *); void Validar_Cadena(char *, int *); void Mostrar_mensajeError(int);