Вы находитесь на странице: 1из 73

Fundamentos de Ingeniera del Software

Captulo 4. Diseo

Hay dos formas de realizar un diseo: una es hacerlo tan simple que obviamente no haya deficiencias; la otra es hacerlo tan complicado que no haya deficiencias obvias C.A.R. Hoare

Diseo. Estructura
El proceso de diseo. Modelos de diseo. Diseo estructurado.
Diagramas de estructura. Estrategias de diseo:
Anlisis de transformaciones. Anlisis de transacciones.

Mtricas de calidad estructural.


Acoplamiento. Cohesin.

Heursticas de diseo.

Diseo. Bibliografa
(Piattini et al. 96) (Piattini et al. 04) Captulo 8. Apartado 8.1. (Molina et al. 97) A. Molina, P. Letelier, P.Snchez, J. Snchez. Metodologa y Tecnologa de la Programacin. Servicio de Publicaciones. UPV. 1997. (Pressman 06) Captulo 9 (resumido) y aptdo. 10.6. (Pressman 02) Captulo 13 y aptdos. 14.5 a 14.8. (MAP 95) Ministerio de Administraciones Pblicas. Gua de Tcnicas de Mtrica v.2.1. 1995. (MAP 01) Gua de tcnicas y prcticas de Mtrica v.3. http://www.map.es/csi/metrica3 (Page-Jones 88) M. Page-Jones. The Practical Guide to Structured Systems Design. Yourdon Press. 1988.

El proceso de diseo
El proceso de aplicar distintas tcnicas y principios con el propsito de definir un dispositivo, un proceso o un sistema con suficiente detalle como para permitir su realizacin fsica. Proceso iterativo a travs del cual se traducen los requisitos en una representacin del software.

El proceso de diseo (II)


ERS Anlisis (Qu) Lenguaje comprensible por el usuario
Organizacin lgica

E-R
Diseo de alto nivel (arquitectnico)

DFD

Enfoque de datos Modelo lgico de datos

Enfoque funcional Arquitectura de procesos Estructura detallada: programas y mdulos

Diseo (Cmo)

Modelo fsico de datos


Diseo de bajo nivel (detallado)

Esquema de BD y ficheros Codificacin y pruebas

Cuadernos de carga

Decisiones concretas: organizacin y rendimiento

Implementacin

(Piattini et al. 04)

Lenguaje comprensible por la mquina

El proceso de diseo (III)


Diseo de datos.
Transforma el modelo del dominio de la informacin del anlisis en las estructuras de datos necesarias para la implementacin. Estructura modular

Diseo arquitectnico.
del programa/aplicacin.

Diseo de interfaz.

Interfaces del sw. con otros sistemas y con los usuarios.

Diseo procedimental.

Descripcin procedimental de los componentes del sw.

Modelos de anlisis y de diseo (Yourdon 93)


MODELO ESENCIAL (LGICO)

En la ltima etapa del anlisis se ha establecido el lmite de automatizacin del sistema Se le asignan algunos almacenes

Se le asignan algunos procesos lgicos

MAINFRAME MODELO DE PROCESADORES

Lnea de telecomunicaciones CPU REMOTA

TAREA 1 MODELO DE TAREAS

TAREA 2

TAREA 3 Comunicacin entre tareas (a travs del S.O.) MODELO DE PROGRAMA

Mdulo A

Mdulo B

Mdulo C

Mdulo D

Asignacin de procesos y almacenes a procesadores

(Yourdon 93)

Asignado al procesador 1 Ntese cmo este almacn podr estar replicado en cada procesador Asignado al procesador 2

Diseo estructurado
Objetivos:
Desarrollar la estructura modular del programa Definir las relaciones entre mdulos

Tcnica ppal.: Diagrama de Estructura. Documentacin de partida: DFDs Estrategias de diseo:


Anlisis de transformaciones Anlisis de transacciones

Diseo estructurado
Se dispone de:
Las entradas que suministran al sistema las entidades externas. Las salidas aportadas por el sistema a dichas entidades externas. Las funciones descompuestas que se han de realizar en ese sistema. El esquema lgico de datos del sistema.

Diseo estructurado (II)


Tareas a realizar:
Determinar qu mdulos implantarn los procesos terminales (primitivos) obtenidos en el anlisis. Organizar la estructura de estos mdulos y definir las conexiones entre los mismos. Describir el pseudocdigo para cada mdulo.

