Subido por Mariano Joaquín Medina

10 - Guia TP - Cohesión

Anuncio
UTN – F. R. Resistencia
Ing. en Sistemas
Diseño de Sistemas
Guía de Trabajos Prácticos 10: Principio de Cohesión Aplicado
Introducción
La presente guía de trabajos prácticos introduce los conceptos relacionados con el principio de cohesión del
diseño estructurado, incluye ejercicios destinados a determinar el grado de cohesión de uno o más módulos
partiendo de su descripción o pseudocódigo, también se solicita la derivación de diagramas de estructuras a
partir de DFD, cuyos módulos sean altamente cohesivos.
Objetivos de la guía
Lograr que el alumno:
 Entienda cuales son las decisiones de diseño que influyen en la cohesión de un módulo.
 Diferencie el grado de cohesión a través de los niveles planteados.
Modalidad de Trabajo
Grupal, de hasta 6 integrantes
Fundamentos teóricos
La cohesión es la medida cualitativa de cuan estrechamente relacionados están los elementos internos de un
módulo. Otros términos utilizados frecuentemente son “fuerza modular”, “ligazón”, y “funcionalidad”.
En la práctica un elemento de procesamiento simple aislado, puede estar funcionalmente relacionado en
diferentes grados a otros elementos. Como consecuencia, diferentes diseñadores, con diferentes “visiones” o
interpretaciones de un mismo problema, pueden obtener diferentes estructuras modulares con diferentes
niveles de cohesión y acoplamiento. A esto se suma el inconveniente de que muchas veces es difícil evaluar el
grado de relación funcional de un elemento respecto de otro.
La cohesión modular puede verse como el cemento que amalgama juntos a los elementos de procesamiento
dentro de un mismo módulo.
Niveles de Cohesión







Cohesión Casual (la peor): ocurre cuando existe poca o ninguna relación entre los elementos de un
módulo.
Cohesión Lógica (sigue a la peor): Los elementos de un módulo están lógicamente asociados si puede
pensarse en ellos como pertenecientes a la misma clase lógica de funciones.
Cohesión Temporal (de moderada a pobre): significa que todos los elementos de procesamiento de una
colección ocurren en el mismo período de tiempo durante la ejecución del sistema.
Cohesión de Procedimiento (moderada): Elementos de procesamiento relacionados proceduralmente son
elementos de una unidad procedural común. Una unidad procedural común puede ser un proceso de
iteración o de decisión, o una secuencia lineal de pasos.
Cohesión de Comunicación (moderada a buena): se da cuando todos los elementos operan sobre el mismo
conjunto de datos de entrada o de salida. Los diagramas de flujo de datos (DFD) son un medio objetivo
para determinar si los elementos en un módulo están asociados por comunicación. La cohesión por
comunicación es común en aplicaciones comerciales. Ejemplos típicos pueden ser “un módulo que
imprima o grabe un archivo de transacciones” o “un módulo que reciba datos de diferentes fuentes, y los
transforme y ensamble en una línea de impresión”.
Cohesión Secuencial: los datos de salida (resultados) de cada elemento de procesamiento sirven como
datos de entrada al siguiente elemento de procesamiento. En términos de un diagrama de flujo de datos
de un problema, la cohesión secuencial combina una cadena linear de sucesivas transformaciones de
datos.
Cohesión Funcional (la mejor): en un módulo completamente funcional, cada elemento de procesamiento,
es parte integral de, y esencial para, la realización de una función simple.
Ing. Germán Gaona
1/8
Ing. Valeria Sandobal
IMPORTANTE: Desde el punto de vista de la medición de la cohesión respecto del módulo podríamos definir
que: la cohesión de un módulo es aproximada al nivel más alto de cohesión que es aplicable a todos los
elementos de procesamiento dentro del módulo.
Criterios para establecer el grado de cohesión
Una técnica útil para determinar si un módulo está acotado funcionalmente es escribir una frase que describa
la función (propósito) del módulo y luego examinar dicha frase.
Puede hacerse la siguiente prueba:
 Si la frase resulta ser una sentencia compuesta, contiene una coma, o contiene más de un verbo,
probablemente el módulo realiza más de una función; por tanto, probablemente tiene vinculación
secuencial o de comunicación.
 Si la frase contiene palabras relativas al tiempo, tales como “primero”, “a continuación”, “entonces”,
