domingo, 15 de mayo de 2016





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.
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.

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:

  • -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:

  • -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"