Concepto: Software Architecture

La arquitectura de software representa la estructura o estructuras del sistema que consiste en componentes de software,las propiedades externas visibles de esos componentes y las relaciones entre ellos.

Relaciones
Descripción principal

Introducción

La arquitectura del software es un concepto fácil de entender y que la mayoría de los ingenieros intuitivamente siente, especialmente con un poco de experiencia, pero es precisamente difícil de definir. En particular es difícil marcar una linea en lo que es diseño y arquitectura. La arquitectura es un aspecto del diseño que se concentra en algunas características específicas.

En Una Introducción a la Arquitectura del Software, David Grlan y Mary Shaw sugieren que la arquitectura del softwar es un nivel de diseño que se ocupa de los problemas: "Más allá de los algoritmos y estructuras de datos de la computación, diseño y especificación de la estructura general del sistema se perfila como un nuevo tipo de problema. Los problemas estructurales que incluyen la organización y estructura de control global; protocolos de comunicación, sincronización y acceso a datos, asignación de funciones a elementos de diseño, distribución física, la composición de los elementos de diseño, escalado y el rendimiento; y la selección entre alternativas de diseño". [GAR93]

Pero hay más arquitectura después de solo estructura. La IEEE Working Grupo on Arquitecture la define como "el concepto de nivel más alto de un sistema en su entorno" [IEP1471]. También incluye el "ajuste" con la integridad del sistema, con restricciones económicas, con las preocupaciones estéticas y con estilo. No se limita a un enfoque interno, pero tiene en cuenta el sistema como un todo en su entorno de usuario y su entorno de desarrollo - un enfoque hacia el exterior.

En OpenUP la arquitectura de un sitema de software (en un punto dado) es la organización o estructura de los componentes más significativos del sistema interactuando, a través de interfases, con componentes sucesivamente mas pequeños y sus interfases. 

 

Descripción de Arquitectura

Para hablar y rasonar sobre arquitectura del software primero se debe definir una representación arquitectónica, una manera de describir los aspectos importantes de una arquitectura. En OpenUP esta descripción es capturada en Artefacto: Architecture Notebook.

 

Vistas Arquitectónicas

Hemos elegido representar la arquitectura de software en múltiples vistas arquitectónicas. Cada vista arquitectónica se ocupa de grupos específicos para las partes interesadas en el proceso de desarrollo: usuarios, diseñadores, managers, ingenieros de sistemas, mantenedores, y más.

Las vistas capturan las mayores desiciones de diseño estructural mostrando como la arquitectura del software se separa en componentes y como los componentes están conectados con conectores para producir en forma útil [PW92]. Este opciones de diseño deben estar sujetas a los Requerimientos funcionales y suplementarios y otras constantes. Pero estas opciones a su vez ponen restricciones sobre los requisitos y las decisiones de diseño de futuro a un nivel inferior.

 

Enfoque Arquitectónico

 

Although the views above could represent the whole design of a system, the architecture concerns itself only with some specific aspects:

Aunque las vistas podrían representar todo el diseño del sistema, la arquitectura se refiere únicamente a algunos aspectos específicos:

 

  • La estructura del modelo - los patrones de organización, por ejemplo, capas.
  • Los elementos esenciales - los casos de uso críticos, clases principales, mecanismos comunes, y así sucesivamente, a diferencia de todos los elementos presentes en el modelo.
  • Unos cuantos escenarios clave que muestra el control de los flujos principales de todo el sistema.
  • Los servicios, para captar la modularidad, características opcionales, aspectos de línea de productos.

 

En esencia, vistas arquitectónicas son abstracciones o simplificaciones, de todo el diseño, en el que las características importantes se hacen más visible, dejando a un lado los detalles. Estas características son importantes cuando se razona sobre:

 

  • Sistema de evolución, de ir al siguiente ciclo de desarrollo.
  • La reutilización de la arquitectura, o partes de ella, en el contexto de una línea de productos.
  • Valoración de las cualidades complementarias, tales como rendimiento, disponibilidad, portabilidad y seguridad.
  • Asignación de trabajo de desarrollo de equipos y subcontratistas.
  • Las decisiones sobre la inclusión de los componentes off-the-shelf.
  • Inserción en un sistema más amplio.

 

Patrones de Arquitectura

Los patrones de la arquitectura son formularios pre-confeccionados que solucionan los problemas recurrentes de la arquitectura. Un framework (marco de trabajo) de arquitectura o una infraestructura de arquitectura (middleware) es un conjunto de componentes sobre los cuales pude construir un cierto tipo de arquitectura. Muchas de las dificultades más grandes que presenta la arquitectura pueden ser resueltas en el framework o en la infrestructura, usualmente enfocada hacia un dominio específico: comando y control, MIS, sistema de control y así sucesivamente. 

Ejemplos de Patrones de Arquitectura

[BUS96] agrupa patrones de arquitectura de acuerdo a las características de los sistemas en los que son más aplicables, con una categoría tratando cuestiones más generales de la estructuración.
La tabla las categorías presentadas en 
[BUS96] y los patrones que contienen.

 

Categoría Patrón
Estructura Layers
Pipes and Filters
Blackboard
Sistemas Distribuidos Broker
Sistemas Interactivos Model-View-Controller
Presentation-Abstraction-Control
Sistemas Adaptables Reflection
Microkernel

Vea [BUS96] para una descripción completa de estos patrones.

Estilo de Arquitectura

Un arquitectura de software o solo una vista arquitectónica debe tener un atributo llamado estilo de arquitectura, laq que reduce el conjunto de formas posibles de las que se puede elegir e impone un cierto grado de uniformidad a la arquitectura. Los estilos pueden ser definidos por un conjunto de patrones o por la elección de componentes específicos o conectores como los bloques básicos de construcción.