Se basa en:
abstraccin modularidad encapsulamiento y ocultamiento de informacin

No confundir con programacin estructurada.

estructura de cuadros de Constantine)

Diagrama de estructura (Diagrama de

Diseo arquitectnico del sistema: Diagrama de mdulos funcionales Identifica qu mdulos se necesitan, as como sus inputs/outputs (caja negra) Refleja la comunicacin de datos y control y la jerarqua entre mdulos Diagrama de estructura:
Mdulos Conexiones Comunicaciones

Diagrama de estructura. Mdulo


Aquella parte de cdigo que se puede llamar (PageJones 88). Representa un programa, subprograma, procedimiento, funcin o rutina, dependiendo del lenguaje de implementacin que se vaya a utilizar. El diseo estructurado NO impone la restriccin de que un mdulo tenga que ser compilado independientemente. Admite parmetros de llamada y retorna algn valor, si es preciso. Tamao ideal: 40-50 lneas
pero hay muchas opiniones!

Se representa en el diagrama mediante un rectngulo.

Diagrama de estructura. Representacin de mdulos


MDULO OBTENER DATOS CLIENTES MDULO PREDEFINIDO IMPRIMIR CHEQUE DE PAGO CONECTOR 1

En la notacin de Mtrica tpica tambin se dispone de: Almacenes de datos Dispositivos fsicos
NOMBRE

DISPOSITIVO

Diagrama de estructura. Conexin entre mdulos


La conexin entre mdulos se representa mediante una lnea. En la figura:
A llama a B. B hace su funcin. B retorna a A, inmediatamente despus del lugar donde se produjo la llamada de A a B.
CONEXIN

MDULO QUE LLAMA

MDULO LLAMADO

El diagrama no dice nada sobre el cdigo de A ni sobre el de B, lo nico que sabe es que en A existe una sentencia del tipo CALL B.

Diagrama de estructura. Conexin entre mdulos (II)


A Estructura repetitiva

Estructura alternativa

Orden de ejecucin de los mdulos: de izquierda a derecha y de arriba abajo (Piattini et al. 04)
Segn (Molina et al. 97) el orden no importa

Diagrama de estructura. Conexin entre mdulos (III)


Ejemplo tpico de men: Men login

Procesos para agentes externos

Procesos para departamentos

Procesos Generales

Diagrama de estructura. Comunicacin entre mdulos


Los signos para llevar a cabo la comunicacin entre mdulos son:
Flags o controles Datos
campo alfabtico correcto EOR

Obtener datos clientes

campo EOR Obtener campo siguiente campo

campo correcto

Validar campo alfabtico

Flags o controles
Mediante los flags o controles, se puede representar:
Paso de control entre mdulos: un mdulo comunica a otro mdulo que ha terminado su proceso y traspasa al mdulo llamado el control del sistema. Comunicacin de que se ha producido un error en el proceso. Comunicacin de que se puede proceder a una operacin concreta.

Diferencias entre datos y flags


Los datos se procesan. Los datos son la informacin compartida por los mdulos. La posicin de la flecha (hacia arriba o hacia abajo) indica el sentido de la comunicacin. Los datos tienen importancia para el mundo exterior, estn relacionados con el problema. Los controles slo sirven para comunicar condiciones entre los mdulos. Los controles indican al mdulo que llama la terminacin EOF, o un error del mdulo llamado, y deben ir siempre en sentido ascendente. Los flags tienen importancia en la comunicacin de informacin en el interior; son los que sincronizan la operativa de los mdulos. Los flags no se suelen mostrar en los diagramas (Piattini et al. 04)

Representacin de parmetros
Se pueden representar mediante tablas de interfaz (Piattini et al. 04)
Mdulo Parmetro formal x y Entrada Salida Uso Significado

F(x,y)

S No

No S

P M

Fecha nacimiento Edad

...donde Uso es denotado por: P Procesado: a = b + 2 M Modificado: a = 3 + b T Transferido por el mdulo llamado a otro mdulo que ste llama, sin modificar su valor C Es usado como una variable de Control I El parmetro es transferido a otro mdulo y es modificado en este segundo mdulo

Diagrama de estructura. Ejemplo (Piattini et al. 96)

Diagrama de estructura. Ejemplo (II) (Molina et al. 97)


ENTERO VLIDO FIN DE FICHERO
CONSEGUIR ENTERO VLIDO

ENTERO FIN DE FICHERO ENTERO

EL ENTERO ES VLIDO

CONSEGUIR ENTERO VLIDO: ... LEER_ENTERO( fin_fichero, entero ) ;

LEER ENTERO DE FICHERO

VALIDAR ENTERO

... if VALIDAR_ENTERO( entero ) then ... ...

Diagrama de estructura. Ejemplo (III) (Molina et al. 97)


EMISIN CHEQUES DE PAGO NMERO EMPLEADO REGISTRO PAGO PAGO NETO JORNALERO FIN REGISTROS PAGO NETO EMPLEADO REGISTRO PAGO JORNALERO REGISTRO PAGO EMPLEADO OBTENER REGISTRO PAGO CALCULAR PAGO NETO JORNALEROS CALCULAR PAGO NETO EMPLEADOS IMPRIMIR CHEQUE PAGO IMPORTE PAGO NOMBRE EMPLEADO

RETRIBUCIN DIARIA

DEDUCCIONES NORMALES PAGO BRUTO JORNALERO SUELDO BASE PAGO BRUTO EMPLEADO COMPLEMENTOS IRPF IRPF CALCULAR DEDUCCIONES NORMALES CALCULAR PAGO BRUTO EMPLEADOS

JORNADAS TRABAJADAS CALCULAR PAGO BRUTO JORNALEROS

Diagrama de estructura. Ejemplo (III) (Molina et al. 97)


program EMISION_CHEQUES ;
type treg_pago : RECORD...END ; treg_jornalero : RECORD...END ; treg_empleado : RECORD...END ; var importe : real ; importe_pago_jorn, importe_pago_empl : real ; registro_pago : treg_pago ; registro_empleado : treg_empleado ; registro_jornalero : treg_jornalero ; fin_registros : boolean ; numero_empleado : integer ; nombre_empleado : string ; begin OBTENER_REGISTRO_PAGO (registro_pago, fin_registros) ; ... importe_pago_jorn := CALCULAR_NETO_JORN (registro_jornalero) ; ... importe_pago_empl := CALCULAR_NETO_EMPL (registro_empleado) ; ... IMPRIMIR_CHEQUE_PAGO( numero_empleado, nombre_empleado, importe) ; ... end. procedure OBTENER_REG_PAGO ( var rp : treg_pago; var fin_reg : boolean ) ; function CALCULAR_NETO_JORN ( rj : treg_jornalero ) : real ; function CALCULAR_NETO_EMPL ( re : treg_empleado ) : real ; function CALCULAR_BRUTO_JORN ( ret_diaria, jorn_trab : real ) : real ; function CALCULAR_BRUTO_EMPL ( sueldo_base, complem : real ) : real ; function CALCULAR_DEDUCCIONES ( pago_bruto, irpf : real ) : real ; procedure IMPRIMIR_CHEQUE_PAGO( num_emp : integer ; nom_emp : string; importe : real ) ;

Mtodos para la especificacin de mdulos


Interfaz-funcin (mdulo, entradas, salidas,

funcin).

Pseudo-cdigo.
Ms preciso que el usado en anlisis Deja cierto grado de libertad al programador No trata aspectos de eficiencia, a menos que estn directamente relacionados con requisitos Permite verificar la calidad del diseo

Herramientas complementarias:
Diagramas de flujo Nassi-Schneiderman Tablas y rboles de decisin

Estrategias de diseo
Pasos generales a seguir para obtener un buen diseo a partir de un DFD de procesos primitivos A veces hay que refinar el DFD de partida Dos estrategias:
Anlisis de transformaciones Anlisis de transacciones

Importante: disear el DE de forma que:


Los mdulos de nivel superior toman las decisiones de ejecucin (coordinan) Los de nivel inferior realizan la mayor parte del trabajo de entrada, de clculo y de salida

Estrategias de diseo. Pasos a seguir


Revisar el modelo fundamental del sistema
DFD procesos primitivos
no hace falta crear el DFD de procesos primitivos se aaden procesos, si hace falta recomendado, como mnimo, tener 3 niveles de profundidad

Determinar si el DFD tiene caractersticas de transformacin o de transaccin


indica expresamente la caracterstica del DFD!

Estrategias de diseo. Pasos a seguir (II)


Segn sea de transformacin o transaccin:
a) Aislar el centro de la transformacin, especificando los lmites del flujo de llegada y de salida ...o bien... b) Identificar el centro de la transaccin y las caractersticas del flujo de cada camino de accin. indica expresamente los elementos

