E-Clases
Ingenieria de Software X
Home
SIA: Definiciones
SIA: Centros de Cómputo
SIA: Areas de Administracion de un CC
SIA: Técnicas y sistemas de gestión de la innovación
Matematicas
SIA II - Proyecto
Códigos para Programadores
Bases de Datos I
Diseño Páginas Web
Curso de Ingles Diciembre 2003
Ingles Tecnico
CENAFOM - Computación 02076
Ingenieria de Software I
Ingenieria de Software II
Ingenieria de Software III
Ingenieria de Software IV
Ingenieria de Software V
Ingenieria de Software VI
Ingenieria de Software VII
Ingenieria de Software VIII
Ingenieria de Software IX
Ingenieria de Software X
Ingenieria de Software XI
Encuestas y Libro de Visitas
Sitios Web
De todo Un Poco
Servicio Tecnico
Nuestros Clientes
Trabajos
Introducción a la Programación

clases2.jpg

Diseño:

Definición

Es el proceso de aplicar distintas técnicas y principios con el propósito de definir un sistema con suficiente detalle como para permitir su implementación.

Modelos de diseño

  • Diseño de datos. Especifica las estructuras de datos necesarias para implementar el sistema. Utiliza el DER (diagrama de entidad-relación) y el DD (diccionario de datos).
  • Diseño arquitectónico. Define las relaciones entre los elementos estructurales (módulos) del programa. Utiliza el DFD (diagrama de flujo de datos).
  • Diseño de interface. Describe como se comunica el software consigo mismo, con los sistemas que operan con él y con los operadores que lo emplean. Utiliza el DFD.
  • Diseño procedimental. Transforma los elementos estructurales de la arquitectura del programa en una descripción procedimental. Utiliza el DTE y la minispec o EP (especificación de procesos).

Conceptos

  • Abstracción.
    • Capacidad de extraer las características principales de un objeto para modelarlo.
    • Permite concentrarse en un problema sin ocuparse de los detalles.
    • Puede definirse abstracción procedimental, de datos y de control.
  • Refinamiento. Estrategia de diseño descendente donde un programa se desarrolla definiendo sucesivamente niveles de detalle procedimental.
  • Modularidad. Estrategia de dividir un programa en componentes identificables y tratables por separado llamados módulos. Divide y vencerás.
  • Arquitectura del software. Es la estructura jerárquica de los módulos del programa, la manera en que interactúan y las estructuras de datos usadas por ellos.
  • Jerarquía de control. Es una representación gráfica de la organización de los módulos del programa desde el punto de vista del control.
    • Profundidad. Número de niveles de control.
    • Anchura. Máximo número de módulos en un nivel de control.
    • Fan-out. Número de módulos que son controlados directamente por otro módulo.
    • Fan-in. Número de módulos que controlan directamente a un módulo.
    • Visibilidad. Conjunto de módulos que pueden invocarse o usar sus datos por un módulo.
    • Conectividad. Conjunto de módulos que son invocados o usados sus datos por un módulo.
  • Partición estructural.
    • Partición horizontal. Dividir cada módulo en una parte de entrada, otra de procesamiento y otra de salida de datos.
    • Partición vertical. Distribuir el control y el trabajo a lo largo de la jerarquía de control. Los módulos de niveles superiores tienen mucho control y poco procesamiento y los módulos de niveles inferiores poco control y mucho procesamiento.
  • Estructuras de datos. Muestra las alternativas de organización, métodos de acceso, capacidad de asociación y procesamiento de la información.
  • Ocultamiento de la información. Los detalles de implementación de los módulos deben ser privados.
  • Independencia funcional. Mide el grado en que los módulos dependen unos de otros. Es deseable que cada módulo sea independiente con una función única y poca interacción. La independencia funcional se mide con la cohesión y el acoplamiento.
  • Cohesión.
    • Mide el número de funciones que hace un módulo.
    • Baja cohesión.
      • Cohesión coincidente. El módulo hace muchas cosas sin relación.
      • Cohesión lógica. El módulo hace muchas cosas relacionadas lógicamente.
      • Cohesión temporal. El módulo hace muchas cosas relacionadas por el hecho que deben hacerse al mismo tiempo.
    • Cohesión moderada.
      • Cohesión procedimental. El módulo hace varias cosas relacionadas que deben ejecutarse en cierto orden.
      • Cohesión de comunicación. El módulo hace varias cosas que trabajan sobre una sola estructura de datos.
    • Alta cohesión.
      • Cohesión funcional. El módulo hace una sola cosa.
    • Se busca una moderada o alta cohesión.
  • Acoplamiento.
    • Mide la interconexión entre los módulos.
    • Bajo acoplamiento.
      • Sin acoplamiento. El módulo es independiente.
      • Acoplamiento de datos. El módulo recibe una lista de argumentos de quien lo llama.
    • Acoplamiento moderado.
      • Acoplamiento de control. El módulo recibe una bandera de quien lo llama y se comporta de una manera u otra dependiendo del valor de la bandera.
    • Alto acoplamiento.
      • Acoplamiento externo. El módulo esta acoplado a un dispositivo de I/O externo. Este tipo de acoplamiento debe limitarse a unos pocos módulos.
      • Acoplamiento común. El módulo utiliza variables globales o comunes.
      • Acoplamiento de contenido. El módulo usa datos contenidos dentro de los límites de otro módulo.
    • Se busca un bajo o moderado acoplamiento y limitar el uso de variables globales.

