Diseño arquitectónico: describe cómo el software se descompone y organiza en componentes (la arquitectura del software). Diseño detallado: describe el comportamiento específico de estos componentes. La salida de este proceso es un conjunto. de modelos y artefactos que registran las principales decisiones que se han tomado.
PRINCIPIOS DE DISEÑO DE SOFTWARE
Abstracción: dos mecanismos de abstracción clave son la parametrización y la especificación. La abstracción por especificación conduce a tres tipos principales de abstracción: abstracción procesal abstracción de datos control (iteración) abstracción. "Acoplamiento y cohesión": El acoplamiento se define como la fuerza de las relaciones entre los módulos, mientras que la cohesión se define por la forma en que se relacionan los elementos que componen un módulo. "Descomposición y modularización".:Descomponer y modularizar software grande en varios más pequeños e independientes. Encapsulación / ocultación de información: Significa agrupar y empaquetar los elementos y detalles internos de una abstracción y hacer que esos detalles sean inaccesibles. Separación de la interfaz e implementación. Implica la definición de un componente mediante la especificación de una interfaz pública, conocida por los clientes, separada de los detalles de Cómo se realiza el componente. "Suficiencia e integridad". Lograr la suficiencia y la integridad significa garantizar que un componente de software capture todas las características importantes de una abstracción, y nada más.
CUESTIONES CLAVE EN EL DISEÑO DE SOFTWARE
Concurrencia: cómo descomponer el software en procesos, tareas e hilos y tratar los problemas relacionados con la eficiencia, la atomicidad, la sincronización y la programación. Control y manejo de eventos: Cómo organizar datos y controlar el flujo, cómo manejar eventos reactivos y temporales a través de diversos mecanismos, tales como la implicación implícita y la devolución de llamadas. Distribución de componentes: Cómo distribuir el software en el hardware, cómo se comunican los componentes, cómo se puede usar el middleware para tratar con software heterogéneo. Manejo de errores y excepciones y tolerancia a fallos: Cómo prevenir y tolerar fallos y lidiar con condiciones excepcionales . Interacción y presentación: Cómo estructurar y organizar las interacciones con los usuarios y la presentación de información (por ejemplo, la separación de la presentación y la lógica empresarial mediante el enfoque Modelo-Vista- Controlador). Persistencia de los datos: Cómo se manejarán los datos de larga duración
El diseño arquitectónico tiene que ver con
comprender cómo se debe organizar un sistema y diseñar la estructura general de ese sistema. Una vista representa un aspecto parcial de una arquitectura de software que muestra propiedades específicas de un sistema de software: la vista lógica (que satisface los requisitos funcionales) La vista de proceso (problemas de concurrencia) la vista física (problemas de distribución) la vista de desarrollo (cómo el diseño se divide en unidades de implementación con representación explícita de las dependencias entre las unidades). ATRIBUTOS DE CALIDAD Por lo general, se considera que varios atributos son importantes para obtener un diseño de software de buena calidad: mantenibilidad, portabilidad, comprobabilidad, trazabilidad, corrección, rendimiento, seguridad, disponibilidad, funcionalidad, facilidad de uso, modificabilidad, integridad.
DEFINICIÓN DE ARQUITECTURA DE SOFTWARE
La arquitectura de software es el diseño de más alto nivel de la estructura de un sistema. Una arquitectura de software consiste en un conjunto de patrones y abstracciones coherentes que proporcionan un marco definido y claro para interactuar con el código fuente del software. Una arquitectura de software se selecciona y diseña con base en objetivos (requisitos) y restricciones. La arquitectura de software define, de manera abstracta, los componentes que llevan a cabo alguna tarea de computación, sus interfaces y la comunicación entre ellos. DESCRIPCIONES ESTRUCTURALES (VISTA ESTÁTICA): Describe qué componentes tiene la arquitectura. Lenguajes de descripción de arquitectura (ADL): lenguajes textuales, a menudo formales, utilizados para describir una arquitectura de software en términos de componentes y conectores. Diagramas de clase y objeto. Diagramas de componentes. Tarjetas de responsabilidades de colaboración (CRC): se utilizan para denotar los nombres de los componentes (clase), sus responsabilidades y los nombres de sus componentes colaboradores. Diagramas de implementación: se utilizan para representar un conjunto de nodos (físicos) y sus interrelaciones y, por lo tanto, para modelar los aspectos físicos de un sistema. Diagramas de entidad-relación (ERD). Lenguajes de descripción de interfaz (IDL): programación como lenguajes utilizados para definir las interfaces (nombres y tipos de operaciones exportadas) de los componentes de software. DESCRIPCIONES DE CONDUCTA (VISTA DINÁMICA): describe cómo se comportan los componentes a lo largo del tiempo y como interactúan entre sí. • Diagramas de actividad • Diagramas de colaboración. • Diagramas de flujo de datos (DFDs) • Tablas de decisión y diagramas. • Diagramas de flujo y diagramas de flujo estructurados. • Diagramas de secuencia • Transición de estados y diagramas de diagramas de estado. • lenguajes de especificación formal • Pseudocódigo y lenguajes de diseño de programas (PDL)