SlideShare uma empresa Scribd logo
1 de 73
Baixar para ler offline
Fundamentos de
Ingeniería del Software




         Capítulo 4. Diseño
“Hay dos formas de realizar un diseño: 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
Diseño. Estructura

 El proceso de diseño.
 Modelos de diseño.
 Diseño estructurado.
       Diagramas de estructura.
       Estrategias de diseño:
         • Análisis de transformaciones.
         • Análisis de transacciones.

 Métricas de calidad estructural.
       Acoplamiento.
       Cohesión.
 Heurísticas de diseño.
Diseño. Bibliografía

 (Piattini et al. 96) (Piattini et al. 04) Capítulo 8. Apartado 8.1.
 (Molina et al. 97) A. Molina, P. Letelier, P.Sánchez, J. Sánchez.
 “Metodología y Tecnología de la Programación”. Servicio de
 Publicaciones. UPV. 1997.
 (Pressman 06) Capítulo 9 (resumido) y aptdo. 10.6.
 (Pressman 02) Capítulo 13 y aptdos. 14.5 a 14.8.
 (MAP 95) Ministerio de Administraciones Públicas. Guía de Técnicas
 de Métrica v.2.1. 1995.
 (MAP 01) Guía de técnicas y prácticas de Métrica 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 diseño

 “El proceso de aplicar distintas técnicas y
 principios con el propósito de definir un
 dispositivo, un proceso o un sistema con
 suficiente detalle como para permitir su
 realización física”.
 Proceso iterativo a través del cual se
 traducen los requisitos en una
 representación del software.
El proceso de diseño (II)
                                              ERS                  Análisis (Qué)
                                                                   Lenguaje comprensible
                                                                   por el usuario
                                E-R                     DFD
    Diseño de alto nivel                                       Enfoque        Organización
    (arquitectónico)
                                 Enfoque de                                   lógica
                                                               funcional
                                 datos
                                                         Arquitectura de
                 Modelo lógico de datos
                                                            procesos
                                                                                  Diseño (Cómo)

                                                    Estructura detallada:
                 Modelo físico de datos             programas y módulos
    Diseño de bajo nivel                                                   Decisiones concretas:
    (detallado)                                                            organización y
                       Esquema de BD                     Cuadernos de      rendimiento
                         y ficheros                         carga

                                                                      Implementación
                                       Codificación y                 Lenguaje comprensible
(Piattini et al. 04)                     pruebas                      por la máquina
El proceso de diseño (III)

 Diseño de datos.          Transforma el modelo del
 dominio de la información del análisis en las estructuras
 de datos necesarias para la implementación.
 Diseño arquitectónico.             Estructura modular
 del programa/aplicación.
 Diseño de interfaz.          Interfaces del sw. con
 otros sistemas y con los usuarios.
 Diseño procedimental.           Descripción
 procedimental de los componentes del sw.
Modelos de análisis y de
diseño (Yourdon 93)
                            MODELO ESENCIAL
                               (LÓGICO)




 En la última etapa del
 análisis se ha
                                                                     Se le asignan
 establecido el límite
                                                                     algunos
 de automatización del
                                                                     procesos
 sistema
                                                                     lógicos
                                        Se le asignan algunos
                                        almacenes
                                                           MAINFRAME                     Línea de
                                                                                         telecomunicaciones
                               MODELO DE
                             PROCESADORES                                            CPU REMOTA



                              TAREA 1                   TAREA 2                      TAREA 3

                          MODELO DE TAREAS                                    Comunicación entre tareas
                                                        Módulo A              (a través del S.O.)
                                                                          MODELO DE PROGRAMA


                                  Módulo B                Módulo C           Módulo D
Asignación de procesos y
almacenes a procesadores                 (Yourdon 93)




                       Asignado al
                       procesador 1
                                      Nótese cómo este
                                      almacén podrá estar
                                      replicado en cada
                                      procesador
        Asignado al
        procesador 2
Diseño estructurado

 Objetivos:
   Desarrollar la estructura modular del programa
   Definir las relaciones entre módulos
 Técnica ppal.: Diagrama de Estructura.
 Documentación de partida: DFDs
 Estrategias de diseño:
   Análisis de transformaciones
   Análisis de transacciones
Diseño 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 lógico de datos del sistema.
Diseño estructurado (II)

 Tareas a realizar:
   Determinar qué módulos implantarán los procesos
   terminales (primitivos) obtenidos en el análisis.
   Organizar la estructura de estos módulos y definir las
   conexiones entre los mismos.
   Describir el pseudocódigo para cada módulo.
 Se basa en:
   abstracción
   modularidad
   encapsulamiento y ocultamiento de información
 No confundir con programación estructurada.
Diagrama de estructura (Diagrama de
estructura de cuadros de Constantine)


 Diseño arquitectónico del sistema: Diagrama de
 módulos funcionales
 Identifica qué módulos se necesitan, así como
 sus inputs/outputs (caja negra)
 Refleja la comunicación de datos y control y la
 jerarquía entre módulos
 Diagrama de estructura:
   Módulos
   Conexiones
   Comunicaciones
Diagrama de estructura.
Módulo
 “Aquella parte de código que se puede llamar” (Page-
 Jones 88).
 Representa un programa, subprograma, procedimiento,
 función o rutina, dependiendo del lenguaje de
 implementación que se vaya a utilizar.
 El diseño estructurado NO impone la restricción de que
 un módulo tenga que ser compilado
 independientemente.
 Admite parámetros de llamada y retorna algún valor, si
 es preciso.
 Tamaño ideal: 40-50 líneas
   ¡pero hay muchas opiniones!
 Se representa en el diagrama mediante un rectángulo.
Diagrama de estructura.
Representación de módulos

                       MÓDULO
                     PREDEFINIDO
      MÓDULO
                                    CONECTOR
      OBTENER         IMPRIMIR
       DATOS         CHEQUE DE          1
      CLIENTES          PAGO



 En la notación de Métrica típica también se
 dispone de:

          Almacenes de datos         NOMBRE



          Dispositivos físicos     DISPOSITIVO
Diagrama de estructura.
Conexión entre módulos
 La conexión entre módulos se
 representa mediante una
 línea.
                                            A   MÓDULO QUE LLAMA
 En la figura:
    A llama a B.
                                 CONEXIÓN
    B hace su función.
    B retorna a A,
    inmediatamente después del              B   MÓDULO LLAMADO
    lugar donde se produjo la
    llamada de A a B.
 El diagrama no dice nada
 sobre el código 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.
Conexión entre módulos (II)
                                             Estructura
                           A                 repetitiva
    Estructura
    alternativa



                  B                      C

Orden de ejecución de los módulos: de
izquierda a derecha y de arriba abajo (Piattini et al. 04)
     ⇒ Según (Molina et al. 97) el orden no importa
Diagrama de estructura.
Conexión entre módulos (III)
Ejemplo típico de menú:

                     Menú login




   Procesos para          Procesos para   Procesos
  agentes externos        departamentos   Generales
Diagrama de estructura.
Comunicación entre módulos
 Los signos para llevar
 a cabo la                campo alfabético correcto            EOR


 comunicación entre
 módulos son:
                                               Obtener datos clientes




  Flags o controles             campo                                      campo correcto

                                                 EOR       campo


                           Obtener campo                                Validar campo
                             siguiente                                    alfabético
  Datos
Flags o controles

 Mediante los “flags” o controles, se puede
 representar:
   Paso de control entre módulos: un módulo comunica
   a otro módulo que ha terminado su proceso y
   traspasa al módulo llamado el control del sistema.
   Comunicación de que se ha producido un error en el
   proceso.
   Comunicación de que se puede proceder a una
   operación concreta.
Diferencias entre datos y flags

 Los datos se procesan.         Los controles sólo sirven para
                                comunicar condiciones entre
                                los módulos.
 Los datos son la información
                                Los controles indican al
 compartida por los módulos.    módulo que llama la
 La posición de la flecha       terminación EOF, o un error
 (hacia arriba o hacia abajo)   del módulo llamado, y deben ir
 indica el sentido de la        siempre en sentido
 comunicación.                  ascendente.
 Los datos tienen importancia   Los flags tienen importancia
                                en la comunicación de
 para el mundo exterior,        información en el interior; son
 están relacionados con el      los que sincronizan la
 problema.                      operativa de los módulos.
                                Los flags no se suelen mostrar
                                en los diagramas (Piattini et al.
                                04)