Recomendaciones para un buen diseño

  • Desde el principio reducir el acoplamiento y aumentar la cohesión.
  • Módulos pequeños (70 líneas).
  • Minimizar el fan-out, concentrarse en la profundidad.
  • El alcance del efecto de un módulo debe estar dentro del alcance de control de ese módulo.
  • Reducir la complejidad de las interfaces y mejorar la consistencia.
  • Definir módulos con comportamiento predecible, sin ser muy restrictivos.
  • Hacer módulos con una sola entrada y salida.
  • Hacer el software basado en las restricciones de diseño y requerimientos de portabilidad.

Diseño de datos

Principios de diseño de datos de Wasserman.

  • Aplicar a los datos los principios del análisis aplicados a la función y al comportamiento.
  • Identificar las estructuras de datos y las operaciones sobre ellas.
  • Establecer un diccionario de datos y usarlo como guía para el diseño de datos y programa.
  • Retrasar las decisiones de bajo nivel.
  • Ocultar la información de las estructuras de datos.
  • Desarrollar una biblioteca de estructuras de datos y operaciones.
  • El medio ambiente debe soportar la especificación y realización de estructuras de datos abstractas (ADTs).

Diseño arquitectónico

  • Desarrollar la estructura modular del programa y representar las relaciones de control entre módulos.
  • Combinar la estructura del programa y las estructuras de datos definiendo el flujo de la información entre las interfaces de los módulos.

Proceso de diseño arquitectónico

La transición del DFD a una estructura de programa se hace en 7 pasos:

  1. Revisar el modelo fundamental del sistema.
    • DFD de nivel 0.
    • Especificación del sistema.
    • Especificación de requisitos.
  2. Revisar y refinar el DFD (si es posible).
  3. Revisar el tipo de flujo
    • Flujo de transformación. Convierte datos de entrada (externos) en una representación interna, opera sobre ellos y los convierte en datos de salida (externos). Son los más comunes.
    • Flujo de transacción. Desencadena uno de varios flujos de información dependiendo del valor que tome.
  4. Indicar los límites del flujo.
  5. Convertir el DFD en la estructura del programa dependiendo del tipo de flujo.
  6. Definir la jerarquía de control usando particionamiento.
  7. Refinar la estructura usando heurísticas.

Diseño procedural

Teorema de la programación estructurada

Propuesto por Edsgar Dijkstra a fines de los 60s en su famosa carta dirigida al editor del Communications of the ACM. Demuestra que cualquier algoritmo se puede expresar con 3 tipos de instrucciones: la secuencia, la condición y la repetición, e inició lo que se conoce como programación estructurada o "goto-less".

Herramientas gráficas para el diseño procedural

  • Diagramas de flujo.
    • Las instrucciones se representan con un rectángulo.
    • Las condiciones se representan con un rombo.
    • El control se representa con flechas entre rectángulos y rombos.
    • La representación de ciclos (for, while, do while) y del case no es obvia.

inge14.gif

Diagramas de Nassi-Shneiderman.
  • También conocidos como diagramas de cajas o Chapin.
  • Cada instrucción tiene bien definido su alcance.
  • El alcance de las variables locales o globales está bien definido.