anteriores!

Estrategias de diseo. Pasos a seguir (III)


Realizar el primer corte del diagrama de estructuras. Realizar el segundo nivel de factorizacin. Refinar la estructura del programa. Asegurarse del trabajo realizado por el diseo obtenido.

Anlisis de transformacin
(Piattini et al. 04)

Anlisis de transformacin. Primer corte del DE

Anlisis de transformacin.

Segundo nivel de factorizacin

Finalmente, es preciso optimizar!

Anlisis de transaccin
(Piattini et al. 04)

Anlisis de transaccin.

Primer nivel de factorizacin

Anlisis de transaccin.

Segundo nivel de factorizacin

Finalmente, es preciso optimizar!

Anlisis de transformacin. Ejemplo (Gua de tcnicas de Mtrica 2.1, p.144)

Anlisis de transformacin. Ejemplo (II)

Anlisis de transacciones. Ejemplo


(Gua de tcnicas de Mtrica 2.1, p.148)

Anlisis de transacciones. Ejemplo (II)

Centros de transaccin implcitos


Normalmente el esquema de transaccin no es tan claro: el proceso de transaccin no aparece explcitamente en el DFD Solucin: examinar el diagrama de contexto y la lista de eventos para determinar los tipos de transacciones en el sistema

Centros de transaccin implcitos (II)