Representación de
parámetros
     Se pueden representar mediante tablas de interfaz (Piattini et al. 04)
    Módulo      Parámetro         Entrada   Salida         Uso           Significado
                 formal


     F(x,y)          x              Sí          No           P      Fecha nacimiento


                     y              No          Sí          M       Edad



...donde “Uso” es denotado por:
P → Procesado: a = b + 2                             C → Es usado como una variable de
                                                     Control
M → Modificado: a = 3 + b
                                                     I → El parámetro es transferido a otro
T → Transferido por el módulo llamado a otro         módulo y es modificado en este segundo
módulo que éste llama, sin modificar su valor        módulo
Diagrama de estructura.
Ejemplo (Piattini et al. 96)
Diagrama de estructura.
Ejemplo (II) (Molina et al. 97)
           ENTERO                   FIN DE
           VÁLIDO                   FICHERO


                    CONSEGUIR
                     ENTERO
                     VÁLIDO
   ENTERO                           EL ENTERO
                                    ES VÁLIDO   “CONSEGUIR ENTERO VÁLIDO”:
 FIN DE             ENTERO
 FICHERO                                        ...
                                                LEER_ENTERO( fin_fichero, entero ) ;
     LEER ENTERO                VALIDAR
      DE FICHERO                ENTERO          ...
                                                if VALIDAR_ENTERO( entero ) then
                                                         ...
                                                ...
Diagrama de estructura.
Ejemplo (III) (Molina et al. 97)
                                            EMISIÓN CHEQUES
                                                DE PAGO

                                                              NÚMERO EMPLEADO

                                                                                NOMBRE EMPLEADO
                        REGISTRO PAGO
                                        PAGO NETO JORNALERO
                                                              PAGO NETO EMPLEADO              IMPORTE PAGO
            FIN REGISTROS
                            REGISTRO PAGO JORNALERO
                                                 REGISTRO PAGO EMPLEADO

       OBTENER                   CALCULAR PAGO                 CALCULAR PAGO                 IMPRIMIR
     REGISTRO PAGO              NETO JORNALEROS                NETO EMPLEADOS              CHEQUE PAGO




                                             DEDUCCIONES NORMALES
   RETRIBUCIÓN DIARIA                                                             SUELDO BASE
                                                               PAGO BRUTO EMPLEADO
                         PAGO BRUTO JORNALERO

JORNADAS TRABAJADAS                                                                       COMPLEMENTOS
                                                                     IRPF
                                          IRPF
                 CALCULAR PAGO                         CALCULAR              CALCULAR PAGO
                BRUTO JORNALEROS                      DEDUCCIONES           BRUTO EMPLEADOS
                                                       NORMALES
Diagrama de estructura.
Ejemplo (III) (Molina et al. 97)
 program EMISION_CHEQUES ;                               procedure OBTENER_REG_PAGO ( var rp : treg_pago; var fin_reg : boolean ) ;
 type                                                    function CALCULAR_NETO_JORN ( rj : treg_jornalero ) : real ;
          treg_pago : RECORD...END ;
                                                         function CALCULAR_NETO_EMPL ( re : treg_empleado ) : real ;
          treg_jornalero : RECORD...END ;
                                                         function CALCULAR_BRUTO_JORN ( ret_diaria, jorn_trab : real ) : real ;
          treg_empleado : RECORD...END ;
 var                                                     function CALCULAR_BRUTO_EMPL ( sueldo_base, complem : real ) : real ;
         importe : real ;                                function CALCULAR_DEDUCCIONES ( pago_bruto, irpf : real ) : real ;
         importe_pago_jorn, importe_pago_empl : real ;
                                                         procedure IMPRIMIR_CHEQUE_PAGO( num_emp : integer ; nom_emp : string;
         registro_pago : treg_pago ;                     importe : real ) ;
         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.
Métodos para la
especificación de módulos

 Interfaz-función (módulo, entradas, salidas,
 función).
 Pseudo-código.
   Más preciso que el usado en análisis
   Deja cierto grado de libertad al programador
   No trata aspectos de eficiencia, a menos que estén
   directamente relacionados con requisitos
   Permite verificar la calidad del diseño
 Herramientas complementarias:
   Diagramas de flujo
   Nassi-Schneiderman
   Tablas y árboles de decisión
Estrategias de diseño

 Pasos generales a seguir para obtener un buen
 diseño a partir de un DFD de procesos primitivos
 A veces hay que refinar el DFD de partida
 Dos estrategias:
   Análisis de transformaciones
   Análisis de transacciones
 Importante: diseñar el DE de forma que:
   Los módulos de nivel superior toman las decisiones de ejecución
   (coordinan)
   Los de nivel inferior realizan la mayor parte del trabajo de
   entrada, de cálculo y de salida
Estrategias de diseño.
Pasos a seguir

 Revisar el modelo fundamental del
 sistema
 ⇒DFD procesos primitivos
    ⇒ no hace falta “crear” el DFD de procesos
     primitivos
    ⇒ se añaden procesos, si hace falta
    ⇒ recomendado, como mínimo, tener 3 niveles de
     profundidad
 Determinar si el DFD tiene características
 de transformación o de transacción
   indica expresamente la característica del DFD!
Estrategias de diseño.
Pasos a seguir (II)

  Según sea de transformación o
  transacción:
 a) Aislar el centro de la transformación,
     especificando los límites del flujo de llegada
     y de salida
     ...o bien...
 b) Identificar el centro de la transacción y las
     características del flujo de cada camino de
     acción.
       ⇒ indica expresamente los elementos
                      anteriores!
Estrategias de diseño.
Pasos a seguir (III)

 Realizar el primer corte del diagrama de
 estructuras.
 Realizar el segundo nivel de factorización.
 Refinar la estructura del programa.
 Asegurarse del trabajo realizado por el
 diseño obtenido.
Análisis de transformación
(Piattini et al. 04)
Análisis de transformación.
Primer corte del DE
Análisis de transformación.
Segundo nivel de factorización




           Finalmente, es preciso optimizar!
Análisis de transacción
(Piattini et al. 04)
Análisis de transacción.
Primer nivel de factorización
Análisis de transacción.
Segundo nivel de factorización




            Finalmente, es preciso optimizar!
Análisis de transformación.
Ejemplo (Guía de técnicas de Métrica 2.1, p.144)
Análisis de transformación.
Ejemplo (II)
Análisis de transacciones.
Ejemplo (Guía de técnicas de Métrica 2.1, p.148)
Análisis de transacciones.
Ejemplo (II)
Centros de transacción
implícitos
Normalmente el esquema de transacción
no es tan claro:
 ⇒ el proceso de transacción no aparece
        explícitamente en el DFD

  ⇒ Solución: examinar el diagrama de
    contexto y la lista de eventos para
determinar los tipos de transacciones en el
                  sistema
Centros de transacción
  implícitos (II)
                                                         P

             datos-venta
                                                   Realizar venta                   (Molina et al. 97)
                                                                                    p.172
DPTO. SERVICIO A
   CLIENTES
                           datos-devolución
                                                                P
                                                        Realizar devolución
                                                                              ...
                                              P
                                         Admitir pago
              datos-pago




                                                             Seleccione la opción deseada:
                                                             1. Realizar venta
                                                             2. Realizar devolución
                                                             3. Admitir pago
Estrategia de diseño.
Pasos a seguir (IV) (Molina et al. 97) p.169

   Análisis de transacciones
     Encontrar las transacciones en el DFD
   Análisis de transformaciones
     DE para cada transacción
   Análisis de transacciones
     Componer los DE en uno solo, usando un
     centro de transacciones
     DE para un menú
Métricas de calidad
estructural

 Mayor calidad estructural ⇒
      mantenimiento más fácil
  Extensibilidad ++
  Reutilización ++
 Dos métricas:
  Acoplamiento
  Cohesión
Acoplamiento

 Grado de interdependencia entre
 módulos.
 Depende de la forma de interactuar entre los módulos:
 p.ej. nº / tipo de parámetros que se intercambian.
 Objetivo: minimizar el acoplamiento (CAJA NEGRA).
            modificabilidad++, comprensión++, reutilización++
 Ventajas de un bajo acoplamiento:
   Menos oportunidades para el “efecto onda”.
   El cambio realizado en un módulo afecta lo menos posible a
   otros módulos.
   Mientras se esté manteniendo un módulo, es deseable no
   necesitar preocuparse de los detalles internos de cualquier otro
   módulo.