“después”, “cuando”, “al comienzo”, etc., entonces probablemente el módulo tiene una vinculación
secuencial o temporal.
 Si el predicado de la frase no contiene un objeto específico sencillo a continuación del verbo,
probablemente el módulo esté acotado lógicamente. Por ejemplo “editar todos los datos” tiene una
vinculación lógica; “editar sentencia fuente” puede tener vinculación funcional.
 Palabras tales como “inicializar”, “limpiar”, etc., implican vinculación temporal casual.
 A continuación se presenta otro método basado en un cuadro que podría servir como guía para la
determinación del nivel de cohesión de un módulo.
2/8
UTN – F. R. Resistencia
Ing. en Sistemas
Diseño de Sistemas
Ejercicio 1
Determine el nivel de cohesión de los módulos que se enuncian a continuación en base a las descripciones
textuales correspondientes.
Módulo
AftIn1
AftIn2
GenRept
Descripción Textual
Ingresa los ítems de control, los suma, y verifica totales.
Ingresa ítems de control, graba cinta de prueba, suma ítems de
control, verifica totales.
Genera reportes: de ventas, de estado del proyecto, o de
transacciones de clientes.
SintCh
Chequea la exactitud de la sintaxis de una oración.
OutTran
Imprime una transacción y la copia a disco con igual formato.
UpCredOut
Actualiza el registro de crédito corriente y lo graba en disco.
StartIt
Abre archivos, obtiene el primer registro de transacción y maestro,
e imprime la cabecera de página.
NewTran
Actualiza registro en el archivo y obtiene la siguiente transacción
CircDisp
Redondeo_en_5
(numero)
Tratar_Suba_Dolar
(precio)
Generar_Lista_XML
JustificarDerecha
TratarDeudores
ActualizarPrecios
(IncFijo, IncPorc)
Ing. Germán Gaona
Cohesión
Produce el diagrama del circuito a partir de una matriz de
conexión.
Procedimiento que contiene una estructura condicional múltiple,
que de acuerdo al valor decimal del numero recibido,
 Si es menor a 0,30, entonces devuelve el mismo número sin
decimal
 Si es igual a 0,50, entonces devuelve el mismo número con
decimal 0,50
 Si es mayor a 0,50, entonces devuelve el numero incrementado