P datos-venta Realizar venta

(Molina et al. 97) p.172

DPTO. SERVICIO A CLIENTES datos-devolucin P Realizar devolucin

...

P datos-pago Admitir pago

Seleccione la opcin deseada: 1. Realizar venta 2. Realizar devolucin 3. Admitir pago

Estrategia de diseo. Pasos a seguir (IV) (Molina et al. 97) p.169


Anlisis de transacciones
Encontrar las transacciones en el DFD

Anlisis de transformaciones
DE para cada transaccin

Anlisis de transacciones
Componer los DE en uno solo, usando un centro de transacciones

DE para un men

Mtricas de calidad estructural


Mayor calidad estructural mantenimiento ms fcil
Extensibilidad ++ Reutilizacin ++

Dos mtricas:
Acoplamiento Cohesin

Acoplamiento
Grado de interdependencia entre mdulos.
Depende de la forma de interactuar entre los mdulos: p.ej. n / tipo de parmetros que se intercambian. Objetivo: minimizar el acoplamiento (CAJA NEGRA).
modificabilidad++, comprensin++, reutilizacin++

Ventajas de un bajo acoplamiento:


Menos oportunidades para el efecto onda. El cambio realizado en un mdulo afecta lo menos posible a otros mdulos. Mientras se est manteniendo un mdulo, es deseable no necesitar preocuparse de los detalles internos de cualquier otro mdulo.

Complejidad de la interfaz
Acoplamiento Complejidad de la interfaz P.ej. (Molina et al. 97)
1. 2. 3. 4. 5. 6. CALL CALL CALL CALL CALL CALL LONGITUD( LONGITUD( LONGITUD( LONGITUD( LONGITUD( LONGITUD. X1, Y1, X2, Y2, D ) ORIGEN, DESTINO, D ) PuntosX, PuntosY, D ) LINEA, D ) TABLALINEA )

Qu interfaz es ms fcil de entender?

Complejidad de la interfaz (II)


Depende de:
Cantidad de informacin que debe comprenderse (como n parmetros) Accesibilidad a esa informacin
Indireccin complejidad++ Informacin local complejidad- Informacin en forma estndar complejidad- Si el parmetro intenta controlar la lgica del mdulo que lo recibe complejidad++

Niveles de acoplamiento
Stevens, Myers y Constantine 74

Acoplamiento Normal
De datos Por estampado De control

MEJOR (- Acopl.)

Acoplamiento comn Acoplamiento por contenido

Lmite de aceptacin

PEOR (+ Acopl.)

Si dos mdulos presentan varios tipos de acoplamiento, se considera que tienen el peor de los acoplamientos que presentan.

Niveles de acoplamiento (II)


Acoplamiento normal:
A y B normalmente acoplados si: 1) A llama a B; 2) B retorna el control a A