Complejidad de la interfaz

 Acoplamiento → Complejidad de la
 interfaz
 P.ej. (Molina et al. 97)
   1.   CALL   LONGITUD(   X1, Y1, X2, Y2, D )
   2.   CALL   LONGITUD(   ORIGEN, DESTINO, D )
   3.   CALL   LONGITUD(   PuntosX, PuntosY, D )
   4.   CALL   LONGITUD(   LINEA, D )
   5.   CALL   LONGITUD(   TABLALINEA )
   6.   CALL   LONGITUD.
⇒ ¿Qué interfaz es más fácil de entender?
Complejidad de la interfaz
(II)

 Depende de:
  Cantidad de información que debe
  comprenderse (como nº parámetros)
  Accesibilidad a esa información
  Indirección ⇒ complejidad++
  Información local ⇒ complejidad--
  Información en forma estándar ⇒ complejidad--
  Si el parámetro intenta controlar la lógica del módulo
  que lo recibe ⇒ complejidad++
Niveles de acoplamiento
Stevens, Myers y Constantine 74


  Acoplamiento Normal                   MEJOR (- Acopl.)
    De datos
    Por estampado
    De control                        Límite de
                                      aceptación
  Acoplamiento común
  Acoplamiento por
                                        PEOR (+ Acopl.)
  contenido
   Si dos módulos 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 comunicación básica 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   Obtener DNI Cliente



 en diseño estructurado
 Sólo debe haber parámetros
 con sentido                                 DNI cli




 En la medida de lo posible,    Leer DNI Cliente



 minimizar el número de
 parámetros
Acoplamiento normal por
estampado

 Introduce indirección
                                    Obtener DNI Cliente

 No es deseable si el módulo que
 recibe el registro sólo necesita
 parte de los datos.
 Pasar campos innecesarios
                                                      cli



 oscurece el diseño y reduce la        Leer Cliente


 flexibilidad
 No crear registros artificiales,
 empaquetando datos no
 relacionados
Acoplamiento normal de
control

 Deseable sólo si los flags de control son
 descriptivos
                      campo alfabético correcto            EOR



                                           Obtener datos clientes




                            campo                                      campo correcto

                                             EOR       campo


                       Obtener campo                                Validar campo
                         siguiente                                    alfabético
Acoplamiento normal de
control (II)
 No es deseable si el control tiene           Obtener trans y registro


 sentido descendente:
    Un módulo controla a otro y
    no son realmente                  Flag de selecc
    independientes                                                   reg trans   reg maestro



    El módulo subordinado tiene                   Control sist E/S

    poca cohesión
    Solución: sustituir el módulo
    subordinado por tantos                         Flag de selecc:
    módulos como sea necesario,
    de forma que sólo                              1.      Obtiene RT
    intercambien datos                             2.      Obtiene RM
                                                   3.      Obtiene RT y RM
Acoplamiento normal de
control (III)

 Peor es si hay “inversión de autoridad”
    (Molina et al. 97) p.66

 ⇒ el módulo subordinado intenta controlar
         al módulo padre
                                    Formar palabras




                                                  reg
                                                         otro reg


                                          Encontrar palabras

                              ...
Niveles de acoplamiento (III)

 Acoplamiento común.         Más de dos módulos hacen
 referencia a un área común de datos.
   Dos módulos pueden estar acoplados globalmente y no estar
   conectados mediante una llamada.
   Es desaconsejable, dado que (Molina et al. 97):
      Un error de programación en un módulo que usa puede aparecer
      en otros módulos que compartan esa misma área global.
      Reutilización--
      Puede ser difícil averiguar de dónde procede información
      depositada en el área global.
      Se pueden incluso usar para depositar información de distinta
      naturaleza.
      Aplicaciones difíciles de mantener: es difícil saber qué datos son
      usados por un módulo.
Niveles de acoplamiento (IV)

 Acoplamiento de contenido. Ocurre cuando un
 módulo necesita o accede a una parte de otro,
 rompiendo la jerarquía de funcionalidad de la estructura.
 En la mayoría de los casos sólo se puede dar en
 ensamblador

         A              Hay que evitarlo
                        descomponiendo el módulo al
                        que se accede o duplicando esa
         B              parte de código en el módulo
                        que llama
Datos vagabundos               (Molina et al. 97) p.62


Deben evitarse también
   los datos vagabundos
   (que a veces están
   asociados al acoplamiento
   normal)

Posibles soluciones:
a) Reorganizar el
   diagrama
b) Introducir variables
   globales
Datos vagabundos (II)

El dato
vagabundo
“registro
maestro” se ha
eliminado
reorganizando el
DE
Cohesión

 Medida de la relación funcional entre los
 elementos de un módulo.
 Un módulo coherente sólo debe hacer una cosa.
 Un módulo coherente ejecuta una tarea bien definida en
 un programa y requiere poca interacción con otros
 procedimientos que se ejecutan en otras partes del
 programa.
 Objetivo: módulos con alta cohesión.
 La escala de cohesión no es lineal:
  una cohesión baja es mucho peor que una de grado
    medio,
  una de grado medio es casi tan buena como una alta.
Cohesión y acoplamiento
Son criterios inversamente relacionados:   (Molina et al. 97)



        AULAS                 APARCAMIENTO

       COCINAS                  COMEDOR


      COMEDOR                 APARCAMIENTO

       COCINAS                     AULAS
Niveles de cohesión
Stevens, Myers y Constantine 74

                                         (CAJA NEGRA)
  Funcional             Mayor cohesión
  Secuencial
  Comunicacional
  Procedural                             (CAJA GRIS)

  Temporal
                                            (CAJA
  Lógica       Límite de
               aceptación
                                          TRANSPA-
  Coincidental           Peor cohesión     RENTE)
Niveles de cohesión (II)

 Funcional:        se realiza una sola función.

 Secuencial:      la salida de una tarea sirve como entrada a la siguiente:
 varios módulos con cohesión funcional que se pasan un dato
 Comunicacional:         actividades que comparten datos (bien los
 mismos datos de entrada o de salida).
 Procedural:         actividades diferentes, en las cuales el flujo de ejecución
 fluye de una a la siguiente.
 Temporal:         actividades diferentes relacionadas por el tiempo.

 Lógica:     actividades con la misma categoría lógica general, que se
 seleccionan fuera del módulo.
 Coincidental o casual:             actividades diferentes sin relaciones
 significativas entre ellas.
Niveles de cohesión (III)
Ejemplos:
  Funcional:
    funciones matemáticas 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:
    Módulo “Detectar error, corregirlo y reanudar la ejecución”
                         ⇒¿Porqué no es cohesión secuencial?
  Temporal:
    módulos de inicialización y terminación
  Lógica:
    rutina general de E/S
Determinación de la
cohesión de un módulo                                  (Molina et al. 97)




 ¿Realiza el módulo una sola          SÍ
 función?                                       1. FUNCIONAL.

    NO                 ¿Es importante      SÍ   2. SECUENCIAL.
          POR DATOS
                        la secuencia?
                                           NO   3. COMUNICACIONAL
    ¿Cómo están
  relacionadas las     POR FLUJO DE
 actividades dentro    CONTROL
                                           SÍ   4. PROCEDURAL.
    del módulo?        ¿Es importante
                        la secuencia?           5. TEMPORAL.
               NINGUNA DE                  NO
               LAS DOS
                                           SÍ   6. LÓGICA.
                  ¿Son las actividades
                 de la misma categoría
                                           NO 7. CASUAL.
                        general?
Heurísticas de diseño
estructural
 IMPORTANTE: Los módulos superiores deben coordinar,
 y los inferiores realizar las tareas.
 Reducir el nº de parámetros que intercambian los
 módulos tanto como sea posible.
 Nunca pasar registros que contengan muchos campos
 cuando en realidad el módulo sólo necesita algunos.
 No agrupar parámetros sin relación en un registro.
 Evitar que un módulo hijo dé órdenes al padre.
 En la medida de lo posible, no usar variables globales.
 Se puede parar la descomposición cuando la interfaz con
 un módulo sea tan complicada como el módulo mismo.
