Arquitectura de software
Keywords: Arquitectura de software, Wikipedia
| WikiLetra | Este artículo carece de formato adecuado a las convenciones de estilo de Wikipedia. Por favor, edítalo para cumplir con ellas. No elimines este aviso hasta que lo hayas hecho. |
La arquitectura de software es el arte de proyectar y construir sistemas lógicos para computadoras; y como todo arte debe cultivarse y se adquiere con la experiencia.
La construcción de software desde el ángulo de su diseño: la demanda de diseño de software parece no disminuir como se creía antes del boom de Internet y las Tecnologías de Información (TI) en un mundo cada vez más dependiente del software. Pero ¿quien diseña estos cúmulos de código que se ejecutan en las computadoras?, que tan bien definido está el papel del arquitecto de software, que tanto depende para el éxito una empresa contar con bueno diseños.
Wilson nos habla de un diseño primariamente guiado por la arquitectura y dentro de este contexto, nos da su definición: “arquitectura es un plan unificado y coherente respecto a la tecnología. La arquitectura de TI, enfatiza un marco de procesos interactivos y enfocados intensamente en la tecnología para cumplir las metas del negocio. Un arquitecto en TI, es una persona que diseña y guía un plan tecnológico coherente y unificado. En otras palabras, ambos la arquitectura y el arquitecto, dan una dirección al trabajo (4).
El multicitado articulo The 4+1 View Model of Software Architecture de Kruchten, nos menciona: “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 (Kruchten 42).
Jacobson uno de los grandes gurus en éste campo menciona: “El papel de la arquitectura de software es parecido al papel que juega la arquitectura en la construcción de edificios. El edificio se contempla desde varios puntos de vista […] Esto permite a un constructor ver la imagen completa antes de que comience la construcción. Análogamente, la arquitectura en un sistema de software se describe mediante diferentes vistas del sistema en construcción” (Jacobson 5). “La arquitectura es una vista del diseño completo con las características más importantes resaltadas, dejando los detalles de lado. Debido a que —lo que es significativo— depende en parte de una valoración, que a su vez, se adquiere con la experiencia de su creación. No obstante, el proceso ayuda al arquitecto a centrarse en los objetivos adecuados, como la comprensibilidad, la capacidad de adaptación al cambio, y la reutilización” (Jacobson 6).
“Como un edificio, un sistema de software es una única entidad, pero al arquitecto del software y a los desarrolladores les resulta útil presentar el sistema desde diferentes perspectivas para comprender mejor el diseño. Estas perspectivas son vistas del modelo del sistema. Todas juntas representan la arquitectura” (Jacobson 57).
A este punto podemos destacar elementos clave de cada autor: el tratamiento de Wilson señala a los procesos interactivos y enfocados intensamente en la tecnología, mientras que para Kruchten es el resultado de ensamblar un cierto número de elementos arquitectónicos de forma adecuada. Para Jacobson la arquitectura se describe mediante diferentes vistas del sistema en construcción, a la vez que resalta la analogía de la construcción de sistemas con la construcción de edificios. Aquí una cosa si queda clara: la experiencia es requerida. Experiencia que supera a la figura del programador, es decir un arquitecto de software es mucho más que eso.
Para concebir en mayor medida la importancia de lo anterior, veamos rápidamente lo que es un mal diseño, el echo de que los sistemas funcionen, no es garantía de un buen diseño cuando no soportan el cambio: es imposible medir la propagación de errores cuando se los quiere extender o modificar, tal como lo señala Martin, entre otros de los síntomas de un mal diseño (2).
Hemos visto que la arquitectura de software ha sido abordada bajo diferentes contextos, lo que desemboca en una gama de matices interesantes y diferentes; nosotros preferimos darle una definición más simple pero profunda: la arquitectura de software es el arte de proyectar y construir sistemas lógicos para computadoras. Y como todo arte debe cultivarse, y se adquiere con la experiencia. Partiendo de aquí es importante observar que este rol a sido ampliamente ignorado por la industria, bajo el concepto erróneo de que los sistemas se deben hacer con mano de obra barata, y que la experiencia no es requisito importante, siguiendo la metáfora de Jacobson, es el equivalente de construir un edificio con albañiles inexpertos sin la intervención de un arquitecto para su diseño.
Creemos que en gran medida esta es la causa de la crisis de los sistemas, y que constituye un punto clave, así como estratégico, para corregir por las nuevas generaciones de profesionistas en una variedad de disciplinas.
Bibliografía
Booch, Grady. Object-Oriented Analysis and Design. Second Edition. Benjamin/Cummings, Redwood: 1994.
Jacobson, Ivar, Grady Booch, and James Rumbaugh. El Proceso Unificado de Desarrollo de Software. México: Addison-Wesley, 1999.
Kruchten, Philippe. "Architectural Blueprints--The 4+1 View Model of Software Architecture". IEEE Software, Institute of Electrical and Electronics Engineers. November 1995, pp. 42-50.
Larman, Craig. UML y Patrones, Introducción al análisis y diseño orientado a objetos. México: Prentice Hall, 1999.
Martin, Robert C. "Design Principles and Design Patterns". Objectmentor <http://www.objectmentor.com>
Muller, Pierre-Alain. Modèlisation Object avec UML. Paris: Eyrolles, 1997.
Wilson, Scott F. Analyzing Requirements and Defining Solution Architectures. Redmond: Microsoft Press, 1999.
Fernández Aramayo, David Ricardo. Arquitectura de Software. Universidad Tecmilenio, ITESM.