inge15.gif

  • Se puede complicar si hay muchos bloques anidados.

  • Tablas de decisión.
    • Utiles cuando hay una combinación compleja de condiciones y selección de acciones apropiadas basadas en esas condiciones.
  • Seudo-código.
  • Diseño de la interface interna y externa

    • Interface interna. Depende de los datos que deben fluir entre los módulos y las características del lenguaje de programación. Se obtiene de las flechas (datos) del DFD después de convertir las burbujas en módulos.
    • Interface externa. Se evalúa cada entidad externa del DFD, se determinan sus requisitos de datos y control y se diseñan las interfaces apropiadas.

    Diseño de la interface hombre-máquina

    Definición

    Parte del sistema que se encarga de facilitar a una persona su uso.

    Objetivos de una interface hombre-máquina

    • Minimizar el tiempo de entrenamiento para usar el sistema.
    • Capacidad de realizar tareas en un tiempo razonable.
    • Confiable
    • Tender hacia un standard para que sea portable

    Métricas para las interfaces hombre-máquina

    • Tiempo de aprendizaje. Cuánto tiempo lleva a una persona típica aprenderse los comandos mas importantes para un conjunto de tareas.
    • Velocidad de uso. Cuánto tiempo lleva realizar un conjunto de tareas definidas como de benchmark.
    • Errores por usuario. Cuántos y de qué tipo son los errores hechos por los usuarios en las tareas benchmark.
    • Retención. Qué tan bien mantienen su conocimiento los usuarios después de un día, una semana o un mes.
    • Satisfacción subjetiva. Qué tan bien se sienten los usuarios con esa interface.

    Principios de diseño de una interface

    1. Adaptación al nivel del usuario. El sistema debe adaptarse a la capacidad de cada usuario y debe tener características distintas.
      • Novato. Es un usuario que posiblemente sepa que hacer pero no conozca el sistema.
        • Avisar cada vez que sucede alguna acción.
        • Tener mensajes especificos de error.
        • Tener manuales bien hechos y un tutorial en línea.
      • Intermitente. Sabe que hacer, a lo mejor es usuario frecuente de otro sistema parecido, pero éste lo usa de vez en cuando.
        • Debe ser consistente en sus menús, lenguaje y terminología.
        • Capacidad de invocar comandos parcialmente olvidados.
        • Capacidad de exploración, what if ?
        • Tener ayuda en línea.
      • Experto. Conoce muy bien el sistema
        • Tiempo de respuesta rápido y no es necesario desplegar todas las opciones.
        • Capacidad de hacer macros con las secuencias mas comunes.
    2. Adaptación a la tarea. El sistema debe ser adaptable a la tarea que se está realizando, se puede usar la frecuencia de uso de los comandos para hacer decisiones.
      • Las acciones mas comunes deben poderse invocar fácil, a lo más con un teclazo.
      • Las acciones medio frecuentes pueden invocarse con dos teclas, por ejemplo CTRL y otra cosa.
      • Las acciones menos frecuentes pueden invocarse con una palabra o estar después de 2 o 3 menús.
      • Las nada frecuentes o complejas pueden hacerse a traves de varios menús o llenado de formas.
    3. Tipos de interacción
      • Selección de menús.
      • Llenado de formas.
      • Lenguaje de comandos.
      • Lenguaje natural.
      • Manipulación directa. Por ejemplo en los juegos

    Reglas para el diseño del dialogo

    1. Consistencia. Usar las mismas palabras con el mismo sentido, las acciones parecidas deben hacer uso de comandos parecidos.
      • Consistente
        • delete / insert caracter
        • delete / insert palabra
        • delete / insert linea
        • delete / insert parrafo
      • Inconsistente
        • delete / insert caracter
        • remove / bring palabra
        • destroy / create linea
        • kill / birth parrafo
    2. Uso de shortcuts. El sistema debe permitir el uso de macros, hot keys, abreviaciones, a los usuarios expertos.
    3. Dar información para cada acción. No importa si la acción es pequeña o grande, si tuvo éxito o no, el sistema debe contestar con algo.
    4. Cerradura. Cuando haya que dar una secuencia de acciones, el sistema debe dar la sensacion de principio, medio y final de la secuencia.
    5. Manejo fácil de errores. De ser posible el sistema no debe permitir ningún error serio. Si ocurre alguno, el sistema debe detectarlo y ofrecer mecanismos fáciles para la reparación. De ser posible no repetir todo el comando sino sólo la parte que estuvo mal.
    6. Permitir el undo.
    7. Hacer sentir al usuario que el tiene el control. Evitar acciones sorpresivas, secuencias tediosas para meter datos, incapacidad o dificultad para obtener la información necesaria e incapacidad de obtener la acción que se quería.
    8. Reducir el uso de la memoria short-term del usuario. El display debe ser sencillo

    Reglas para el desplegado de datos

    • Organización.
      • Consistencia. Que todos los datos sean iguales, formatos, etc.
      • Asimilación eficiente de información. Estructura de la información y buena redacción. Alineado, etc.
      • Carga de memoria mínima para el usuario.
      • Compatibilidad entre el despliegue y la entrada de datos.
      • Flexibilidad para el control del despliegue. Ordenar por nombre, por tipo, etc.
    • Atraer la atención del usuario.
      • Intensidad. Sólo dos niveles.
      • Resaltado. Subrayado, encerrado.
      • Tamaño. No más de 4 tamaños.
      • Tipos. No más de 3 tipos.
      • Video inverso.
      • Blinking.
      • Color. No más de 4 colores.
      • Audio. Tonos suaves para retroalimentación positiva, tonos ásperos para emergencias.

    Reglas para captura de datos

    • Consistencia en las transacciones de entrada.
    • Acciones de entrada mínima.
    • Carga de memoria mínima.
    • Compatibilidad entre captura y despliegue de datos.
    • Flexibilidad en el control de captura.

    Tipos de menús

    • Simples
      • Binarios. Tienen 2 opciones excluyentes.
      • Radio buttons. Tienen varias opciones pero sólo se puede tomar una.
      • Checkboxes. Tienen varias opciones y se pueden tomar varias.
    • Lineales. Una serie de menus independientes donde no importa las opciones que se escogen siempre se presenta la misma secuencia. Debe haber forma de regresar al menú anterior y debe haber una sensación de progreso indicando el numero de menú y cuantos faltan para completar la secuencia.
    • Arbolescos. Tienen una estructura en forma de árbol.
      • Es preferible un árbol ancho de poca profundidad
      • Debe tener algún tipo de indicador de la posición ya sea con una palabra que cambie cada vez que se mueva de nivel o por medio de un mapa del menú.
    • Cíclicos. Tienen una estructura en forma de grafo, se puede llegar de varias formas a un mismo menú y por lo general tienen opción para regresar al menú anterior.

    Organización de menús

    • Menús extendidos. Por su extensión necesitan una scroll-bar.
    • Menús pop-up. Aparecen (pop-up) cuando se pica un botón del ratón encima del nombre del menú.
    • Menús caminantes "walking menus". Se activan picándole a la derecha de las opciones que tienen una flecha despues del nombre.
    • Menús pull-down. Se recorre con el botón del ratón. Casi todos los menús que son pop-up son pull-down.
    • Menús permanentes. Son menús que estan siempre presentes.

    Organización de los elementos de un menú

    Los elementos de un menú se pueden organizar por:

    • Tiempo. Algún orden cronológico, por ejemplo una secuencia de pasos.
    • Orden numérico.
    • Propiedades físicas. En orden creciente o decreciente de longitud, área, volumen, temperatura, pesos, velocidad, etc.
    • Alfabético. Creciente o decreciente.
    • Grupos en común con alguna separacion entre ellos.
    • Los más usados primero.
    • Los más importantes primero.

    Mecanismos de selección

    • Inmediata. Basta picar encima de la opción para que se active.
    • No inmediata. Permite seleccionar y de-seleccionar opciones y cuando todo está listo se pica un botón de activación.

    Reglas para diseñar menús

    1. Buscar una buena organización (menus sencillo, lineal, arbol, etc.)
    2. Preferir árboles anchos y poco profundos a los delgados y profundos.
    3. Mostrar la posición gráficamente, por números o por títulos.
    4. Usar el nombre de la opción como título del menú en los arboles.
    5. Usar un agrupamiento lógico en las opciones.
    6. Usar un orden lógico en las opciones.
    7. Las opciones deben ser breves y comenzar con una palabra clave.
    8. Usar un formato, terminología y gramáticas consistentes.
    9. Permitir short-cuts y hot-keys.
    10. Permitir brincos al menú anterior y al principal.
    11. Considerar ayuda en línea y tamaño de la pantalla.

        Llenado de formas

        Se usan cuando hay que meter muchos datos como nombres o valores numéricos. Por ejemplo tenemos una forma de ventas:

        Escriba
                                            la informacion usando <TAB> para moverse entre campos y cuando
                                            termine oprima <RET>
                                            
                                            Nombre: ______________________________   Telefono (___)_______
                                            
                                            Direccion: ___________________________________________________
                                            
                                            Ciudad: ________________________  Estado: _________  CP: _____
                                            
                                            Numero de factura: ___________________________________________
                                            
                                            
                                            Numero de      Cantidad      Numero de      Cantidad
                                            Catalogo                     Catalogo
                                            
                                            _________      ________      _________      ________
                                            
                                            _________      ________      _________      ________
                                            
                                            _________      ________      _________      ________
                                            
                                            _________      ________      _________      ________
                                            
                                            _________      ________      _________      ________
                                            
                                            

        Reglas para el diseño de formas

        1. Título significativo.
        2. Instrucciones comprensibles.
        3. Agrupacion lógica y secuencial de campos.
        4. Diseño atractivo.
        5. Nombres familiares o comunes para los campos.
        6. Terminología y abreviaciones consistentes.
        7. Tamaño consistente de los campos.
        8. Movimiento apropiado del cursor.
        9. Capacidad de corregir errores dentro de los campos.
        10. Mensajes de error para valores no válidos.
        11. Campos optativos claramente marcados.
        12. Mensajes explicativos para los campos (tips).
        13. Poner botones de aceptación, de cerrar cancelando y de limpiar los campos. Debe evitarse que la forma sea aceptada al llenar el último campo porque a lo mejor el usuario quiere revisar la forma.

      WorldPrime Computacion (C) 2004