Heurísticas de diseño
estructural
 Debe evitarse la situación en que un módulo llama a
 muchos otros (puede ser difícil de entender).
 Normalmente sucede cuando no se tiene en cuenta los niveles
 intermedios. Solución: combinar funciones subordinadas en una
 sola.
 Excepción: cuando el módulo 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 módulos subordinados en un módulo de
 nivel superior.
Heurísticas de diseño
estructural (Molina et al. 97) cap. 6

  Factorizar funciones cuando sea posible.
  Inicializar las variables lo más tarde posible en
  el diagrama, cerca de las funciones a realizar.
  Evitar la disgregación de decisiones:
                                 La parte de
                                 reconocimiento de
                                 la condición se
                                 separa de la parte
                                 de ejecución
                                 ⇒ ¿Cuál puede ser
                                 un síntoma?
Heurísticas de diseño
estructural (II) (Molina et al. 97) cap. 6
  Evitar sistemas dirigidos por la entrada física (sistemas
  que no procesan suficientemente la entrada).
 Lo deseable es:                         Lógico




LÓGICO
                                ...

FÍSICO
Heurísticas de diseño
estructural (III) (Molina et al. 97) cap. 6
  Ejemplo de sistema dirigido por la entrada física


                                          El acoplamiento suele
                                        ser alto.
                                           Ya que los módulos
                                        superiores en la
                                        jerarquía tratan con la
                                        entrada física, cualquier
                                        cambio en la
                                        especificación de ésta
                                        afectará a gran parte del
                                        sistema.
Heurísticas de diseño
estructural (IV) (Molina et al. 97) cap. 6

  Edición de los datos de entrada
     Validar sintaxis antes que semántica
     Validar lo sencillo antes que lo cruzado
  Ejemplo: “nombre-ciudad” y “cod-postal”
   Validar:
   1º sintaxis
     nombre-ciudad → caracteres alfabéticos
     cod-postal → numérico
   2º Verificar que ambos datos existen
   3º Validación cruzada: cod-postal ∈ nombre-ciudad
Heurísticas de diseño
estructural (V) (Molina et al. 97) cap. 6
 Información           Dos soluciones no válidas:
 de los errores:
   ¿Qué módulo
   llama al módulo
   que escribe
   mensajes de
   error?
Heurísticas de diseño
estructural (VI) (Molina et al. 97) cap. 6
   Solución válida:        ¿Dónde se pone el
                            texto de los
                            mensajes de error?
                               Diseminados por el
                               sistema
                               Dentro de un único
                               módulo

Mais conteúdo relacionado

Mais procurados

Monografia pipeline
Monografia pipelineMonografia pipeline
Monografia pipelinevaneyui
 
Sistemas distribuidos
Sistemas distribuidosSistemas distribuidos
Sistemas distribuidosAsis Matos
 
Aplicaciones prácticas de las arquitecturas orientadas al servicio
Aplicaciones prácticas de las arquitecturas orientadas al servicioAplicaciones prácticas de las arquitecturas orientadas al servicio
Aplicaciones prácticas de las arquitecturas orientadas al servicioGrial - University of Salamanca
 
Vistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareVistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareRoberth Loaiza
 
Sistemas operativos distribuidos
Sistemas operativos distribuidosSistemas operativos distribuidos
Sistemas operativos distribuidossergiooney
 
diagrama de despliegue
diagrama de desplieguediagrama de despliegue
diagrama de despliegueAlberto Zurita
 
Cuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwareCuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwarepaoaboytes
 
Uml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoUml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoMarvin Zumbado
 
Presentacion sistemas distribuidos
Presentacion sistemas distribuidosPresentacion sistemas distribuidos
Presentacion sistemas distribuidosYohany Acosta
 
Tabla comparativa- metodologías de desarrollo
Tabla comparativa-  metodologías de desarrolloTabla comparativa-  metodologías de desarrollo
Tabla comparativa- metodologías de desarrolloitsarellano
 
Metodologías de desarrollo ágiles: Scrum, XP
Metodologías de desarrollo ágiles: Scrum, XPMetodologías de desarrollo ágiles: Scrum, XP
Metodologías de desarrollo ágiles: Scrum, XPejordi
 
Presentacion herramientas CASE
Presentacion herramientas CASEPresentacion herramientas CASE
Presentacion herramientas CASEdavidsande
 

Mais procurados (20)

Análisis estructurado
Análisis estructuradoAnálisis estructurado
Análisis estructurado
 
Monografia pipeline
Monografia pipelineMonografia pipeline
Monografia pipeline
 
Sistemas distribuidos
Sistemas distribuidosSistemas distribuidos
Sistemas distribuidos
 
Ciclo Vida del Software
Ciclo Vida del SoftwareCiclo Vida del Software
Ciclo Vida del Software
 
Aplicaciones prácticas de las arquitecturas orientadas al servicio
Aplicaciones prácticas de las arquitecturas orientadas al servicioAplicaciones prácticas de las arquitecturas orientadas al servicio
Aplicaciones prácticas de las arquitecturas orientadas al servicio
 
Vistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de SoftwareVistas Arquitectonicas Ingenieria de Software
Vistas Arquitectonicas Ingenieria de Software
 
Presentacion PL/SQL
Presentacion PL/SQLPresentacion PL/SQL
Presentacion PL/SQL
 
Sistemas operativos distribuidos
Sistemas operativos distribuidosSistemas operativos distribuidos
Sistemas operativos distribuidos
 
Presentación poo
Presentación pooPresentación poo
Presentación poo
 
diagrama de despliegue
diagrama de desplieguediagrama de despliegue
diagrama de despliegue
 
Diagrama de Colaboración
Diagrama de ColaboraciónDiagrama de Colaboración
Diagrama de Colaboración
 
Cuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwareCuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de software
 
Metodologias rup
Metodologias rupMetodologias rup
Metodologias rup
 
Modelo en cascada
Modelo en cascadaModelo en cascada
Modelo en cascada
 
Diagramas componentes
Diagramas componentesDiagramas componentes
Diagramas componentes
 
Uml lenguaje unificado de modelado
Uml lenguaje unificado de modeladoUml lenguaje unificado de modelado
Uml lenguaje unificado de modelado
 
Presentacion sistemas distribuidos
Presentacion sistemas distribuidosPresentacion sistemas distribuidos
Presentacion sistemas distribuidos
 
Tabla comparativa- metodologías de desarrollo
Tabla comparativa-  metodologías de desarrolloTabla comparativa-  metodologías de desarrollo
Tabla comparativa- metodologías de desarrollo
 
Metodologías de desarrollo ágiles: Scrum, XP
Metodologías de desarrollo ágiles: Scrum, XPMetodologías de desarrollo ágiles: Scrum, XP
Metodologías de desarrollo ágiles: Scrum, XP
 
Presentacion herramientas CASE
Presentacion herramientas CASEPresentacion herramientas CASE
Presentacion herramientas CASE
 

Destaque

Sesion 2 2 conceptos claves de analisis y diseno
Sesion 2 2 conceptos claves de analisis y disenoSesion 2 2 conceptos claves de analisis y diseno
Sesion 2 2 conceptos claves de analisis y disenoJulio Pari
 
Diseño de Software
Diseño de SoftwareDiseño de Software
Diseño de SoftwareUPT
 
Gonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De DisenoGonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De DisenoSpimy
 
DiseñO Del Software E IngenieríA Del Software
DiseñO Del Software E IngenieríA Del SoftwareDiseñO Del Software E IngenieríA Del Software
DiseñO Del Software E IngenieríA Del Softwarelcastillo110
 
Conceptos POO PV
Conceptos POO PVConceptos POO PV
Conceptos POO PVDavid Clara
 
Fundamentos del diseño
Fundamentos del diseñoFundamentos del diseño
Fundamentos del diseñoflacorpsemuh
 
7 Principios de Diseño para un software amigable
7 Principios de Diseño para un software amigable7 Principios de Diseño para un software amigable
7 Principios de Diseño para un software amigableJavier Gala
 
Fundamentos del diseño
Fundamentos del diseñoFundamentos del diseño
Fundamentos del diseñoOmar Duarte
 
Fundamento Diseño, Color, Principios Diseño Textil
Fundamento Diseño, Color, Principios Diseño TextilFundamento Diseño, Color, Principios Diseño Textil
Fundamento Diseño, Color, Principios Diseño TextilCesar Coutiño
 