en uno, sin decimal
Procedimiento que recibe el nuevo valor del dólar y actualiza la
lista de precios (en pesos) multiplicando el valor en dólares del
producto por el nuevo precio recibido. Además actualiza el
almacén que contiene el precio del dólar con que se calcularon los
precios.
Procedimiento que, primero lee el almacén PRECIO_DEL_DOLAR,
en base a esto, actualiza el almacén LISTA_DE_PRECIOS y en base a
este almacén genera un documento XML con los precios
actualizados de cada artículo.
Dada una cadena de texto como entrada devuelve otra cadena de
texto con un relleno de espacios en blanco a la izquierda hasta
completar una cierta longitud dada también como entrada.
Recorre el almacén de deudores y obtiene la cantidad de deudores
y el monto de la deuda total
Procedimiento de actualización de precios que recibe un
incremento fijo y un porcentaje de actualización, para los artículos
de Categoria1 aplica el incremento fijo, mientras que para el resto
de los artículos utiliza el porcentaje de actualización
3/8
Ing. Valeria Sandobal
Ejercicio 2
Suponiendo que las siguientes frases describen módulos, determine el grado de cohesión de cada uno.
Justifique su respuesta:
a. Se arman las líneas de impresión de los distintos informes que se necesita obtener.
__________________________________________________________________________________________
__________________________________________________________________________________________
__________________________________________________________________________________________
b. Primero se obtienen todos los registros de compras de un determinado proveedor, después se toman los
pedidos no recibidos y se calcula el monto adeudado.
__________________________________________________________________________________________
__________________________________________________________________________________________
__________________________________________________________________________________________
c. En un proceso de liquidación de sueldos, se toma la cantidad de días trabajados, se multiplica por pago
diario y se le retienen los adelantos. La salida es el sueldo neto.
__________________________________________________________________________________________
__________________________________________________________________________________________
__________________________________________________________________________________________
d. Se limpian las variables del sistema para que no queden datos del proceso que se ha realizado.
__________________________________________________________________________________________
__________________________________________________________________________________________
__________________________________________________________________________________________
Ejercicio 3:
Escenario
El programa que se presenta a continuación corresponde a la implementación de una estructura modular,
cuyo objetivo es obtener una estadística impresa de ocurrencias de fallas en máquinas tragamonedas.
Para ello existen dos almacenes de datos: FALLAS, que contiene un registro por cada falla posible, con los
campos cod_f, nomb_f y costo_f y el almacén NOVFALLAS, que contiene un registro por cada falla que se
produce y entre los campos que lo componen el único relevante para el proceso en cuestión es falla_n que
indica el código de la falla producida. Ambos almacenes se encuentran ordenados por código de falla.
Se propone procesar secuencialmente NOVFALLAS, con un corte de control por código de falla.
INICIO
Total, testigo, gen, marca, totcosto, gencosto: enteros
HACER inicializar(total, gen, marca, totcosto, gencosto)
HACER apertura
LEER Novfallas AL FIN marca:=1
Testigo:=falla_n
HACER proceso(total,testigo,marca,gen,totcosto,gencosto,falla_n) MIENTRAS marca=0
HACER corte(testigo, total, gen, totcosto, gencosto,falla_n)
HACER imprimo(”TOTAL GENERAL”, gen, gencosto)
HACER final
FIN
4/8
UTN – F. R. Resistencia
Ing. en Sistemas
Diseño de Sistemas
RUTINA inicializar(total, gen, marca, totcosto,
gencosto)
Total:=0
Marca:=0
Gen:=0
Totcosto:=0
Gencosto:=0
RUTINA apertura
ABRIR fallas
ABRIL novfallas
RUTINA proceso(total, testigo, marca, gen,
totcosto, gencosto,falla_n)
SI testigo = falla_n
HACER acumular(total)
LEER novfallas AL FIN marca:=1
CONTRARIAMENTE
HACER corte(testigo, total, gen, totcosto,
gencosto,falla_n)
FIN SI
RUTINA acumular(total)
Total:=total + 1
RUTINA corte(testigo, total, gen, totcosto,
gencosto,falla_n)
BUSCAR testigo EN fallas
HACER calcosto(totcosto, costo_f)
HACER imprimo(nomb_f, total, totcosto)
Gen:=gen+total
Gencosto:=gencosto+totcosto
Total:=0
Totcosto:=0
Testigo:=falla_n
RUTINA calcosto(totcosto, costo_f)
Totcosto:=totcosto+costo_f
RUTINA imprimo(nomb_f, total, totcosto)
IMRIMIR nomb_f + “ ” + total + “ ” + totcosto
RUTINA final
CERRAR fallas
CERRAR novfallas
Consigna
Evalúe el grado de cohesión que presenta cada uno de los módulos especificados.
Ejercicio 4
Escenario
Dado un sistema existente en un colegio secundario que contiene los siguientes almacenes:
Especificación de Almacenes
ALUMNOS
@Legajo
Nombre
Domicilio
MATERIAS
@CodMat
Descripcion
CURSOS
@CodCur
Descripcion
CALIFICACIONES
@CodMat
@CodCur
@Legajo
Trimestre_1
Trimestre_2
Trimestre_3
MATERIASXCURSOS ALUMNOSXCURSOS
@CodMat
@Legajo
@CodCur
@CodCur
Se desea agregar una funcionalidad que permita, a partir de un curso ingresado por el Director, calcular el
promedio (entre los tres trimestres) de cada materia de cada alumno, para luego obtener el promedio final
para cada alumno en todas las materias y emitir un informe impreso que incluya todos los alumnos del curso
ingresado con su promedio.
Diagrama de Flujo de Datos de Nivel 0
Director
Ing. Germán Gaona
curso
Emitir Promedio
por Alumno
5/8
informe
Promedio por
Alumno
Ing. Valeria Sandobal
Diagrama de Flujo de Datos explotado
CURSOS
Ingresar Curso
Director
cursoInforme
curso
Buscar Curso
curso
cursoInforme
ALUMNOSXCURSOS
legajo
cursoInvalido
errorCursoIngres
Validar Curso
codCurso
Busleer Alumno
CALIFICACIONES
codCurso+legajo
ALUMNOS
Mostrar Error
legajo
tri1+
tri2+tri3
Busleer
Calificaciones
codMat+tri1+
tri2+tri3
codMat
alumno
Buscar Alumno
Calcular
Promedio
Materia
curso
Acumular
Cantidad
Materias
legajo+nombre
promxMatxAlum
Imprimir
Informe
informe
Acumular
Promedios
informePromedios
Armar Informe
Promedio por
Alumnos
promFinalxAlum
totalPromxAlum cantMaterias
Calcular
Promedio Final
Consigna
1. Realice agrupamientos de burbujas indicando para cada uno de ellos el grado de cohesión. Justifique.
2. Plantee un DE modular para el DFD propuesto, usando como guía los agrupamientos hechos.
3. Refine el DE utilizando el principio de acoplamiento y otras buenas prácticas vistas en clase.
6/8
UTN – F. R. Resistencia
Ing. en Sistemas
Diseño de Sistemas
Ejercicio 5
Escenario
Debe obtenerse una planilla con el detalle de minutos trabajados por el personal de la empresa. Se dispone de
dos almacenes con las siguientes estructuras:
EMPLEADOS = {Empleado}
Empleado =
Nro_legajo +
Nombre +
MinJornada
NOVEDADES = {Novedad}
Novedad =
Nro_legajo +
Fecha +
Hora_ingreso +
Hora_egreso +
1er_egreso +
1er_retorno +
2do_egreso +
2do_retorno +
3er_egreso +
3er_retorno
Ambos almacenes son de acceso secuencial y están ordenados por el campo Nro_legajo. El almacén
EMPLEADOS contiene un registro por cada empleado y el almacén NOVEDADES, contiene un registro por cada
día trabajado por empleado.
Diagrama de Flujo de Datos propuesto
(ver DFD siguiente página)
Se propone realizar un apareo de ambos almacenes por Nro_legajo y calcular por cada empleado:
 minutos diarios trabajados
 minutos diarios excedentes / faltantes (minutos diarios trabajados – MinJornada)
 duración de cada parte de salida
 total de minutos diarios salidos
 total de minutos realmente trabajados
 total de minutos excedentes / faltantes
