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);

Documentos relacionados