FUNDAMENTOS DEL DISEÑO: DISEÑO Y FORMA
FUNDAMENTOS DEL DISEÑO: DISEÑO Y FORMAFUNDAMENTOS DEL DISEÑO: DISEÑO Y FORMA
FUNDAMENTOS DEL DISEÑO: DISEÑO Y FORMAguest950130
 
Fundamentos del diseño 2 unidad uno
Fundamentos del diseño 2 unidad unoFundamentos del diseño 2 unidad uno
Fundamentos del diseño 2 unidad unomirkamarcelamoreno
 
Unidad 1 conceptos del diseño
Unidad 1 conceptos del diseñoUnidad 1 conceptos del diseño
Unidad 1 conceptos del diseñoSarai Rojas Aguiar
 
¿Qué es diseño? Para entender el Diseño Centrado en el Usuario
¿Qué es diseño? Para entender el Diseño Centrado en el Usuario¿Qué es diseño? Para entender el Diseño Centrado en el Usuario
¿Qué es diseño? Para entender el Diseño Centrado en el UsuarioJuan-Francisco Reyes
 

Destaque (20)

Sesion 2 2 conceptos claves de analisis y diseno
Sesion 2 2 conceptos claves de analisis y disenoSesion 2 2 conceptos claves de analisis y diseno
Sesion 2 2 conceptos claves de analisis y diseno
 
Diseño de Software
Diseño de SoftwareDiseño de Software
Diseño de Software
 
Gonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De DisenoGonzalorojas 12 Uml, Patrones De Diseno
Gonzalorojas 12 Uml, Patrones De Diseno
 
DiseñO Del Software E IngenieríA Del Software
DiseñO Del Software E IngenieríA Del SoftwareDiseñO Del Software E IngenieríA Del Software
DiseñO Del Software E IngenieríA Del Software
 
Diseño de Software
Diseño de SoftwareDiseño de Software
Diseño de Software
 
Conceptos POO PV
Conceptos POO PVConceptos POO PV
Conceptos POO PV
 
Diseño de software
Diseño de softwareDiseño de software
Diseño de software
 
Lista, pilas y colas
Lista, pilas y colasLista, pilas y colas
Lista, pilas y colas
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 
Análisis de objeto
Análisis de objetoAnálisis de objeto
Análisis de objeto
 
Fundamentos del diseño
Fundamentos del diseñoFundamentos del diseño
Fundamentos del diseño
 
Fundamentos de diseño
Fundamentos de diseñoFundamentos de diseño
Fundamentos de diseño
 
7 Principios de Diseño para un software amigable
7 Principios de Diseño para un software amigable7 Principios de Diseño para un software amigable
7 Principios de Diseño para un software amigable
 
Fundamentos del diseño
Fundamentos del diseñoFundamentos del diseño
Fundamentos del diseño
 
Fundamento Diseño, Color, Principios Diseño Textil
Fundamento Diseño, Color, Principios Diseño TextilFundamento Diseño, Color, Principios Diseño Textil
Fundamento Diseño, Color, Principios Diseño Textil
 
FUNDAMENTOS DEL DISEÑO: DISEÑO Y FORMA
FUNDAMENTOS DEL DISEÑO: DISEÑO Y FORMAFUNDAMENTOS DEL DISEÑO: DISEÑO Y FORMA
FUNDAMENTOS DEL DISEÑO: DISEÑO Y FORMA
 
Fundamentos del diseño 2 unidad uno
Fundamentos del diseño 2 unidad unoFundamentos del diseño 2 unidad uno
Fundamentos del diseño 2 unidad uno
 
Unidad 1 conceptos del diseño
Unidad 1 conceptos del diseñoUnidad 1 conceptos del diseño
Unidad 1 conceptos del diseño
 
¿Qué es diseño? Para entender el Diseño Centrado en el Usuario
¿Qué es diseño? Para entender el Diseño Centrado en el Usuario¿Qué es diseño? Para entender el Diseño Centrado en el Usuario
¿Qué es diseño? Para entender el Diseño Centrado en el Usuario
 

Semelhante a Capitulo04

Diseño estructurado y las técnicas que lo caracterizan
Diseño estructurado y las técnicas que lo caracterizanDiseño estructurado y las técnicas que lo caracterizan
Diseño estructurado y las técnicas que lo caracterizanJonathan Bastidas
 
Significado dentro del ciclo de vida de desarrollo de sistemas
Significado dentro del ciclo de vida de desarrollo de sistemasSignificado dentro del ciclo de vida de desarrollo de sistemas
Significado dentro del ciclo de vida de desarrollo de sistemasJuan Pablo Bustos Thames
 
Significado dentro del ciclo de vida de desarrollo de sistemas
Significado dentro del ciclo de vida de desarrollo de sistemasSignificado dentro del ciclo de vida de desarrollo de sistemas
Significado dentro del ciclo de vida de desarrollo de sistemasJuan Pablo Bustos Thames
 
Análisis del Proyecto de Software
Análisis del Proyecto de SoftwareAnálisis del Proyecto de Software
Análisis del Proyecto de SoftwareMaricela Ramirez
 
Desarrollo rápido de aplicaciones web
Desarrollo rápido de aplicaciones webDesarrollo rápido de aplicaciones web
Desarrollo rápido de aplicaciones webSantiago Acurio
 
Ra semana 13 1
Ra semana 13 1Ra semana 13 1
Ra semana 13 1victdiazm
 
Ra semana 13 2
Ra semana 13 2Ra semana 13 2
Ra semana 13 2victdiazm
 
presentacion hebelyn
presentacion hebelynpresentacion hebelyn
presentacion hebelynHebelynBravo
 
Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015Lucero Mtz
 
Tipos de modelos de procesos
Tipos de modelos de procesosTipos de modelos de procesos
Tipos de modelos de procesosEIYSC
 
Diseno de la arquitectura
Diseno de la arquitecturaDiseno de la arquitectura
Diseno de la arquitecturaFatima Cham
 
Powerpoint
PowerpointPowerpoint
PowerpointChugua
 
El diseño orientado a flujo de objetos
El  diseño orientado a flujo  de objetosEl  diseño orientado a flujo  de objetos
El diseño orientado a flujo de objetoshome
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de softwareLiliana Pacheco
 
Ingenieria de software - Unidad 3 arquitecturas de software
Ingenieria de software - Unidad 3 arquitecturas de softwareIngenieria de software - Unidad 3 arquitecturas de software
Ingenieria de software - Unidad 3 arquitecturas de softwareJosé Antonio Sandoval Acosta
 
Diseño del software
Diseño del softwareDiseño del software
Diseño del softwareduberlisg
 

Semelhante a Capitulo04 (20)

Unidad 4. diseno del sistema
Unidad 4. diseno del sistemaUnidad 4. diseno del sistema
Unidad 4. diseno del sistema
 
Diseño estructurado y las técnicas que lo caracterizan
Diseño estructurado y las técnicas que lo caracterizanDiseño estructurado y las técnicas que lo caracterizan
Diseño estructurado y las técnicas que lo caracterizan
 
Significado dentro del ciclo de vida de desarrollo de sistemas
Significado dentro del ciclo de vida de desarrollo de sistemasSignificado dentro del ciclo de vida de desarrollo de sistemas
Significado dentro del ciclo de vida de desarrollo de sistemas
 
Significado dentro del ciclo de vida de desarrollo de sistemas
Significado dentro del ciclo de vida de desarrollo de sistemasSignificado dentro del ciclo de vida de desarrollo de sistemas
Significado dentro del ciclo de vida de desarrollo de sistemas
 
1127082.ppt
1127082.ppt1127082.ppt
1127082.ppt
 
Diseño de sistemas
Diseño de sistemasDiseño de sistemas
Diseño de sistemas
 
Análisis del Proyecto de Software
Análisis del Proyecto de SoftwareAnálisis del Proyecto de Software
Análisis del Proyecto de Software
 
Desarrollo rápido de aplicaciones web
Desarrollo rápido de aplicaciones webDesarrollo rápido de aplicaciones web
Desarrollo rápido de aplicaciones web
 
Ra semana 13 1
Ra semana 13 1Ra semana 13 1
Ra semana 13 1
 
Arquitecturas de software
Arquitecturas de softwareArquitecturas de software
Arquitecturas de software
 
Ra semana 13 2
Ra semana 13 2Ra semana 13 2
Ra semana 13 2
 
