Diseño y Arquitectura de Software
El diseño y la arquitectura de software se refieren a cómo un sistema de software se estructura en componentes y conectores, cómo se descomponen las responsabilidades y cómo las decisiones de diseño satisfacen las necesidades funcionales y los atributos de calidad.
Definition
El diseño de software es el proceso de definir la arquitectura, los componentes, las interfaces y otras características de un sistema, y la arquitectura de software es el conjunto de estructuras que comprenden los elementos del sistema, sus relaciones y las propiedades de ambos.
Scope
Esta área abarca estilos y patrones arquitectónicos (en capas, cliente-servidor, microservicios, impulsado por eventos, tubería y filtro); principios de diseño como modularidad, ocultamiento de información, cohesión, acoplamiento y separación de preocupaciones; diseño orientado a objetos y basado en componentes; patrones de diseño; atributos de calidad arquitectónica y sus compensaciones; y notaciones de modelado como UML utilizadas para expresar diseños.
Sub-topics
Core questions
- ¿Cómo debe descomponerse un sistema en módulos y componentes?
- ¿Qué estilo arquitectónico soporta mejor los atributos de calidad requeridos?
- ¿Cómo guían los principios de diseño como el acoplamiento y la cohesión una buena estructura?
- ¿Cómo se resuelven los problemas de diseño recurrentes mediante patrones reutilizables?
Key theories
- Ocultamiento de información y modularidad
- Parnas argumentó que los módulos deben definirse para ocultar las decisiones de diseño propensas a cambiar detrás de interfaces estables, de modo que el cambio se localice; este principio subyace a la modularidad, la encapsulación y el bajo acoplamiento.
- Atributos de calidad arquitectónica y compensaciones
- La arquitectura está impulsada por atributos de calidad como el rendimiento, la modificabilidad, la disponibilidad y la seguridad; debido a que estos entran en conflicto, la arquitectura se trata fundamentalmente de razonar sobre las compensaciones guiadas por tácticas y patrones.
- Patrones de diseño
- Los problemas de diseño recurrentes tienen soluciones bien comprendidas y nombradas —patrones creacionales, estructurales y de comportamiento— que capturan la práctica experta y proporcionan un vocabulario compartido para el diseño orientado a objetos.
Clinical relevance
Las decisiones de arquitectura son las más difíciles de cambiar posteriormente y las que más determinan los atributos de calidad de un sistema, por lo que un diseño y una arquitectura sólidos reducen el costo de mantenimiento a largo plazo, permiten la escalabilidad y la evolución, y dan forma a la organización del equipo.
Evidence & guidelines
La norma ISO/IEC/IEEE 42010 estandariza la descripción de la arquitectura, y el área de conocimiento de Diseño de Software de SWEBOK junto con textos de referencia como Software Architecture in Practice proporcionan orientación consensuada.
History
Los principios de diseño modular fueron articulados por Parnas a principios de la década de 1970. El diseño orientado a objetos y los patrones de diseño maduraron en las décadas de 1980 y 1990, la arquitectura de software surgió como una disciplina distinta con el trabajo de Shaw y Garlan a mediados de la década de 1990, y los estilos orientados a servicios y microservicios siguieron en las décadas de 2000 y 2010.
Debates
- Arquitectura monolítica versus microservicios
- Se debate ampliamente si construir sistemas como un único monolito desplegable o como muchos servicios desplegables de forma independiente; los microservicios ofrecen escalado y despliegue independientes a costa de la complejidad del sistema distribuido, por lo que la elección correcta depende de la escala y la estructura organizacional.
Key figures
- David Parnas
- Mary Shaw
- Len Bass
- Erich Gamma
- Grady Booch
Related topics
Seminal works
- parnas1972
- gamma1994
- bass2012
Frequently asked questions
- ¿Cuál es la diferencia entre diseño y arquitectura?
- La arquitectura se refiere a las estructuras de más alto nivel y a las decisiones más costosas de cambiar —componentes principales, sus interacciones y atributos de calidad de todo el sistema—, mientras que el diseño cubre la estructura interna más detallada de esos componentes; el límite es de importancia más que una línea divisoria clara.
- ¿Por qué son importantes los patrones de diseño?
- Los patrones capturan soluciones probadas a problemas de diseño recurrentes y proporcionan a los ingenieros un vocabulario compartido, lo que facilita la comunicación, el razonamiento y la evolución de los diseños; son una guía para aplicar con criterio, no recetas obligatorias.