La arquitectura de software define la estructura general del sistema, entendiendo estructura como los componentes que nacen de la abstracción del sistema, que cumple funciones específicas, e interactúan entre sí con un comportamiento definido.
La arquitectura de software puede ser vista como la estructura del sistema en función de la definición de los componentes y sus interacciones, considerando los requerimientos y restricciones del sistema, junto a los argumentos que justifiquen que la estructura definida satisface los requerimientos del sistema.
Una estructura compuesta por componentes de software y reglas que caracterizan la interacción entre estos componentes
Un conjunto de elementos arquitecturales que tienen una forma particular. Estos elementos se dividen en tres clases: elementos de procesamiento, elementos de datos y elemento de conexión.
Una colección de componentes computacionales – o, simplemente, componentes - en conjunto con una descripción de las interacciones entre estos componentes, es decir, de los conectores
Una estructura organizacional de un sistema de software que incluye componentes, conexiones, restricciones y una exposición razonada de los requerimientos que ella satisface o de algunos otros aspectos de la arquitectura
La arquitectura de software se refiere a grandes rasgos, a una vista del sistema que incluye los componentes principales del mismo, la conducta de esos componentes según se le percibe desde el resto del sistema y las formas en que los componentes interactúan y se coordinan para alcanzar la misión del sistema
La arquitectura de software tiene que ver con el diseño y la implementación de estructuras de software de alto nivel. Es el resultado de ensamblar un cierto número de elementos arquitectónicos de forma adecuada para satisfacer la mayor funcionalidad y requerimientos de desempeño de un sistema, así como requerimientos no funcionales, como la confiabilidad, escalabilidad, portabilidad y disponibilidad
organización fundamental de un sistema encarnada en sus componentes, las relaciones entre ellos, el ambiente y los principios que orientan su diseño y evolución.
Calidad de software
Annotations:
varia de un programa a otro dependiendo las necesidades
se puede medir a nivel de cero fallas, funcional o de su confiabilidad-mantenilibidad y flexibilidad
eficiencia
flexibilidad
correccion
confiabilidad
mantenibilidad
portabilidad
seguridad
Modelo de 3 componentes
elementos
Annotations:
son elementos ya sea de procesamiento, datos o conexión.
forma
Annotations:
las propiedades de, y las relaciones entre, los elementos, es decir, restricciones operadas sobre ellos
razon
Annotations:
proporciona una base subyacente para la arquitectura en términos de las restricciones del sistema, derivadas de los requerimientos del sistema
Definición formal
Annotations:
La arquitectura de software, refiere la especificación de la estructura del sistema, entendida como la organización de componentes y relaciones entre ellos; los requerimientos que debe satisfacer el sistema y las restricciones a las que está sujeto, así como las propiedades no funcionales del sistema y su impacto sobre la calidad del mismo; las reglas y decisiones de diseño que gobiernan esta estructura y los argumentos que justifican las decisiones tomadas
puente?
requerimientos
implementacion
no se ocupa de?
Annotations:
Diseño detallado. Diseño de algoritmos. Diseño de estructuras de datos
Objetivos
Annotations:
-Comprender (abstracción) y mejorar la estructura de las aplicaciones complejas. -Reutilizar dicha estructura (o partes de ella) para resolver problemas similares.
-Analizar la corrección de la aplicación y su grado de cumplimiento respecto a los requisitos iniciales.
-Permitir el estudio de algunas propiedades específicas del dominio.
-Planificar la evolución de la aplicación, identificando las partes mutables e inmutables de la misma, así como los costos de los posibles cambios.
-Permitir la adaptación al cambio por composición, reconfiguración, reutilización, escalabilidad, mantenibilidad, etc.
-Organización a alto nivel del sistema, incluyendo aspectos como: la descripción, el análisis de propiedades relativas a su estructura y control global, los protocolos de comunicación, los protocolos de sincronización utilizados, la distribución física del sistema y sus componentes, etc.
importancia
Annotations:
-La necesidad del manejo de la arquitectura de un sistema de software nace con los sistemas de mediana o gran envergadura y con la tendencia al crecimiento de los sistemas en cuanto al volumen de datos, códigos y aspectos funcionales y no funcionales.
-En la medida que los sistemas de software crecen en complejidad, bien sea por número de requerimientos o por el impacto de los mismos, se hace necesario establecer medios para el manejo de esta complejidad
-Incrementos en la evolutividad de los sistemas de software en cuanto a partes o componentes del negocio (globalizaciones, concentraciones, reorganizaciones, competencia, etc) y de la plataformas de ejecución.
- Incremento de la heterogeneidad de los sistemas en cuanto a lenguajes y paradigmas, manejadores de datos y protocolos de acceso, sistemas operativos, plataformas intermediarias y sistemas operativos.
-Permite descomponer el sistema en piezas.
- Los componentes definidos agrupan aspectos específicos del sistema.
- Es producto de un proceso de abstracción.
-Organiza y constituye la base de la solución de un problema.
papel del arquitecto
Annotations:
-El arquitecto de software es el responsable por la arquitectura de software lo que incluye las decisiones técnicas que rigen sobre el diseño e implementación del proyecto.
-El arquitecto de software es el responsable por las decisiones técnicas expresadas como la arquitectura de software. Esto típicamente incluye identificar y documentar los aspectos arquitecturalmente significantes del sistema, incluidos los requerimientos, diseño, implementación y vistas del despliegue del sistema.
-El arquitecto de software es responsable por proveer razones fundamentales por las decisiones técnicas tomadas, balancear los intereses de varios stakeholders (interesados), manejar los riesgos técnicos del proyecto y asegurar que las decisiones sean efectivamente comunicadas, validadas y adoptadas.