Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ARQUITECTURA DE SOFTWARE
Aplicada esta idea a la informática, habría, por tanto, una estructura conceptual y una
organización lógica dentro de una computadora o de un sistema basado en
computadoras, desde el punto de vista de su uso o diseño. Pero también, una realización
particular o física de todo esto.
Las arquitecturas de sistemas están gobernadas por leyes físicas y dichos, sistemas
físicos maduros tienen, a su vez, arquitecturas estables: Aviones, autos y barcos, puentes
y edificios, etc.
Además, dichas arquitecturas surgen de procesos en los que hay experiencia detrás,
conocimientos obtenidos por ensayo y error, reutilización y refinamiento de soluciones
probadas y resultados predecibles.
En el caso del software hay diferencias significativas con las consideraciones que
acabamos de realizar. Así, no hay reglas equivalentes a las de la física. Sino que es
necesario que nosotros las definamos. Esto es así porque el software no es una realidad
tangible por sí misma, como la arquitectura física. Aquí tenemos que hacer modelos,
contemplar muchos estados o situaciones posibles, manejar complejidad, atender a los
cambios en los requerimientos y la tecnología, generar sistemas adaptables, evolutivos y
todo ello procurando un bajo costos de replicación y distribución.
Así, podemos definir la arquitectura del Software como la organización fundamental del
sistema que incluye a sus componentes, sus relaciones entre ellos y el ambiente y los
principios que dictan su diseño y evolución. Involucra un conjunto de decisiones
significativas acerca de la organización del sistema. Selecciona sus elementos
estructurales y sus interfaces. Establece un comportamiento, especificado en función de
la colaboración de los elementos y compone sub-sistemas más grandes a partir de
elementos estructurales y elementos con comportamiento.
Diseñar la arquitectura del software es definir los aspectos estructurales como una
composición de componentes, las estructuras globales de control, los protocolos de
comunicación, la sincronización y acceso a los datos, la asignación de la funcionalidad a
los elementos del diseño, la composición de estos elementos, su distribución física, su
escalabilidad y su desempeño. Define al sistema en términos de elementos
computacionales y de las interacciones entre ellos. La arquitectura muestra la
correspondencia entre los requerimientos de sistemas y los elementos del sistema
construido, proveyendo así una exposición racional para las decisiones de diseño.
Interacciones. Ocurren entre los elementos a nivel de diseño, pudiendo ser tan simples
como las llamadas a procedimientos o variables de acceso, o tan complejas y
semánticamente ricas como los protocolos del modelo cliente/servidor, los protocolos de
acceso a las bases de datos, la difusión de los eventos asincrónicos y las ráfagas o
stream.
Una relación, además denota una conexión entre los componentes. Una relación puede
ser estática o dinámica.
Propiedad Funcional. Tiene que ver con un aspecto de la funcionalidad del sistema,
como su nombre lo indica. Está usualmente relacionada con un requerimiento.
Propiedad No Funcional. Trata de una característica del sistema que no está cubierta en
la descripción funcional del mismo. Típicamente se refiere a aspectos tales como
confiabilidad, compatibilidad, costo, facilidad de uso, etc.
Gabriela Quiroga Heredia
Dentro de los niveles en los que podemos descomponer un diseño de software podríamos
hablar de tres: arquitectura, código y el ejecutable.
Código. El diseño involucra algoritmos y estructuras de datos. Los componentes son las
partes primitivas de lenguajes de programación, tales como números, caracteres, etc. Los
mecanismos de composición son arreglos, registros, procedimientos, etc.
Adaptabilidad. Esta característica mide cuan fácil es hacer cambios en una arquitectura;
de seguro, esto implica componentes poco acoplados. Un sistema de software adaptable
tiene una alta trazabilidad; esto quiere decir, que hay una relación clara entre los
diferentes niveles de abstracción.
Por lo tanto, la arquitectura debe poseer unos ciertos atributos de calidad. Pero lo más
interesante del caso es que cada decisión incorporada en una arquitectura de software
puede afectar potencialmente dichos atributos de calidad. Lo cierto es que los atributos no
Gabriela Quiroga Heredia
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.
Los requerimientos del software moderno son cada vez más complejos puesto que los
usuarios esperan más de sus aplicaciones. Las aplicaciones de escritorio independientes
y sencillas ya no son lo suficientemente buenas en la mayoría de los escenarios
comerciales y empresariales. En nuestro mundo conectado, la aplicación debe interactuar
con otras aplicaciones y servicios y ejecutarse en una serie de entornos, como la nube, y
en dispositivos portátiles. Los diseños monolíticos comunes en el pasado se han
reemplazado por software componentizado orientado al servicio, que utiliza marcos,
sistemas operativos, hosts en tiempo de ejecución y redes para implementar
características que eran insólitas hasta hace unos pocos años.
Gabriela Quiroga Heredia
El software también debe cumplir varios criterios fundamentales para tener éxito. Debe
proporcionar seguridad de manera que la aplicación y sus datos estén protegidos contra
ataques malintencionados y errores accidentales. Debe ser robusto y confiable para
minimizar los errores y los costos asociados. Debe ejecutarse dentro de los parámetros
requeridos para satisfacer las necesidades del cliente, como un tiempo de respuesta
máximo o una capacidad de carga de trabajo específica. Debe ser sostenible para poder
minimizar los costos de administración y soporte técnico y suficientemente extensible para
permitir los cambios y actualizaciones inevitables que se requerirán con el tiempo.
Todos estos factores implican algunas desventajas. Por ejemplo, la implementación de los
mecanismos más seguros mediante un cifrado complejo afectará el rendimiento. La
implementación de opciones de configuración y actualización de amplio rango puede
hacer que la implementación y administración sean más complicadas. Además, cuanto
más complejo sea el diseño, más costará implementarlo. Una buena arquitectura tendrá
como objetivo equilibrar estos factores para producir el resultado óptimo en el escenario
específico.