La planilla de salida debe presentar el siguiente formato:
 Primera línea: Nro de legajo, nombre, minutos de la jornada.
 Detalle: Por cada novedad emitir: Fecha, Hora ingreso, Hora egreso, 1er salida duración, 2da salida
duración, 3er salida duración, Total salidas, Minutos diarios realmente trabajados, Minutos excedentes
/ faltantes
 Línea de totales:
o Total de minutos trabajados en el mes
o Total de minutos excedentes / faltantes
Consigna:
1. Realice agrupamientos de burbujas indicando para cada uno de ellos el grado de cohesión. Justifique.
2. Plantee un DE modular para el DFD propuesto, usando como guía los agrupamientos hechos.
3. Refine el DE utilizando el principio de acoplamiento y otras buenas prácticas vistas en clase.
Ing. Germán Gaona
7/8
Ing. Valeria Sandobal
EMPLEADOS
NOVEDADES
empleado
novedad
Leer Empleados empleado
novedad Leer Novedades
Comparar legajo
Hora_Ingreso +
Hora_Egreso
Calcular
Minutos Brutos
1er_egreso + 2do_egreso +
1er_retorno 2do_retorno
Calcular 1er
Salida
3er_egreso +
3er_retorno
Calcular 2da
Salida
salida1
Calcular3er
Salida
salida3
salida2
empleado
MinBrutosTrab
Calcular
Minutos
Trabajados
TotalSalidas
novedad
Sumar Salidas
TotalSalidas
Armar
Encabezado
Empleado
Armar Detalle
Nov Empleado
MinNetosTrab
MinJornada
detalle
MinDesvio
encabezado
Calcular Desvio
Min
Acumular Min
Netos
Trabajados
MinNetosAc
Armar Totales
Empleado
totales
Imprimir
informe
MinDesvio
MinDesvioAcum
Acumular
Desvio Min
Planilla
Bibliografía




Page-Jones, M. (1988). The Practical Guide to Structured Systems Design (2nd Ed.). Prentice Hall.
Yourdon, E.; Constantine, L. (1979). Structured Design: Fundamentals of a Discipline of Computer
Program and Systems Design. Yourdon Press.
McConnell, S. (2004). Code complete: A practical handbook of software construction (2nd ed.).
Redmond, Wash.: Microsoft press.
Torossi, Gustavo. Apunte de Diseño Estructurado.
8/8
Descargar