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:
- Revisar el modelo fundamental del sistema.
- DFD de nivel 0.
- Especificación del sistema.
- Especificación de requisitos.
- Revisar y refinar el DFD (si es posible).
- 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.
- Indicar los límites del flujo.
- Convertir el DFD en la estructura del programa dependiendo del tipo de flujo.
- Definir la jerarquía de control usando particionamiento.
- 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.
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.
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
- 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.
- 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.
- 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
- 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
- Uso de shortcuts. El sistema debe permitir el uso de macros, hot keys, abreviaciones, a los usuarios expertos.
- 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.
- Cerradura. Cuando haya que dar una secuencia de acciones, el sistema debe dar la sensacion de principio, medio y final
de la secuencia.
- 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.
- Permitir el undo.
- 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.
- 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
- Buscar una buena organización (menus sencillo, lineal, arbol, etc.)
- Preferir árboles anchos y poco profundos a los delgados y profundos.
- Mostrar la posición gráficamente, por números o por títulos.
- Usar el nombre de la opción como título del menú en los arboles.
- Usar un agrupamiento lógico en las opciones.
- Usar un orden lógico en las opciones.
- Las opciones deben ser breves y comenzar con una palabra clave.
- Usar un formato, terminología y gramáticas consistentes.
- Permitir short-cuts y hot-keys.
- Permitir brincos al menú anterior y al principal.
- 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
- Título significativo.
- Instrucciones comprensibles.
- Agrupacion lógica y secuencial de campos.
- Diseño atractivo.
- Nombres familiares o comunes para los campos.
- Terminología y abreviaciones consistentes.
- Tamaño consistente de los campos.
- Movimiento apropiado del cursor.
- Capacidad de corregir errores dentro de los campos.
- Mensajes de error para valores no válidos.
- Campos optativos claramente marcados.
- Mensajes explicativos para los campos (tips).
- 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.
|