De datos:
se establece una comunicacin bsica por medio de elementos de datos

De estampado:
se pasan datos con estructura de registro

De control:
se comunican con flags de control

Acoplamiento normal de datos


No genera problemas. Es el acoplamiento deseable en diseo estructurado Slo debe haber parmetros con sentido En la medida de lo posible, minimizar el nmero de parmetros
Obtener DNI Cliente

DNI cli

Leer DNI Cliente

Acoplamiento normal por estampado


Introduce indireccin No es deseable si el mdulo que recibe el registro slo necesita parte de los datos. Pasar campos innecesarios oscurece el diseo y reduce la flexibilidad No crear registros artificiales, empaquetando datos no relacionados
Obtener DNI Cliente

cli

Leer Cliente

Acoplamiento normal de control


Deseable slo si los flags de control son descriptivos
campo alfabtico correcto EOR

Obtener datos clientes

campo EOR Obtener campo siguiente campo

campo correcto

Validar campo alfabtico

Acoplamiento normal de control (II)


No es deseable si el control tiene sentido descendente: Un mdulo controla a otro y no son realmente independientes El mdulo subordinado tiene poca cohesin
Obtener trans y registro

Flag de selecc

reg trans

reg maestro

Control sist E/S

Solucin: sustituir el mdulo


subordinado por tantos mdulos como sea necesario, de forma que slo intercambien datos
Flag de selecc: 1. 2. 3. Obtiene RT Obtiene RM Obtiene RT y RM

Acoplamiento normal de control (III)


Peor es si hay inversin de autoridad
(Molina et al. 97) p.66

el mdulo subordinado intenta controlar al mdulo padre


Formar palabras

reg

otro reg

Encontrar palabras ...

Niveles de acoplamiento (III)


Acoplamiento comn.
Ms de dos mdulos hacen referencia a un rea comn de datos.
Dos mdulos pueden estar acoplados globalmente y no estar conectados mediante una llamada. Es desaconsejable, dado que (Molina et al. 97):
Un error de programacin en un mdulo que usa puede aparecer en otros mdulos que compartan esa misma rea global. Reutilizacin- Puede ser difcil averiguar de dnde procede informacin depositada en el rea global. Se pueden incluso usar para depositar informacin de distinta naturaleza. Aplicaciones difciles de mantener: es difcil saber qu datos son usados por un mdulo.

Niveles de acoplamiento (IV)


mdulo necesita o accede a una parte de otro, rompiendo la jerarqua de funcionalidad de la estructura. En la mayora de los casos slo se puede dar en ensamblador A B Hay que evitarlo descomponiendo el mdulo al que se accede o duplicando esa parte de cdigo en el mdulo que llama

Acoplamiento de contenido. Ocurre cuando un

Datos vagabundos
Deben evitarse tambin los datos vagabundos
(que a veces estn asociados al acoplamiento normal)

(Molina et al. 97) p.62

Posibles soluciones: a) Reorganizar el diagrama b) Introducir variables globales

Datos vagabundos (II)


El dato vagabundo registro maestro se ha eliminado reorganizando el DE

Cohesin
Medida de la relacin funcional entre los elementos de un mdulo.
Un mdulo coherente slo debe hacer una cosa. Un mdulo coherente ejecuta una tarea bien definida en un programa y requiere poca interaccin con otros procedimientos que se ejecutan en otras partes del programa. Objetivo: mdulos con alta cohesin. La escala de cohesin no es lineal: una cohesin baja es mucho peor que una de grado medio, una de grado medio es casi tan buena como una alta.

Cohesin y acoplamiento
Son criterios inversamente relacionados:
AULAS COCINAS
(Molina et al. 97)

APARCAMIENTO COMEDOR

COMEDOR COCINAS

APARCAMIENTO AULAS

Niveles de cohesin
Stevens, Myers y Constantine 74 Funcional Mayor cohesin Secuencial Comunicacional Procedural Temporal Lmite de Lgica aceptacin Coincidental Peor cohesin
(CAJA NEGRA)

(CAJA GRIS) (CAJA TRANSPARENTE)

Niveles de cohesin (II)


Funcional:
se realiza una sola funcin.

Secuencial:

la salida de una tarea sirve como entrada a la siguiente: varios mdulos con cohesin funcional que se pasan un dato

Comunicacional: Procedural: Temporal: Lgica:

