Ingeniería del Diseño
Conceptos de diseño para diseñar un software: - diseño de datos, diseño arquitectónico, interfaz, procedimental.
Requisitos => Validación => Diseño
La finalidad del diseño del software es aplicar un conjunto de
- Principios
- Conceptos
- Prácticas
Que conducen al desarrollo de un sistema o producto de calidad.
La meta del diseño es:
- Entender el contexto donde mi software va a estar funcionando. Las condiciones de la industria, como la ley, y la normal operatoria de la empresa.
- Crear un modelo de software que incluya todos los requisitos del cliente.
- Que complazca a quien lo use.
- Buscar la solución que mejor cumpla las necesidades.
- 1er actividad técnica
- Independiente al modelo que se utilice
- Se le da inteligencia al software
- Es donde los requisitos, las necesidades y las consideraciones técnicas se unen en la formulación de un producto o sistema.
¿Quién lo hace?
Si el cliente tiene que participar es porque:
- se eligió mal el modelo
- Falló la comunicación
- El diseño debería poder codificarse x cualquiera
- Nos limitaremos a las limitaciones del programador
- A su vez a veces es necesario un feedback del programador por temas de falibilidad o bien para que este le da una idea de cosas que se pueden hacer que el diseñador no conoce por lo que no las considera.
¿Por qué es importante?
Resultado => De. Papel o magnético entregable (plano, cursograma, etc.)
Debería servirle al cliente para que lo programe cualquier otro.
Además debe servir como guía legible para los programadores.
¿Qué hay que diseñar?
- ESTRUCTURA DE DATOS: características de cada uno y sus relaciones.
- Hacer un DISEÑO PROCEDIMENTAL o de COMPONENTES: descripción de lo que va a hacer el software.
- DISEÑO ARQUITECTÓNICO: estructura y relaciones.
- INTERFAZ: como se va a mostrar.
- Cómo se comunica el software con el usuario, otro software, o el hardware.
Objetivos
Atributos de calidad
- Funcionalidad
- Facilidad de uso
- Confiabilidad
- Desempeño
- Soportabilidad –Facilidad de mantenimiento
El peso del atributo depende del tipo de software.
CONCEPTOS FUNDAMENTALES PARA HACER UN BUEN DISEÑO
- El software no va a ser bueno si el diseño es malo, la inteligencia depende del diseño.
- Arquitectura: Es el producto del trabajo de desarrollo que ofrece el mayor rendimiento de la inversión con respecto a la calidad, el tiempo y el costo.
- Modularidad: Es el atributo particular del software que permite que un programa sea manejable de manera intelectual. El software se divide en componentes con nombres independientes y que es posible abordar en forma individual. Estos componentes llamados módulos se integran para satisfacer los requisitos del problema.
Ventajas, porque modularizar:
- Más fácil de desarrollar.
- A la larga es más fácil de encontrar un problema.
- Reutilización: un módulo sirve para aplicarse más de una vez.
- Es más fácil ajustar cambios sin introducir nuevos errores.
- Más fácil de probar.
- Puedo construir más de un módulo a la vez.
- Más fácil la eliminación de errores.
Desventajas:
- Con las relaciones (más interfaces): cuando pongo un nuevo módulo, hacer que se relacione con los demás módulos.
- Es más complejo, por lo que cuesta más la integración de los módulos.
- Puede que en algún caso sea menos performante.
El esfuerzo para desarrollar un solo modelo de software decrece conforme se incrementa el número de módulos.
Pero a medida de que crece el número de módulos, el esfuerzo asociado con la integración de los mismos también crece.
Por eso hay que tratar de encontrar el equilibrio.
(Variables, parámetros) Ocultar la información que no sea necesaria para otros módulos, facilita el mantenimiento y las modificaciones.
- Nadie mire lo que no tiene que ver.
- Todos miren lo que tienen que hacer.
Hay una menor probabilidad de introducir errores inadvertidos cuando realizas una modificación.
Se desea diseñar el software de tal manera que cada módulo aborde una subfunción específica de los requisitos y tenga una sola interfaz cuando se observe desde otras partes de la estructura del programa. La independencia hace referencia a dos criterios cualitativos:
- Cohesión: Fuerza funcional - cuanto menos tareas realiza un módulo se dice que es más cohesivo.
- Acoplamiento: Es una medida de la interconexión entre los módulos de una estructura de software. Este acoplamiento depende de la complejidad de la interfaz entre los módulos. Lo óptimo sería conseguir un acoplamiento lo más bajo posible
- Reutilizable = ALTA COHESIÓN - BAJO ACOPLAMIENTO
Hace que el diseñador trabaje sobre el enunciado original y que proporcione más y más detalle, además revela los detalles de grado menor mientras se realiza el diseño.
Reorganización que simplifica el diseño sin cambiar su comportamiento. Se buscan redundancias, elementos inútiles e innecesarios, que son consideradas fallas.
=>software + fácil de integrar, probar y mantener.
¿Cuáles son las reglas que deben seguirse para la construcción de la interfaz de usuario?
En su libro sobre diseño de interfaces, Theo Mandel acuñó tres reglas de oro:
- Dar el control al usuario:
- Evitar que el usuario realice tareas innecesarias o indeseadas.
- Proporcionar una interfaz flexible. Si al usuario le gusta más trabajar con teclado, que el software sea adaptable a las necesidades del usuario.
- Que el usuario pueda interrumpir y deshacer acciones que realizó.
- Que el usuario pueda personalizar lo que ve, poniéndole el color que más le guste, por ejemplo.
- Ocultar elementos técnicos.
- Que el usuario sienta que puede manipular los objetos, así como lo hace en la vida real. (que pueda estirar una ventana)
- Reducir la carga de memoria del usuario:
Cuantas más cosas tenga que recordar el usuario, más probabilidad de que cometa errores cuando interactúa con el sistema.
La interfaz debe adquirir y presentar la información de manera consistente. Esto se logra basándose en un estándar.