presentacion hebelyn
presentacion hebelynpresentacion hebelyn
presentacion hebelyn
 
Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015Apuntes ing-sof-unidad-4-1-2015
Apuntes ing-sof-unidad-4-1-2015
 
Tipos de modelos de procesos
Tipos de modelos de procesosTipos de modelos de procesos
Tipos de modelos de procesos
 
Diseno de la arquitectura
Diseno de la arquitecturaDiseno de la arquitectura
Diseno de la arquitectura
 
Powerpoint
PowerpointPowerpoint
Powerpoint
 
El diseño orientado a flujo de objetos
El  diseño orientado a flujo  de objetosEl  diseño orientado a flujo  de objetos
El diseño orientado a flujo de objetos
 
Arquitectura de software
Arquitectura de softwareArquitectura de software
Arquitectura de software
 
Ingenieria de software - Unidad 3 arquitecturas de software
Ingenieria de software - Unidad 3 arquitecturas de softwareIngenieria de software - Unidad 3 arquitecturas de software
Ingenieria de software - Unidad 3 arquitecturas de software
 
Diseño del software
Diseño del softwareDiseño del software
Diseño del software
 

Capitulo04

  • 1. Fundamentos de Ingeniería del Software Capítulo 4. Diseño
  • 2. “Hay dos formas de realizar un diseño: 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
  • 3. Diseño. Estructura El proceso de diseño. Modelos de diseño. Diseño estructurado. Diagramas de estructura. Estrategias de diseño: • Análisis de transformaciones. • Análisis de transacciones. Métricas de calidad estructural. Acoplamiento. Cohesión. Heurísticas de diseño.
  • 4. Diseño. Bibliografía (Piattini et al. 96) (Piattini et al. 04) Capítulo 8. Apartado 8.1. (Molina et al. 97) A. Molina, P. Letelier, P.Sánchez, J. Sánchez. “Metodología y Tecnología de la Programación”. Servicio de Publicaciones. UPV. 1997. (Pressman 06) Capítulo 9 (resumido) y aptdo. 10.6. (Pressman 02) Capítulo 13 y aptdos. 14.5 a 14.8. (MAP 95) Ministerio de Administraciones Públicas. Guía de Técnicas de Métrica v.2.1. 1995. (MAP 01) Guía de técnicas y prácticas de Métrica v.3. http://www.map.es/csi/metrica3 (Page-Jones 88) M. Page-Jones. “The Practical Guide to Structured Systems Design”. Yourdon Press. 1988.
  • 5. El proceso de diseño “El proceso de aplicar distintas técnicas y principios con el propósito de definir un dispositivo, un proceso o un sistema con suficiente detalle como para permitir su realización física”. Proceso iterativo a través del cual se traducen los requisitos en una representación del software.
  • 6. El proceso de diseño (II) ERS Análisis (Qué) Lenguaje comprensible por el usuario E-R DFD Diseño de alto nivel Enfoque Organización (arquitectónico) Enfoque de lógica funcional datos Arquitectura de Modelo lógico de datos procesos Diseño (Cómo) Estructura detallada: Modelo físico de datos programas y módulos Diseño de bajo nivel Decisiones concretas: (detallado) organización y Esquema de BD Cuadernos de rendimiento y ficheros carga Implementación Codificación y Lenguaje comprensible (Piattini et al. 04) pruebas por la máquina
  • 7. El proceso de diseño (III) Diseño de datos. Transforma el modelo del dominio de la información del análisis en las estructuras de datos necesarias para la implementación. Diseño arquitectónico. Estructura modular del programa/aplicación. Diseño de interfaz. Interfaces del sw. con otros sistemas y con los usuarios. Diseño procedimental. Descripción procedimental de los componentes del sw.
  • 8. Modelos de análisis y de diseño (Yourdon 93) MODELO ESENCIAL (LÓGICO) En la última etapa del análisis se ha Se le asignan establecido el límite algunos de automatización del procesos sistema lógicos Se le asignan algunos almacenes MAINFRAME Línea de telecomunicaciones MODELO DE PROCESADORES CPU REMOTA TAREA 1 TAREA 2 TAREA 3 MODELO DE TAREAS Comunicación entre tareas Módulo A (a través del S.O.) MODELO DE PROGRAMA Módulo B Módulo C Módulo D
  • 9. Asignación de procesos y almacenes a procesadores (Yourdon 93) Asignado al procesador 1 Nótese cómo este almacén podrá estar replicado en cada procesador Asignado al procesador 2
  • 10. Diseño estructurado Objetivos: Desarrollar la estructura modular del programa Definir las relaciones entre módulos Técnica ppal.: Diagrama de Estructura. Documentación de partida: DFDs Estrategias de diseño: Análisis de transformaciones Análisis de transacciones
  • 11. Diseño 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 lógico de datos del sistema.
  • 12. Diseño estructurado (II) Tareas a realizar: Determinar qué módulos implantarán los procesos terminales (primitivos) obtenidos en el análisis. Organizar la estructura de estos módulos y definir las conexiones entre los mismos. Describir el pseudocódigo para cada módulo. Se basa en: abstracción modularidad encapsulamiento y ocultamiento de información No confundir con programación estructurada.
  • 13. Diagrama de estructura (Diagrama de estructura de cuadros de Constantine) Diseño arquitectónico del sistema: Diagrama de módulos funcionales Identifica qué módulos se necesitan, así como sus inputs/outputs (caja negra) Refleja la comunicación de datos y control y la jerarquía entre módulos Diagrama de estructura: Módulos Conexiones Comunicaciones
  • 14. Diagrama de estructura. Módulo “Aquella parte de código que se puede llamar” (Page- Jones 88). Representa un programa, subprograma, procedimiento, función o rutina, dependiendo del lenguaje de implementación que se vaya a utilizar. El diseño estructurado NO impone la restricción de que un módulo tenga que ser compilado independientemente. Admite parámetros de llamada y retorna algún valor, si es preciso. Tamaño ideal: 40-50 líneas ¡pero hay muchas opiniones! Se representa en el diagrama mediante un rectángulo.
  • 15. Diagrama de estructura. Representación de módulos MÓDULO PREDEFINIDO MÓDULO CONECTOR OBTENER IMPRIMIR DATOS CHEQUE DE 1 CLIENTES PAGO En la notación de Métrica típica también se dispone de: Almacenes de datos NOMBRE Dispositivos físicos DISPOSITIVO
  • 16. Diagrama de estructura. Conexión entre módulos La conexión entre módulos se representa mediante una línea. A MÓDULO QUE LLAMA En la figura: A llama a B. CONEXIÓN B hace su función. B retorna a A, inmediatamente después del B MÓDULO LLAMADO lugar donde se produjo la llamada de A a B. El diagrama no dice nada sobre el código de A ni sobre el de B, lo único que sabe es que en A existe una sentencia del tipo CALL B.
  • 17. Diagrama de estructura. Conexión entre módulos (II) Estructura A repetitiva Estructura alternativa B C Orden de ejecución de los módulos: de izquierda a derecha y de arriba abajo (Piattini et al. 04) ⇒ Según (Molina et al. 97) el orden no importa
  • 18. Diagrama de estructura. Conexión entre módulos (III) Ejemplo típico de menú: Menú login Procesos para Procesos para Procesos agentes externos departamentos Generales
  • 19. Diagrama de estructura. Comunicación entre módulos Los signos para llevar a cabo la campo alfabético correcto EOR comunicación entre módulos son: Obtener datos clientes Flags o controles campo campo correcto EOR campo Obtener campo Validar campo siguiente alfabético Datos
  • 20. Flags o controles Mediante los “flags” o controles, se puede representar: Paso de control entre módulos: un módulo comunica a otro módulo que ha terminado su proceso y traspasa al módulo llamado el control del sistema. Comunicación de que se ha producido un error en el proceso. Comunicación de que se puede proceder a una operación concreta.
  • 21. Diferencias entre datos y flags Los datos se procesan. Los controles sólo sirven para comunicar condiciones entre los módulos. Los datos son la información Los controles indican al compartida por los módulos. módulo que llama la La posición de la flecha terminación EOF, o un error (hacia arriba o hacia abajo) del módulo llamado, y deben ir indica el sentido de la siempre en sentido comunicación. ascendente. Los datos tienen importancia Los flags tienen importancia en la comunicación de para el mundo exterior, información en el interior; son están relacionados con el los que sincronizan la problema. operativa de los módulos. Los flags no se suelen mostrar en los diagramas (Piattini et al. 04)
  • 22. Representación de parámetros Se pueden representar mediante tablas de interfaz (Piattini et al. 04) Módulo Parámetro Entrada Salida Uso Significado formal F(x,y) x Sí No P Fecha nacimiento y No Sí M Edad ...donde “Uso” es denotado por: P → Procesado: a = b + 2 C → Es usado como una variable de Control M → Modificado: a = 3 + b I → El parámetro es transferido a otro T → Transferido por el módulo llamado a otro módulo y es modificado en este segundo módulo que éste llama, sin modificar su valor módulo
  • 23. Diagrama de estructura. Ejemplo (Piattini et al. 96)
  • 24. Diagrama de estructura. Ejemplo (II) (Molina et al. 97) ENTERO FIN DE VÁLIDO FICHERO CONSEGUIR ENTERO VÁLIDO ENTERO EL ENTERO ES VÁLIDO “CONSEGUIR ENTERO VÁLIDO”: FIN DE ENTERO FICHERO ... LEER_ENTERO( fin_fichero, entero ) ; LEER ENTERO VALIDAR DE FICHERO ENTERO ... if VALIDAR_ENTERO( entero ) then ... ...
  • 25. Diagrama de estructura. Ejemplo (III) (Molina et al. 97) EMISIÓN CHEQUES DE PAGO NÚMERO EMPLEADO NOMBRE EMPLEADO REGISTRO PAGO PAGO NETO JORNALERO PAGO NETO EMPLEADO IMPORTE PAGO FIN REGISTROS REGISTRO PAGO JORNALERO REGISTRO PAGO EMPLEADO OBTENER CALCULAR PAGO CALCULAR PAGO IMPRIMIR REGISTRO PAGO NETO JORNALEROS NETO EMPLEADOS CHEQUE PAGO DEDUCCIONES NORMALES RETRIBUCIÓN DIARIA SUELDO BASE PAGO BRUTO EMPLEADO PAGO BRUTO JORNALERO JORNADAS TRABAJADAS COMPLEMENTOS IRPF IRPF CALCULAR PAGO CALCULAR CALCULAR PAGO BRUTO JORNALEROS DEDUCCIONES BRUTO EMPLEADOS NORMALES
  • 26. Diagrama de estructura. Ejemplo (III) (Molina et al. 97) program EMISION_CHEQUES ; procedure OBTENER_REG_PAGO ( var rp : treg_pago; var fin_reg : boolean ) ; type function CALCULAR_NETO_JORN ( rj : treg_jornalero ) : real ; treg_pago : RECORD...END ; function CALCULAR_NETO_EMPL ( re : treg_empleado ) : real ; treg_jornalero : RECORD...END ; function CALCULAR_BRUTO_JORN ( ret_diaria, jorn_trab : real ) : real ; treg_empleado : RECORD...END ; var function CALCULAR_BRUTO_EMPL ( sueldo_base, complem : real ) : real ; importe : real ; function CALCULAR_DEDUCCIONES ( pago_bruto, irpf : real ) : real ; importe_pago_jorn, importe_pago_empl : real ; procedure IMPRIMIR_CHEQUE_PAGO( num_emp : integer ; nom_emp : string; registro_pago : treg_pago ; importe : real ) ; 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.
  • 27. Métodos para la especificación de módulos Interfaz-función (módulo, entradas, salidas, función). Pseudo-código. Más preciso que el usado en análisis Deja cierto grado de libertad al programador No trata aspectos de eficiencia, a menos que estén directamente relacionados con requisitos Permite verificar la calidad del diseño Herramientas complementarias: Diagramas de flujo Nassi-Schneiderman Tablas y árboles de decisión
  • 28. Estrategias de diseño Pasos generales a seguir para obtener un buen diseño a partir de un DFD de procesos primitivos A veces hay que refinar el DFD de partida Dos estrategias: Análisis de transformaciones Análisis de transacciones Importante: diseñar el DE de forma que: Los módulos de nivel superior toman las decisiones de ejecución (coordinan) Los de nivel inferior realizan la mayor parte del trabajo de entrada, de cálculo y de salida
  • 29. Estrategias de diseño. Pasos a seguir Revisar el modelo fundamental del sistema ⇒DFD procesos primitivos ⇒ no hace falta “crear” el DFD de procesos primitivos ⇒ se añaden procesos, si hace falta ⇒ recomendado, como mínimo, tener 3 niveles de profundidad Determinar si el DFD tiene características de transformación o de transacción indica expresamente la característica del DFD!
  • 30. Estrategias de diseño. Pasos a seguir (II) Según sea de transformación o transacción: a) Aislar el centro de la transformación, especificando los límites del flujo de llegada y de salida ...o bien... b) Identificar el centro de la transacción y las características del flujo de cada camino de acción. ⇒ indica expresamente los elementos anteriores!
  • 31. Estrategias de diseño. Pasos a seguir (III) Realizar el primer corte del diagrama de estructuras. Realizar el segundo nivel de factorización. Refinar la estructura del programa. Asegurarse del trabajo realizado por el diseño obtenido.
  • 34. Análisis de transformación. Segundo nivel de factorización Finalmente, es preciso optimizar!
  • 36. Análisis de transacción. Primer nivel de factorización
  • 37. Análisis de transacción. Segundo nivel de factorización Finalmente, es preciso optimizar!
  • 38. Análisis de transformación. Ejemplo (Guía de técnicas de Métrica 2.1, p.144)
  • 40. Análisis de transacciones. Ejemplo (Guía de técnicas de Métrica 2.1, p.148)
  • 42. Centros de transacción implícitos Normalmente el esquema de transacción no es tan claro: ⇒ el proceso de transacción no aparece explícitamente en el DFD ⇒ Solución: examinar el diagrama de contexto y la lista de eventos para determinar los tipos de transacciones en el sistema
  • 43. Centros de transacción implícitos (II) P datos-venta Realizar venta (Molina et al. 97) p.172 DPTO. SERVICIO A CLIENTES datos-devolución P Realizar devolución ... P Admitir pago datos-pago Seleccione la opción deseada: 1. Realizar venta 2. Realizar devolución 3. Admitir pago
  • 44. Estrategia de diseño. Pasos a seguir (IV) (Molina et al. 97) p.169 Análisis de transacciones Encontrar las transacciones en el DFD Análisis de transformaciones DE para cada transacción Análisis de transacciones Componer los DE en uno solo, usando un centro de transacciones DE para un menú
  • 45. Métricas de calidad estructural Mayor calidad estructural ⇒ mantenimiento más fácil Extensibilidad ++ Reutilización ++ Dos métricas: Acoplamiento Cohesión
  • 46. Acoplamiento Grado de interdependencia entre módulos. Depende de la forma de interactuar entre los módulos: p.ej. nº / tipo de parámetros que se intercambian. Objetivo: minimizar el acoplamiento (CAJA NEGRA). modificabilidad++, comprensión++, reutilización++ Ventajas de un bajo acoplamiento: Menos oportunidades para el “efecto onda”. El cambio realizado en un módulo afecta lo menos posible a otros módulos. Mientras se esté manteniendo un módulo, es deseable no necesitar preocuparse de los detalles internos de cualquier otro módulo.
  • 47. Complejidad de la interfaz Acoplamiento → Complejidad de la interfaz P.ej. (Molina et al. 97) 1. CALL LONGITUD( X1, Y1, X2, Y2, D ) 2. CALL LONGITUD( ORIGEN, DESTINO, D ) 3. CALL LONGITUD( PuntosX, PuntosY, D ) 4. CALL LONGITUD( LINEA, D ) 5. CALL LONGITUD( TABLALINEA ) 6. CALL LONGITUD. ⇒ ¿Qué interfaz es más fácil de entender?
  • 48. Complejidad de la interfaz (II) Depende de: Cantidad de información que debe comprenderse (como nº parámetros) Accesibilidad a esa información Indirección ⇒ complejidad++ Información local ⇒ complejidad-- Información en forma estándar ⇒ complejidad-- Si el parámetro intenta controlar la lógica del módulo que lo recibe ⇒ complejidad++
  • 49. Niveles de acoplamiento Stevens, Myers y Constantine 74 Acoplamiento Normal MEJOR (- Acopl.) De datos Por estampado De control Límite de aceptación Acoplamiento común Acoplamiento por PEOR (+ Acopl.) contenido Si dos módulos presentan varios tipos de acoplamiento, se considera que tienen el peor de los acoplamientos que presentan.
  • 50. 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 comunicación básica por medio de elementos de datos De estampado: se pasan datos con estructura de registro De control: se comunican con flags de control
  • 51. Acoplamiento normal de datos No genera problemas. Es el acoplamiento deseable Obtener DNI Cliente en diseño estructurado Sólo debe haber parámetros con sentido DNI cli En la medida de lo posible, Leer DNI Cliente minimizar el número de parámetros
  • 52. Acoplamiento normal por estampado Introduce indirección Obtener DNI Cliente No es deseable si el módulo que recibe el registro sólo necesita parte de los datos. Pasar campos innecesarios cli oscurece el diseño y reduce la Leer Cliente flexibilidad No crear registros artificiales, empaquetando datos no relacionados
  • 53. Acoplamiento normal de control Deseable sólo si los flags de control son descriptivos campo alfabético correcto EOR Obtener datos clientes campo campo correcto EOR campo Obtener campo Validar campo siguiente alfabético
  • 54. Acoplamiento normal de control (II) No es deseable si el control tiene Obtener trans y registro sentido descendente: Un módulo controla a otro y no son realmente Flag de selecc independientes reg trans reg maestro El módulo subordinado tiene Control sist E/S poca cohesión Solución: sustituir el módulo subordinado por tantos Flag de selecc: módulos como sea necesario, de forma que sólo 1. Obtiene RT intercambien datos 2. Obtiene RM 3. Obtiene RT y RM
  • 55. Acoplamiento normal de control (III) Peor es si hay “inversión de autoridad” (Molina et al. 97) p.66 ⇒ el módulo subordinado intenta controlar al módulo padre Formar palabras reg otro reg Encontrar palabras ...
  • 56. Niveles de acoplamiento (III) Acoplamiento común. Más de dos módulos hacen referencia a un área común de datos. Dos módulos pueden estar acoplados globalmente y no estar conectados mediante una llamada. Es desaconsejable, dado que (Molina et al. 97): Un error de programación en un módulo que usa puede aparecer en otros módulos que compartan esa misma área global. Reutilización-- Puede ser difícil averiguar de dónde procede información depositada en el área global. Se pueden incluso usar para depositar información de distinta naturaleza. Aplicaciones difíciles de mantener: es difícil saber qué datos son usados por un módulo.
  • 57. Niveles de acoplamiento (IV) Acoplamiento de contenido. Ocurre cuando un módulo necesita o accede a una parte de otro, rompiendo la jerarquía de funcionalidad de la estructura. En la mayoría de los casos sólo se puede dar en ensamblador A Hay que evitarlo descomponiendo el módulo al que se accede o duplicando esa B parte de código en el módulo que llama
  • 58. Datos vagabundos (Molina et al. 97) p.62 Deben evitarse también los datos vagabundos (que a veces están asociados al acoplamiento normal) Posibles soluciones: a) Reorganizar el diagrama b) Introducir variables globales
  • 59. Datos vagabundos (II) El dato vagabundo “registro maestro” se ha eliminado reorganizando el DE
  • 60. Cohesión Medida de la relación funcional entre los elementos de un módulo. Un módulo coherente sólo debe hacer una cosa. Un módulo coherente ejecuta una tarea bien definida en un programa y requiere poca interacción con otros procedimientos que se ejecutan en otras partes del programa. Objetivo: módulos con alta cohesión. La escala de cohesión no es lineal: una cohesión baja es mucho peor que una de grado medio, una de grado medio es casi tan buena como una alta.
  • 61. Cohesión y acoplamiento Son criterios inversamente relacionados: (Molina et al. 97) AULAS APARCAMIENTO COCINAS COMEDOR COMEDOR APARCAMIENTO COCINAS AULAS
  • 62. Niveles de cohesión Stevens, Myers y Constantine 74 (CAJA NEGRA) Funcional Mayor cohesión Secuencial Comunicacional Procedural (CAJA GRIS) Temporal (CAJA Lógica Límite de aceptación TRANSPA- Coincidental Peor cohesión RENTE)
  • 63. Niveles de cohesión (II) Funcional: se realiza una sola función. Secuencial: la salida de una tarea sirve como entrada a la siguiente: varios módulos con cohesión funcional que se pasan un dato Comunicacional: actividades que comparten datos (bien los mismos datos de entrada o de salida). Procedural: actividades diferentes, en las cuales el flujo de ejecución fluye de una a la siguiente. Temporal: actividades diferentes relacionadas por el tiempo. Lógica: actividades con la misma categoría lógica general, que se seleccionan fuera del módulo. Coincidental o casual: actividades diferentes sin relaciones significativas entre ellas.
  • 64. Niveles de cohesión (III) Ejemplos: Funcional: funciones matemáticas 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: Módulo “Detectar error, corregirlo y reanudar la ejecución” ⇒¿Porqué no es cohesión secuencial? Temporal: módulos de inicialización y terminación Lógica: rutina general de E/S
  • 65. Determinación de la cohesión de un módulo (Molina et al. 97) ¿Realiza el módulo una sola SÍ función? 1. FUNCIONAL. NO ¿Es importante SÍ 2. SECUENCIAL. POR DATOS la secuencia? NO 3. COMUNICACIONAL ¿Cómo están relacionadas las POR FLUJO DE actividades dentro CONTROL SÍ 4. PROCEDURAL. del módulo? ¿Es importante la secuencia? 5. TEMPORAL. NINGUNA DE NO LAS DOS SÍ 6. LÓGICA. ¿Son las actividades de la misma categoría NO 7. CASUAL. general?
  • 66. Heurísticas de diseño estructural IMPORTANTE: Los módulos superiores deben coordinar, y los inferiores realizar las tareas. Reducir el nº de parámetros que intercambian los módulos tanto como sea posible. Nunca pasar registros que contengan muchos campos cuando en realidad el módulo sólo necesita algunos. No agrupar parámetros sin relación en un registro. Evitar que un módulo hijo dé órdenes al padre. En la medida de lo posible, no usar variables globales. Se puede parar la descomposición cuando la interfaz con un módulo sea tan complicada como el módulo mismo.
  • 67. Heurísticas de diseño estructural Debe evitarse la situación en que un módulo llama a muchos otros (puede ser difícil de entender). Normalmente sucede cuando no se tiene en cuenta los niveles intermedios. Solución: combinar funciones subordinadas en una sola. Excepción: cuando el módulo 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 módulos subordinados en un módulo de nivel superior.
  • 68. Heurísticas de diseño estructural (Molina et al. 97) cap. 6 Factorizar funciones cuando sea posible. Inicializar las variables lo más tarde posible en el diagrama, cerca de las funciones a realizar. Evitar la disgregación de decisiones: La parte de reconocimiento de la condición se separa de la parte de ejecución ⇒ ¿Cuál puede ser un síntoma?
  • 69. Heurísticas de diseño estructural (II) (Molina et al. 97) cap. 6 Evitar sistemas dirigidos por la entrada física (sistemas que no procesan suficientemente la entrada). Lo deseable es: Lógico LÓGICO ... FÍSICO
  • 70. Heurísticas de diseño estructural (III) (Molina et al. 97) cap. 6 Ejemplo de sistema dirigido por la entrada física El acoplamiento suele ser alto. Ya que los módulos superiores en la jerarquía tratan con la entrada física, cualquier cambio en la especificación de ésta afectará a gran parte del sistema.
  • 71. Heurísticas de diseño estructural (IV) (Molina et al. 97) cap. 6 Edición de los datos de entrada Validar sintaxis antes que semántica Validar lo sencillo antes que lo cruzado Ejemplo: “nombre-ciudad” y “cod-postal” Validar: 1º sintaxis nombre-ciudad → caracteres alfabéticos cod-postal → numérico 2º Verificar que ambos datos existen 3º Validación cruzada: cod-postal ∈ nombre-ciudad
  • 72. Heurísticas de diseño estructural (V) (Molina et al. 97) cap. 6 Información Dos soluciones no válidas: de los errores: ¿Qué módulo llama al módulo que escribe mensajes de error?
  • 73. Heurísticas de diseño estructural (VI) (Molina et al. 97) cap. 6 Solución válida: ¿Dónde se pone el texto de los mensajes de error? Diseminados por el sistema Dentro de un único módulo