actividades que comparten datos (bien los mismos datos de entrada o de salida).

actividades diferentes, en las cuales el flujo de ejecucin fluye de una a la siguiente. actividades diferentes relacionadas por el tiempo.

actividades con la misma categora lgica general, que se seleccionan fuera del mdulo. actividades diferentes sin relaciones

Coincidental o casual:
significativas entre ellas.

Niveles de cohesin (III)


Ejemplos:
Funcional: funciones matemticas como cos(alpha); escribir registro (fichero, registro) Secuencial: Formatear registro = Leer registro + Aplicar formato registro Comunicacional: Obtener detalles cliente (num_cta, nombre_cli, saldo_prestamo) Procedural: Mdulo Detectar error, corregirlo y reanudar la ejecucin Porqu no es cohesin secuencial? Temporal: mdulos de inicializacin y terminacin Lgica: rutina general de E/S

Determinacin de la cohesin de un mdulo


Realiza el mdulo una sola funcin?
NO POR DATOS S S NO S NO S

(Molina et al. 97)

1. FUNCIONAL. 2. SECUENCIAL. 3. COMUNICACIONAL 4. PROCEDURAL. 5. TEMPORAL. 6. LGICA.

Es importante la secuencia?
POR FLUJO DE CONTROL

Cmo estn relacionadas las actividades dentro del mdulo?

NINGUNA DE LAS DOS

Es importante la secuencia?

Son las actividades de la misma categora general?

NO 7. CASUAL.

Heursticas de diseo estructural


IMPORTANTE: Los mdulos superiores deben coordinar, y los inferiores realizar las tareas. Reducir el n de parmetros que intercambian los mdulos tanto como sea posible. Nunca pasar registros que contengan muchos campos cuando en realidad el mdulo slo necesita algunos. No agrupar parmetros sin relacin en un registro. Evitar que un mdulo hijo d rdenes al padre. En la medida de lo posible, no usar variables globales. Se puede parar la descomposicin cuando la interfaz con un mdulo sea tan complicada como el mdulo mismo.

Heursticas de diseo estructural


Debe evitarse la situacin en que un mdulo llama a muchos otros (puede ser difcil de entender).
Normalmente sucede cuando no se tiene en cuenta los niveles intermedios. Solucin: combinar funciones subordinadas en una sola. Excepcin: cuando el mdulo es un centro de transacciones.

Deben evitarse largas secuencias lineales. Soluciones: (a) revisar las posibilidades de descomponer las funciones en subfunciones con entidad propia. (b) comprimir mdulos subordinados en un mdulo de nivel superior.

Heursticas de diseo estructural (Molina et al. 97) cap. 6


Factorizar funciones cuando sea posible. Inicializar las variables lo ms tarde posible en el diagrama, cerca de las funciones a realizar. Evitar la disgregacin de decisiones:
La parte de reconocimiento de la condicin se separa de la parte de ejecucin Cul puede ser

un sntoma?

Heursticas de diseo estructural (II) (Molina et al. 97) cap. 6


Evitar sistemas dirigidos por la entrada fsica (sistemas que no procesan suficientemente la entrada). Lo deseable es: Lgico

LGICO FSICO

...

Heursticas de diseo estructural (III) (Molina et al. 97) cap. 6


Ejemplo de sistema dirigido por la entrada fsica
El acoplamiento suele ser alto. Ya que los mdulos superiores en la jerarqua tratan con la entrada fsica, cualquier cambio en la especificacin de sta afectar a gran parte del sistema.

Heursticas de diseo estructural (IV) (Molina et al. 97) cap. 6


Edicin de los datos de entrada
Validar sintaxis antes que semntica Validar lo sencillo antes que lo cruzado Ejemplo: nombre-ciudad y cod-postal
Validar: 1 sintaxis nombre-ciudad caracteres alfabticos cod-postal numrico 2 Verificar que ambos datos existen 3 Validacin cruzada: cod-postal nombre-ciudad

Heursticas de diseo estructural (V) (Molina et al. 97) cap. 6


Informacin de los errores:
Qu mdulo

Dos soluciones no vlidas:

llama al mdulo que escribe mensajes de error?

Heursticas de diseo estructural (VI) (Molina et al. 97) cap. 6


Solucin vlida:

Dnde se pone el texto de los mensajes de error?


Diseminados por el

sistema mdulo

Dentro de un nico