Bienvenida
Les doy la más cordial Bienvenida a este Blog
educativo, dirigido a profesionales, estudiantes de Arquitectura y
a todos aquellos que están relacionados con el mundo fascinante de la
Arquitectura de Software, en esta etapa introductoria, aprenderemos los
conceptos básicos, la importancia y el Rol del Arquitecto en el Siglo XXI,
puesto que en la última década la Arquitectura de Software ha
surgido como disciplina que intenta contrarrestar efectos negativos, como
los tiempos de ejecución de un proyecto, ausencia de métodos controlados para
cumplir con los objetivos planteados, continuos cambios en las funcionalidades
requeridas, etc ocupando cada vez más un rol significativo en la estrategia de
negocio de una organización que basa su operativa en el software.
Espero que este blog sea productivo para todos
ustedes, recibiré sus mensajes, comentarios para absolver cualquier duda
relacionada a este Tema que está en boga en el mundo de la Arquitectura.
Saludos Cordiales.
¿Qué es la arquitectura de software?
En
los inicios de la informática, la programación se consideraba
un arte y se desarrollaba como tal, debido a la dificultad que entrañaba para
la mayoría de las personas, pero con el tiempo se han ido descubriendo y
desarrollando formas y guías generales, con base a las cuales se puedan
resolver los problemas. A estas, se les ha denominado Arquitectura de Software,
porque, a semejanza de los planos de un edificio o construcción, estas indican
la estructura, funcionamiento e interacción entre las partes del software. En
el libro "An introduction to Software Architecture", David Garlan y
Mary Shaw definen que la Arquitectura es un nivel de diseño que hace foco en
aspectos "más allá de los algoritmos y estructuras de datos de la
computación; el diseño y especificación de la estructura global del sistema es
un nuevo tipo de problema".
La Arquitectura del Software es el diseño de más alto nivel de la estructura
de un sistema.- Una Arquitectura de Software, también denominada Arquitectura lógica, consiste en un conjunto de patrones y abstracciones coherentes que proporcionan el marco de referencia necesario para guiar la construcción.
- Una arquitectura de software se selecciona y diseña con base en objetivos (requerimientos) y restricciones. Los objetivos son aquellos prefijados para el sistema de información, pero no solamente los de tipo funcional, también otros objetivos como la mantenibilidad, auditabilidad, flexibilidad e interacción con otros sistemas de información. Las restricciones son aquellas limitaciones derivadas de las tecnologías disponibles para implementar sistemas de información. Unas arquitecturas son más recomendables de implementar con ciertas tecnologías mientras que otras tecnologías no son aptas para determinadas arquitecturas. Por ejemplo, no es viable emplear una arquitectura de software de tres capas para implementar sistemas en tiempo real.
- 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. Toda arquitectura debe ser implementable en una arquitectura física, que consiste simplemente en determinar qué computadora tendrá asignada cada tarea.
Por qué es importante la arquitectura de software?
La arquitectura de software es de especial
importancia ya que la manera en que se estructura un sistema tiene un impacto
directo sobre la capacidad de este para satisfacer lo que se conoce como los
atributos de calidad del sistema. Ejemplos de atributos de calidad son el
desempeño, que tiene que ver con el tiempo de respuesta del sistema a las
peticiones que se le hacen, la usabilidad, que tiene que ver con qué tan
sencillo les resulta a los usuarios realizar operaciones con el sistema, o bien
la modificabilidad, que tiene que ver con qué tan simple resulta introducir
cambios en el sistema. Los atributos de calidad son parte de los requerimientos
(no funcionales) del sistema y son características que deben expresarse de
forma cuantitativa. No tiene sentido, por ejemplo, decir que el sistema debe
devolver una petición “de manera rápida”, o presentar una página “ligera”, ya que
no es posible evaluar objetivamente si el sistema cubre o no esos
requerimientos.
La manera en que se estructura un sistema
permitirá o impedirá que se satisfagan los atributos de calidad. Por ejemplo,
un sistema estructurado de tal manera que una petición deba transitar por
muchos componentes antes de que se devuelva una respuesta podría tener un
desempeño pobre. Por otro lado, un sistema estructurado de tal manera que los
componentes estén altamente acoplados entre ellos limitará severamente la modificabilidad.
Curiosamente, la estructuración tiene un impacto mucho menor respecto a los
requerimientos funcionales del sistema. Por ejemplo, un sistema difícil de
modificar puede satisfacer plenamente los requerimientos funcionales que se le
imponen.
Además de los atributos de calidad, la
arquitectura de software juega un papel fundamental para guiar el desarrollo.
Una de las múltiples estructuras que la componen se enfoca en partir el sistema
en componentes que serán desarrollados por individuos o grupos de individuos.
La identificación de esta estructura de asignación de trabajo es esencial para
apoyar las tareas de planeación del proyecto.
Finalmente, los diseños arquitectónicos que se
crean en una organización pueden ser reutilizados para crear sistemas
distintos. Esto permite reducir costos y aumentar la calidad, sobre todo si
dichos diseños han resultado previamente en sistemas exitosos.
¿Para qué sirve una Arquitectura de Software?
Cuando
planeamos un sistema la mayoría de nosotros tenemos presente que hay que
definir la "Arquitectura", pero ¿realmente sabemos el por qué o nos
dejamos llevar por la tendencia del momento en el mercado (3-capas, n-capas,
SOA, etc)?
Una Arquitectura de Software es un modelo abstracto reusable que define la estructura para construir un sistema. Su definición envuelve decisiones de diseño que se traducen en atributos de calidad como:
Una Arquitectura de Software es un modelo abstracto reusable que define la estructura para construir un sistema. Su definición envuelve decisiones de diseño que se traducen en atributos de calidad como:
- -Rendimiento,
- -Seguridad,
- -Costo de hacer un cambio,
- -Confiabilidad y
- -Usabilidad
La Arquitectura representa la clave para comprender, organizar y comunicar un
sistema, además, permite implantar conceptos como el reuso y facilita la
evolución de la solución.
Debido a la complejidad de los sistemas, la forma de documentar una Arquitectura es mediante Vistas, es decir, mediante descripciones simplificadas del sistema desde una perspectiva particular. El modelo más conocido de vistas es el que define RUP (4+1) vistas que comprende:
Debido a la complejidad de los sistemas, la forma de documentar una Arquitectura es mediante Vistas, es decir, mediante descripciones simplificadas del sistema desde una perspectiva particular. El modelo más conocido de vistas es el que define RUP (4+1) vistas que comprende:
- -Vista del Diseño
- -Vista del Proceso
- -Vista de la Implementación
- -Vista del Deployment
- y la vista común que es:
- -Vista de Casos de Uso
Durante el desarrollo de una Arquitectura de Software es recomendable
considerar los siguientes factores:
- -Casos de Uso
- -Experiencia del Arquitecto
- -Uso de Patrones
- -Middleware/Frameworks existentes
- -Sistemas (Legacy y otros)
- -Estándares y Políticas
- -Requerimientos No-Funcionales
- -Distribución
Por último ten presente que "una arquitectura correcta lleva al éxito a
un sistema. Una arquitectura incorrecta generalmente indica una receta segura
al desastre".