¿Que es la arquitectura de software y por qué es importante?

Creo que no podía estrenarse este blog con otro post (aparte del ya clásico post-welcome) que no fuera uno que nos hablase sobre que es la arquitectura de software y el porqué es importante.

Es difícil definir que es la arquitectura y el diseño de software. Me gusta pensar que se trata de un proceso en el que se toman decisiones para que el software cumpla con los requisitos técnicos y funcionales a la vez que se optimizan al máximo los clásicos atributos del software como el rendimiento, la seguridad, la escalabilidad, la simpleza etc.

Esta serie de decisiones están sujetas a un rango muy amplio de variables y factores. Hay que tener en cuenta que cada una de estas decisiones pueden tener un fuerte impacto en el resultado final, haciendo que alguno de los atributos del software que hemos mencionado antes (rendimiento, seguridad, escalabilidad, simpleza…) no se cumplan.

Me gusta la definición de Bass, Clements, and Kazman en su libro Software Architecture in Practice, que además nos avanza algunos detalles sobre lo que no es (o no incumbe) arquitectura de software:

La arquitectura de software de un sistema o programa de computación es la estructura o estructuras del sistema, que comprende elementos de software, las propiedades externamente visibles de esos elementos, y las relaciones entre ellos. Arquitectura se refiere a la parte pública de las interfaces; la información privada de los elementos (los detalles que tienen que ver exclusivamente con la aplicación interna) no son de arquitectura.

Los riesgos expuestos por arquitecturas pobres incluyen software que es inestable, que es incapaz de soportar los requerimientos de negocio existente o futuro, o es difícil de implementar o administrar en un entorno de producción. Los sistemas deben ser diseñados con la consideración del usuario, la infraestructura, y los objetivos de negocio.

En Cranium tenemos la idea de que en este espacio se traten temas que abarquen el desarrollo de software a todos los niveles, desde la arquitectura hasta el algoritmo recursivo para recorrer un árbol, por poner un ejemplo; así como patrones, herramientas, tecnologías etc.

Aprovecho para comentar este hecho, porque en este caso, ya que estamos hablando de arquitectura, hay que saber diferenciar entre diseño y arquitectura. La arquitectura de software se centra en como los diferentes elementos y componentes de un sistema actúan e interactúan entre sí. Las selecciones de estructuras de datos, los algoritmos, los patrones o los detalles sobre la implementación de estos componentes forman parte del diseño del software, no de la arquitectura. Acordaos de la definición de arquitectura de software que daban  Bass, Clements, and Kazman: la arquitectura se refiere al comportamiento publico de los componentes y a como se relacionan entre si, no a la parte privada de los mismos, es decir, cuando definimos la arquitectura de un sistema no tenemos que preocuparnos de cómo están diseñados internamente esos componentes, eso forma parte del diseño.

Arquitectura y diseño son dos áreas cuyas funciones muy a menudo se superponen. Pero no nos preocupemos en demasía en diferenciar entre arquitectura y diseño, es mucho más productivo preocuparse en cómo combinar  estas dos áreas del desarrollo de software. En algunos casos, las decisiones son claramente de arquitectura, sobre todo cuando son decisiones que tienen que ver con la infraestructura de la que disponemos para el proyecto. En otros casos, las decisiones son más sobre el diseño, y cómo pueden ayudarle a definir más claramente la arquitectura.

Estas serían las principales cuestiones de alto nivel a tener en cuenta cuando se está considerando la arquitectura de un sistema o aplicación:

  • ¿Cómo utilizaran la aplicación los usuarios?
  • ¿Cómo se desplegara el proyecto en producción?
  • ¿Cuáles son los requerimientos en cuanto a características de la calidad de la aplicación? seguridad, rendimiento, concurrencia, internacionalización, configuración, escalabilidad, facilidad de uso etc.
  • ¿Cómo puedo diseñar la aplicación para que sea flexible y fácil de mantener a lo largo del tiempo?
  • ¿Afectaran las nuevas tendencias arquitectónicas, tecnológicas o de diseño ahora o después?

 

Advertisement

Un pensamiento en “¿Que es la arquitectura de software y por qué es importante?

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Blog de WordPress.com.
Theme: Esquire by Matthew Buchanan Fonts on this blog..

Seguir

Get every new post delivered to your Inbox.