Introducción a la arquitectura de sistemas de software
El concepto de arquitectura se usa de forma amplia y en campos muy distintos, pero en general, tiene mucho que ver con el diseño de estructuras. En el campo del software, la arquitectura nos identifica los elementos más importantes de un sistema así como sus relaciones. Es decir nos da una visión global del sistema. Su importancia radica en que necesitamos arquitectura para entender el sistema, organizar su desarrollo, plantear la reutilización del software y hacerlo evolucionar.
Cómo determinar los elementos que definen una arquitectura es una tarea muy importante para los informáticos; generalmente las metodologías de desarrollo indican principios para identificar y diseñar una arquitectura, aunque por ahora la ayuda real que ofrecen es muy limitada al basarse en principios muy genéricos.
Las arquitecturas software no responden únicamente a requisitos estructurales, sino que están relacionadas con aspectos de rendimiento, uso, reutilización, restricciones económicas y tecnológicas, e incluso cuestiones estéticas.
Actualmente existen muchas metodologías de desarrollo de software, desde métodos muy “pesados” y burocráticos, métodos ajustables al proyecto y a las condiciones de desarrollo, hasta métodos “ligeros” que surgen como respuesta a los excesos “formales” de otros métodos.
Partiendo de los principios de tantas y diversas metodologías, resulta algo complicado sacar una visión unificada sobre el diseño arquitectónico; sin embargo; destacan una serie de elementos comunes en aquellas que más se centran en este tema. Uno de estos principios comunes es la existencia de una fase en la que se establece o diseña una arquitectura base; otro sería la altísima dependencia que existe entre los casos de uso (interacciones entre el usuario y el sistema) y la arquitectura.
Desde un punto de vista arquitectónico, no todos los casos de uso tienen la misma importancia, destacando aquellos que nos ayudan a mitigar los riesgos más importantes y sobre todo aquellos que representan la funcionalidad básica del sistema a construir. Esta arquitectura base estará especificada por diagramas que muestren subsistemas, interfaces entre los mismos, diagramas de componentes, clases, descripciones diversas y, por el conjunto de casos de uso básicos. Este conjunto de especificaciones nos permiten validar la arquitectura con los clientes y los desarrolladores, y asegurarnos que es adecuada para implementar la funcionalidad básica deseada.
A partir de aquí, lo común sería desarrollar el sistema de forma iterativa hasta tenerlo funcionalmente completo. Una visión alternativa sería identificar el tipo de sistema que se quiere construir; tal vez no haya dos aplicaciones iguales, pero sí existen claros paralelismos entre las aplicaciones construidas para resolver problemas similares. Estudiar aplicaciones del mismo tipo tiene muchas ventajas ya que nos ayuda a entender las necesidades del cliente y las soluciones ya encontradas por otros. Este método podría minimizar las desventajas de utilizar una metodología tradicional de desarrollo.
Gracias a la experiencia en otras ramas informáticas, desde el inicio del desarrollo de una aplicación, es posible hallar componentes que implementen tecnologías o ciertas funcionalidades e integrarlos dentro del proceso de desarrollo de software.
Por otra parte; identificar el tipo de sistema a construir nos permite examinar la arquitectura de sistemas ya construidos, comprender los requisitos a los que se enfrentan, y compararlos con los de nuestros clientes. Si tenemos en cuenta que en cualquier tipo de sistema (por ejemplo: portales web) existen necesidades similares, muchos de los componentes que se usan en su desarrollo suelen ser los mismos (por ejemplo: parsers Xml, motores de transformación Xslt, componentes de acceso a datos, buscadores, carritos de la compra, gestores de contenidos, etc.).
Las metodologías que gestionen de forma directa las cuestiones arquitectónicas y estructurales, podrán obtener no sólo productos de mayor calidad, sino a un menor costo y en menos tiempo. Esto se debe a que los riesgos arquitectónicos del proyecto son menores y están mucho más controlados, y que al poder integrar una visión orientada a componentes, las posibilidades de reutilizar software ya desarrollado son mucho mayores, con las ventajas que ello implica.
Construir una arquitectura es una actividad que permite desarrollar ideas nuevas así como una oportunidad de usar la experiencia acumulada, siendo casi siempre responsabilidad del desarrollador crear un producto de calidad y por tanto conocer el tipo de sistema a construir. Afortunadamente para esto último, los lenguajes de patrones nos pueden proporcionar una inestimable ayuda.
En los inicios de la informática, la programación se consideraba un arte, debido a la dificultad que entrañaba para la mayoría de los mortales, pero con el tiempo se han ido desarrollando metodologías que permiten establecer los fundamentos para que analistas, diseñadores, programadores, etc. trabajen en una línea común que logre alcanzar los objetivos del sistema de información, cubriendo todas las necesidades y requerimientos.
Fuente: Informática I de la facultad de contaduría y administración, UNAM.