
La arquitectura de software es el conjunto de estructuras necesarias para razonar sobre un sistema de software y la disciplina de crear dichas estructuras y sistemas. Cada estructura comprende elementos de software, relaciones entre ellos y propiedades tanto de los elementos como de las relaciones. [ 1 ]
La arquitectura de un sistema de software es una metáfora , análoga a la arquitectura de un edificio. [ 2 ] Funciona como los planos del sistema y del proyecto de desarrollo, que la gestión del proyecto puede utilizar posteriormente para extrapolar las tareas necesarias que deben ejecutar los equipos y las personas involucradas.
La arquitectura de software se trata de tomar decisiones estructurales fundamentales que son costosas de cambiar una vez implementadas. Las decisiones de arquitectura de software incluyen opciones estructurales específicas de las posibilidades en el diseño del software . Hay dos leyes fundamentales en la arquitectura de software: [ 3 ] [ 4 ]
- Todo implica una compensación.
- "El porqué es más importante que el cómo"
El "Kata arquitectónico" es un trabajo en equipo que permite generar una solución arquitectónica que se ajuste a las necesidades. Cada equipo extrae y prioriza las características arquitectónicas (también conocidas como requisitos no funcionales ) y, a continuación, modela los componentes en consecuencia. El equipo puede utilizar el Modelo C4 , un método flexible para modelar la arquitectura de forma precisa. Cabe destacar que la comunicación síncrona entre los componentes arquitectónicos los interrelaciona y deben compartir las mismas características arquitectónicas. [ 4 ]
Documentar la arquitectura del software facilita la comunicación entre las partes interesadas , registra las decisiones iniciales sobre el diseño de alto nivel y permite la reutilización de componentes de diseño entre proyectos. [ 5 ] : 29–35
El diseño de la arquitectura de software se suele contraponer al diseño de aplicaciones de software . Mientras que el diseño de aplicaciones se centra en el diseño de los procesos y los datos que dan soporte a la funcionalidad requerida (los servicios que ofrece el sistema), el diseño de la arquitectura de software se centra en el diseño de la infraestructura dentro de la cual se puede realizar y ejecutar la funcionalidad de la aplicación, de manera que dicha funcionalidad se proporcione de forma que cumpla con los requisitos no funcionales del sistema .
Las arquitecturas de software se pueden clasificar en dos tipos principales: arquitectura monolítica y arquitectura distribuida , cada una con sus propias subcategorías. [ 4 ]
La arquitectura de software tiende a volverse más compleja con el tiempo. Los arquitectos de software deberían usar " funciones de aptitud " para mantener la arquitectura bajo control de forma continua . [ 4 ]

Alcance
Las opiniones varían en cuanto al alcance de las arquitecturas de software: [ 6 ]
- Estructura macroscópica del sistema : se refiere a la arquitectura como una abstracción de nivel superior de un sistema de software que consiste en una colección de componentes computacionales junto con conectores que describen la interacción entre estos componentes. [ 7 ]
- Lo importante —sea lo que sea— : esto se refiere al hecho de que los arquitectos de software deben preocuparse por aquellas decisiones que tienen un alto impacto en el sistema y sus partes interesadas. [ 8 ]
- Aquello que es fundamental para comprender un sistema en su entorno [ 9 ]
- Aspectos que la gente percibe como difíciles de cambiar : dado que el diseño de la arquitectura se realiza al inicio del ciclo de vida de un sistema de software, el arquitecto debe centrarse en las decisiones que "tienen que" ser correctas desde el principio. Siguiendo esta línea de pensamiento, los problemas de diseño arquitectónico pueden dejar de ser arquitectónicos una vez que se supera su irreversibilidad. [ 8 ]
- Un conjunto de decisiones de diseño arquitectónico : la arquitectura de software no debe considerarse simplemente un conjunto de modelos o estructuras, sino que debe incluir las decisiones que conducen a estas estructuras particulares y la lógica que las sustenta. [ 10 ] Esta perspectiva ha dado lugar a una investigación sustancial sobre la gestión del conocimiento de la arquitectura de software . [ 11 ]
No existe una distinción tajante entre arquitectura de software y diseño e ingeniería de requisitos (véase Campos relacionados más adelante). Todos forman parte de una «cadena de intencionalidad» que va desde las intenciones de alto nivel hasta los detalles de bajo nivel. [ 12 ] : 18
Patrones y estilos

Un patrón de arquitectura de software es una solución reutilizable y probada para un problema recurrente a nivel de sistema, que aborda aspectos relacionados con la estructura general, las interacciones entre componentes y los atributos de calidad del sistema. Los patrones de arquitectura de software operan a un nivel de abstracción superior al de los patrones de diseño de software , resolviendo desafíos más amplios a nivel de sistema. Si bien estos patrones suelen afectar aspectos a nivel de sistema, la distinción entre patrones arquitectónicos y estilos arquitectónicos a veces puede ser difusa. Un ejemplo es Circuit Breaker . [ 13 ] [ 14 ] [ 15 ]
El estilo de arquitectura de software es una organización estructural de alto nivel que define la organización general del sistema, especificando cómo se organizan los componentes, cómo interactúan y las restricciones sobre dichas interacciones. Los estilos de arquitectura suelen incluir un vocabulario de tipos de componentes y conectores, así como modelos semánticos para interpretar las propiedades del sistema. Estos estilos representan el nivel más general de organización del sistema. Algunos ejemplos son la arquitectura en capas , los microservicios y la arquitectura orientada a eventos . [ 13 ] [ 14 ] [ 15 ]
Antipatrones
Los siguientes antipatrones arquitectónicos pueden surgir cuando los arquitectos toman decisiones. Estos antipatrones suelen seguir una secuencia progresiva, donde la resolución de uno puede dar lugar a la aparición de otro. [ 4 ]
- Un arquitecto puede retrasar o evitar tomar decisiones arquitectónicas por temor a equivocarse. Para abordar esto, suele ser necesaria una colaboración continua y estrecha con el equipo de desarrollo, ajustando las decisiones arquitectónicas en función de sus comentarios. Además, las decisiones generalmente se toman en el último momento posible, asegurando así que haya suficiente información para justificarlas y validarlas, evitando retrasos innecesarios que podrían provocar parálisis por análisis y obstaculizar el progreso del equipo. [ 4 ]
- Otro antipatrón puede surgir cuando las decisiones arquitectónicas se olvidan, no se documentan o no se comprenden, lo que lleva a discusiones repetidas sin resolución. Esto suele ocurrir cuando se utiliza el correo electrónico para comunicar decisiones arquitectónicas. Para abordar estos desafíos, los arquitectos suelen proporcionar justificaciones tanto técnicas como comerciales (a menudo relacionadas con el costo, la satisfacción del usuario y el tiempo de comercialización) en un único registro de la decisión arquitectónica (generalmente un Registro de Decisión Arquitectónica). Este registro puede mantenerse en un repositorio accesible, como una wiki. La comunicación por correo electrónico se centra en la naturaleza y el contexto del cambio y se dirige solo a las partes interesadas relevantes, con un enlace al registro centralizado. Esto garantiza que siempre haya una única fuente de información actualizada. Además, si una decisión arquitectónica no ofrece un valor comercial tangible, o si el valor comercial no está alineado con las partes interesadas, puede ser necesario reconsiderarla. [ 4 ]
Características
La arquitectura de software presenta las siguientes características:
Multitud de partes interesadas: los sistemas de software deben satisfacer las necesidades de diversas partes interesadas, como gerentes, propietarios, usuarios y operadores. Cada una de estas partes interesadas tiene sus propias inquietudes respecto al sistema. Equilibrar estas inquietudes y demostrar que se abordan forma parte del diseño del sistema. [ 5 ] : 29–31 Esto implica que la arquitectura implica lidiar con una amplia variedad de inquietudes y partes interesadas, y tiene un carácter multidisciplinario.
Separación de preocupaciones : la forma establecida para que los arquitectos reduzcan la complejidad es separar las preocupaciones que impulsan el diseño. La documentación de arquitectura muestra que todas las preocupaciones de las partes interesadas se abordan modelando y describiendo la arquitectura desde puntos de vista separados asociados con las diversas preocupaciones de las partes interesadas. [ 16 ] Estas descripciones separadas se denominan vistas arquitectónicas (véase, por ejemplo, el modelo de vista arquitectónica 4+1 ).
Orientado a la calidad: los enfoques clásicos de diseño de software (por ejemplo, Programación Estructurada de Jackson ) se basaban en la funcionalidad requerida y el flujo de datos a través del sistema, pero la perspectiva actual [ 5 ] : 26–28 es que la arquitectura de un sistema de software está más estrechamente relacionada con sus atributos de calidad , como tolerancia a fallos , retrocompatibilidad , extensibilidad , fiabilidad , mantenibilidad , disponibilidad , seguridad, usabilidad y otras características similares . Las preocupaciones de las partes interesadas a menudo se traducen en requisitos sobre estos atributos de calidad, que se denominan de diversas maneras requisitos no funcionales , requisitos extrafuncionales, requisitos de comportamiento o requisitos de atributos de calidad.
Estilos recurrentes: al igual que en la arquitectura de edificios, la disciplina de la arquitectura de software ha desarrollado métodos estándar para abordar problemas recurrentes. Estos "métodos estándar" reciben diversos nombres en distintos niveles de abstracción. Los términos comunes para las soluciones recurrentes son estilo arquitectónico, [ 12 ] : 273–277 táctica, [ 5 ] : 70–72 arquitectura de referencia y patrón arquitectónico . [ 17 ] [ 18 ] [ 5 ] : 203–205
Integridad conceptual: término introducido por Fred Brooks en su libro de 1975, El hombre-mes mítico, para referirse a la idea de que la arquitectura de un sistema de software representa una visión general de lo que debería hacer y cómo debería hacerlo. Esta visión debe separarse de su implementación. El arquitecto asume el rol de "guardián de la visión", asegurándose de que las adiciones al sistema estén en consonancia con la arquitectura, preservando así la integridad conceptual . [ 19 ] : 41–50
Restricciones cognitivas: Una observación realizada por primera vez en un artículo de 1967 por el programador informático Melvin Conway que señala que las organizaciones que diseñan sistemas están obligadas a producir diseños que son copias de las estructuras de comunicación de estas organizaciones. [ 20 ] Fred Brooks la dio a conocer a un público más amplio cuando citó el artículo y la idea en The Mythical Man-Month , llamándola Ley de Conway .
Motivación
La arquitectura de software es una abstracción "intelectualmente comprensible" de un sistema complejo. [ 5 ] : 5–6 Esta abstracción proporciona una serie de beneficios:
- Proporciona una base para el análisis del comportamiento de los sistemas de software antes de su construcción. [ 2 ] La capacidad de verificar que un futuro sistema de software satisface las necesidades de sus partes interesadas sin tener que construirlo representa un ahorro sustancial de costos y una mitigación de riesgos. [ 21 ] Se han desarrollado varias técnicas para realizar dichos análisis, como ATAM [ 22 ] o mediante la creación de una representación visual del sistema de software.
- Proporciona una base para la reutilización de elementos y decisiones. [ 2 ] [ 5 ] : 35 Una arquitectura de software completa o partes de ella, como estrategias y decisiones arquitectónicas individuales, pueden reutilizarse en múltiples sistemas cuyos interesados requieren atributos de calidad o funcionalidad similares, ahorrando costos de diseño y mitigando el riesgo de errores de diseño.
- Apoya las decisiones de diseño tempranas que impactan el desarrollo, la implementación y la vida útil del mantenimiento de un sistema. [ 5 ] : 31 Tomar las decisiones tempranas y de alto impacto correctas es importante para evitar sobrecostos y retrasos en el cronograma .
- Facilita la comunicación con las partes interesadas, contribuyendo a un sistema que satisface mejor sus necesidades. [ 5 ] : 29–31 Comunicar sobre sistemas complejos desde el punto de vista de las partes interesadas les ayuda a comprender las consecuencias de sus requisitos declarados y las decisiones de diseño basadas en ellos. La arquitectura permite comunicar las decisiones de diseño antes de la implementación del sistema, cuando aún son relativamente fáciles de adaptar.
- Ayuda en la gestión de riesgos. La arquitectura de software ayuda a reducir los riesgos y la probabilidad de fallos. [ 12 ] : 18
- Permite la reducción de costos . La arquitectura de software es un medio para gestionar el riesgo y los costos en proyectos de TI complejos. [ 23 ]
Historia
La comparación entre el diseño de software y la arquitectura (civil) se estableció por primera vez a finales de la década de 1960, [ 24 ] pero el término "arquitectura de software" no se generalizó hasta la década de 1990. [ 25 ] El campo de la informática había enfrentado problemas asociados con la complejidad desde su formación. [ 26 ] Los primeros problemas de complejidad fueron resueltos por los desarrolladores eligiendo las estructuras de datos adecuadas , desarrollando algoritmos y aplicando el concepto de separación de responsabilidades . Aunque el término "arquitectura de software" es relativamente nuevo en la industria, los principios fundamentales del campo han sido aplicados esporádicamente por pioneros de la ingeniería de software desde mediados de la década de 1980. Los primeros intentos de capturar y explicar la arquitectura de software de un sistema fueron imprecisos y desorganizados, a menudo caracterizados por un conjunto de diagramas de cajas y líneas . [ 27 ]
La arquitectura de software como concepto tiene su origen en las investigaciones de Edsger Dijkstra en 1968 y David Parnas a principios de la década de 1970. Estos científicos enfatizaron la importancia de la estructura de un sistema de software y la necesidad de una estructura adecuada. Durante la década de 1990, se realizó un esfuerzo conjunto para definir y codificar aspectos fundamentales de la disciplina, centrándose la investigación en estilos arquitectónicos ( patrones ), lenguajes de descripción de arquitectura , documentación de arquitectura y métodos formales . [ 28 ]
Las instituciones de investigación han desempeñado un papel fundamental en el desarrollo de la arquitectura de software como disciplina. Mary Shaw y David Garlan, de la Universidad Carnegie Mellon, publicaron en 1996 el libro « Arquitectura de software: Perspectivas sobre una disciplina emergente» , que promovió conceptos de arquitectura de software como componentes , conectores y estilos. Los esfuerzos del Instituto de Investigación de Software de la Universidad de California, Irvine, en el campo de la investigación en arquitectura de software se centran principalmente en estilos arquitectónicos, lenguajes de descripción de arquitectura y arquitecturas dinámicas.
La norma IEEE 1471-2000 , «Práctica recomendada para la descripción de la arquitectura de sistemas intensivos en software», fue la primera norma formal en el ámbito de la arquitectura de software. Fue adoptada en 2007 por la ISO como ISO/IEC 42010:2007. En noviembre de 2011, la norma IEEE 1471-2000 fue sustituida por la ISO/IEC/IEEE 42010:2011 , «Ingeniería de sistemas y software: descripción de la arquitectura» (publicada conjuntamente por la IEEE y la ISO). [ 16 ]
Mientras que en la norma IEEE 1471 la arquitectura de software se centraba en la arquitectura de "sistemas intensivos en software", definidos como "cualquier sistema en el que el software contribuye de manera esencial al diseño, la construcción, el despliegue y la evolución del sistema en su conjunto", la edición de 2011 va un paso más allá al incluir las definiciones de sistema de las normas ISO/IEC 15288 e ISO/IEC 12207 , que abarcan no solo el hardware y el software, sino también "personas, procesos, procedimientos, instalaciones, materiales y entidades que se dan de forma natural". Esto refleja la relación entre la arquitectura de software, la arquitectura empresarial y la arquitectura de soluciones .
Actividades de arquitectura
La toma de decisiones arquitectónicas implica recopilar suficiente información relevante, proporcionar justificación para la decisión, documentar la decisión y su fundamento, y comunicarla eficazmente a las partes interesadas pertinentes. [ 4 ]
Es responsabilidad del arquitecto de software hacer coincidir las características arquitectónicas (también conocidas como requisitos no funcionales ) con los requisitos del negocio. Por ejemplo: [ 4 ]
- Para lograr un alto nivel de satisfacción del cliente , el sistema requiere disponibilidad, tolerancia a fallos, seguridad, capacidad de prueba, capacidad de recuperación, agilidad y rendimiento.
- Las fusiones y adquisiciones (M&A) requieren extensibilidad, escalabilidad, adaptabilidad e interoperabilidad.
- Un presupuesto y un tiempo limitados exigen viabilidad y simplicidad.
- Para acelerar la comercialización, se requiere facilidad de mantenimiento, capacidad de prueba y facilidad de despliegue.
Hay cuatro actividades centrales en el diseño de arquitectura de software. [ 29 ] Estas actividades centrales de arquitectura se realizan de forma iterativa y en diferentes etapas del ciclo de vida inicial del desarrollo de software, así como a lo largo de la evolución de un sistema.
El análisis arquitectónico es el proceso de comprender el entorno en el que operará un sistema propuesto y determinar los requisitos para dicho sistema. Los insumos o requisitos para la actividad de análisis pueden provenir de diversos interesados e incluir elementos como:
- qué hará el sistema cuando esté operativo (los requisitos funcionales)
- qué tan bien el sistema cumplirá con los requisitos no funcionales en tiempo de ejecución, tales como confiabilidad, operabilidad, eficiencia de rendimiento, seguridad, compatibilidad definidos en la norma ISO/IEC 25010 :2011 [ 30 ]
- tiempo de desarrollo de requisitos no funcionales como mantenibilidad y transferibilidad definidos en la norma ISO 25010:2011 [ 30 ]
- requisitos comerciales y contextos ambientales de un sistema que pueden cambiar con el tiempo, como preocupaciones legales, sociales, financieras, competitivas y tecnológicas [ 31 ]
Los resultados de la actividad de análisis son aquellos requisitos que tienen un impacto medible en la arquitectura de un sistema de software, denominados requisitos arquitectónicamente significativos. [ 32 ]
La síntesis o diseño arquitectónico es el proceso de creación de una arquitectura. Considerando los requisitos arquitectónicamente significativos determinados por el análisis, el estado actual del diseño y los resultados de las actividades de evaluación, se crea y mejora el diseño. [ 29 ] [ 5 ] : 311–326
La evaluación de la arquitectura es el proceso de determinar qué tan bien el diseño actual, o una parte del mismo, satisface los requisitos derivados durante el análisis. Una evaluación puede ocurrir cuando un arquitecto considera una decisión de diseño, después de que se haya completado una parte del diseño, después de que se haya completado el diseño final o después de que se haya construido el sistema. Algunas de las técnicas de evaluación de arquitectura de software disponibles incluyen el Método de Análisis de Compromisos de Arquitectura (ATAM) y TARA. [ 33 ] Los marcos para comparar las técnicas se discuten en marcos como el Informe SARA [ 21 ] y Architecture Reviews: Practice and Experience . [ 34 ]
La evolución de la arquitectura es el proceso de mantener y adaptar una arquitectura de software existente para satisfacer los cambios en los requisitos y el entorno. Dado que la arquitectura de software proporciona la estructura fundamental de un sistema de software, su evolución y mantenimiento necesariamente impactan en dicha estructura. Por lo tanto, la evolución de la arquitectura se centra tanto en añadir nuevas funcionalidades como en mantener las existentes y el comportamiento del sistema.
La arquitectura requiere actividades de apoyo fundamentales. Estas actividades se desarrollan a lo largo de todo el proceso central de la arquitectura de software e incluyen la gestión del conocimiento y la comunicación, el razonamiento y la toma de decisiones en el diseño, y la documentación.
Actividades de apoyo a la arquitectura
Las actividades de apoyo a la arquitectura de software se llevan a cabo durante las actividades principales de la arquitectura de software. Estas actividades ayudan al arquitecto de software a realizar análisis, síntesis, evaluación y evolución. Por ejemplo, durante la fase de análisis, el arquitecto debe recopilar información, tomar decisiones y documentar.
- La gestión y comunicación del conocimiento es el acto de explorar y gestionar el conocimiento esencial para diseñar una arquitectura de software. Un arquitecto de software no trabaja de forma aislada. Recibe entradas, requisitos funcionales y no funcionales, y contextos de diseño de diversas partes interesadas; y proporciona resultados a dichas partes interesadas. El conocimiento de la arquitectura de software suele ser tácito y se retiene en la mente de las partes interesadas. La actividad de gestión del conocimiento de la arquitectura de software consiste en encontrar, comunicar y retener el conocimiento. Dado que los problemas de diseño de la arquitectura de software son complejos e interdependientes, una brecha de conocimiento en el razonamiento del diseño puede conducir a un diseño de arquitectura de software incorrecto. [ 35 ] [ 36 ] Ejemplos de actividades de gestión y comunicación del conocimiento incluyen la búsqueda de patrones de diseño, la creación de prototipos, la consulta a desarrolladores y arquitectos experimentados, la evaluación de diseños de sistemas similares, el intercambio de conocimiento con otros diseñadores y partes interesadas, y la documentación de la experiencia en una página wiki.
- El razonamiento y la toma de decisiones de diseño es la actividad de evaluar las decisiones de diseño. Esta actividad es fundamental para las tres actividades centrales de la arquitectura de software. [ 10 ] [ 37 ] Implica recopilar y asociar contextos de decisión, formular problemas de decisión de diseño, encontrar opciones de solución y evaluar las compensaciones antes de tomar decisiones. Este proceso ocurre en diferentes niveles de granularidad de decisión al evaluar requisitos arquitectónicos significativos y decisiones de arquitectura de software, y análisis, síntesis y evaluación de la arquitectura de software. Ejemplos de actividades de razonamiento incluyen comprender los impactos de un requisito o un diseño en los atributos de calidad, cuestionar los problemas que un diseño podría causar, evaluar posibles opciones de solución y evaluar las compensaciones entre soluciones.
- La documentación es el acto de registrar el diseño generado durante el proceso de arquitectura de software. El diseño del sistema se describe utilizando varias vistas que frecuentemente incluyen una vista estática que muestra la estructura del código del sistema, una vista dinámica que muestra las acciones del sistema durante la ejecución y una vista de despliegue que muestra cómo se coloca un sistema en el hardware para su ejecución. La vista 4+1 de Kruchten sugiere una descripción de las vistas comúnmente utilizadas para documentar la arquitectura de software; [ 38 ] Documenting Software Architectures: Views and Beyond tiene descripciones de los tipos de notaciones que podrían usarse dentro de la descripción de la vista. [ 1 ] Ejemplos de actividades de documentación son escribir una especificación, registrar un modelo de diseño del sistema, documentar una justificación de diseño, desarrollar un punto de vista, documentar vistas.
Estrategias de diseño de arquitectura de software
La arquitectura de software se enfrenta inherentemente a incertidumbres, y el tamaño de los componentes arquitectónicos puede influir significativamente en los resultados de un sistema, tanto positiva como negativamente. Neal Ford y Mark Richards proponen un enfoque iterativo para abordar el desafío de identificar y dimensionar correctamente los componentes. Este método enfatiza el refinamiento continuo a medida que los equipos desarrollan una comprensión más profunda del comportamiento y los requisitos del sistema. [ 4 ]
El enfoque generalmente implica un ciclo con varias etapas: [ 4 ]
- Se establece una estrategia de particionamiento de alto nivel, que suele clasificarse como técnica o basada en dominios. Se definen las directrices para la unidad desplegable más pequeña y significativa, denominada «quanta». Si bien estas decisiones fundamentales se toman al inicio del ciclo, pueden revisarse posteriormente si fuera necesario.
- Los componentes iniciales se identifican en función de la estrategia establecida.
- Se asignan requisitos a los componentes identificados.
- Se analizan las funciones y responsabilidades de cada componente para garantizar la claridad y minimizar la superposición de funciones.
- Se evalúan características arquitectónicas como la escalabilidad, la tolerancia a fallos y la facilidad de mantenimiento.
- Los componentes pueden reestructurarse en función de los comentarios de los equipos de desarrollo.
Este ciclo sirve como marco general y puede adaptarse a diferentes ámbitos.
Temas de arquitectura de software
Arquitectura de software y desarrollo ágil
También existe preocupación de que la arquitectura de software conduzca a un diseño inicial demasiado extenso , especialmente entre los defensores del desarrollo ágil de software . Se han desarrollado varios métodos para equilibrar las ventajas y desventajas del diseño inicial y la agilidad, [ 39 ] incluido el método ágil DSDM , que exige una fase de "Fundamentos" durante la cual se establecen los fundamentos arquitectónicos "justos y necesarios". IEEE Software dedicó un número especial a la interacción entre agilidad y arquitectura.
erosión de la arquitectura de software
La erosión de la arquitectura de software se refiere a una brecha gradual entre la arquitectura prevista y la implementada de un sistema de software a lo largo del tiempo. [ 40 ] El fenómeno de la erosión de la arquitectura de software fue presentado inicialmente en 1992 por Perry y Wolf junto con su definición de arquitectura de software. [ 2 ]
La erosión de la arquitectura de software puede ocurrir en cada etapa del ciclo de vida del desarrollo de software y tiene impactos variables en la velocidad de desarrollo y el costo de mantenimiento. La erosión de la arquitectura de software se produce debido a varias razones, como violaciones arquitectónicas , acumulación de deuda técnica y vaporización del conocimiento . [ 41 ] Un caso famoso de erosión de la arquitectura es el fracaso del navegador web Mozilla. [ 42 ] Mozilla es una aplicación creada por Netscape con una base de código compleja que se volvió más difícil de mantener debido a los cambios continuos. Debido a un diseño inicial deficiente y a la creciente erosión de la arquitectura, Netscape pasó dos años rediseñando el navegador web Mozilla, lo que demuestra la importancia de una gestión proactiva de la arquitectura para prevenir reparaciones costosas y retrasos en el proyecto.
La erosión de la arquitectura puede disminuir el rendimiento del software, aumentar sustancialmente los costos de evolución y degradar la calidad del software. Se han propuesto diversos enfoques y herramientas para detectar la erosión de la arquitectura. Estos enfoques se clasifican principalmente en cuatro categorías: basados en la consistencia, basados en la evolución, basados en defectos y basados en decisiones. [ 40 ] Por ejemplo, las comprobaciones automatizadas de conformidad de la arquitectura, las herramientas de análisis de código estático y las técnicas de refactorización ayudan a identificar y mitigar la erosión de forma temprana.
Además, las medidas utilizadas para abordar la erosión de la arquitectura contienen dos tipos principales: medidas preventivas y correctivas. [ 40 ] Las medidas preventivas incluyen la aplicación de reglas arquitectónicas, revisiones de código regulares y pruebas automatizadas, mientras que las medidas correctivas incluyen refactorización, rediseño y actualizaciones de la documentación.
Recuperación de la arquitectura de software
La recuperación de la arquitectura de software (o reconstrucción, o ingeniería inversa ) incluye los métodos, técnicas y procesos para descubrir la arquitectura de un sistema de software a partir de la información disponible, incluyendo su implementación y documentación. La recuperación de la arquitectura suele ser necesaria para tomar decisiones informadas ante documentación obsoleta o desactualizada y la erosión de la arquitectura : decisiones de implementación y mantenimiento que divergen de la arquitectura prevista. [ 43 ] Existen prácticas para recuperar la arquitectura de software como análisis estático de programas . Esto forma parte de los temas que abarca la práctica de inteligencia de software .
Campos relacionados
Diseño
La arquitectura es diseño , pero no todo diseño es arquitectónico. [ 1 ] En la práctica, el arquitecto es quien traza la línea entre la arquitectura de software (diseño arquitectónico) y el diseño detallado (diseño no arquitectónico). No existen reglas ni directrices que se ajusten a todos los casos, aunque se han realizado intentos de formalizar la distinción. Según la Hipótesis de Intensión/Localidad , [ 44 ] la distinción entre diseño arquitectónico y diseño detallado se define mediante el Criterio de Localidad , [ 44 ] según el cual una afirmación sobre el diseño de software es no local (arquitectónica) si y solo si un programa que la satisface puede expandirse a un programa que no la satisface. Por ejemplo, el estilo cliente-servidor es arquitectónico (estratégico) porque un programa que se basa en este principio puede expandirse a un programa que no es cliente-servidor, por ejemplo, añadiendo nodos peer-to-peer .
Ingeniería de requisitos
La ingeniería de requisitos y la arquitectura de software pueden considerarse enfoques complementarios: mientras que la arquitectura de software se centra en el « espacio de soluciones » o el «cómo», la ingeniería de requisitos aborda el « espacio de problemas » o el «qué». [ 45 ] La ingeniería de requisitos implica la obtención , negociación , especificación , validación , documentación y gestión de los requisitos . Tanto la ingeniería de requisitos como la arquitectura de software giran en torno a las inquietudes, necesidades y deseos de las partes interesadas .
Existe una considerable superposición entre la ingeniería de requisitos y la arquitectura de software, como lo demuestra, por ejemplo, un estudio sobre cinco métodos de arquitectura de software industrial que concluye que "las entradas (objetivos, restricciones, etc.) suelen estar mal definidas y solo se descubren o se comprenden mejor a medida que la arquitectura comienza a emerger" y que, si bien "la mayoría de las preocupaciones arquitectónicas se expresan como requisitos del sistema, también pueden incluir decisiones de diseño obligatorias" . [ 29 ] En resumen, el comportamiento requerido impacta la arquitectura de la solución, que a su vez puede introducir nuevos requisitos. [ 46 ] Enfoques como el modelo Twin Peaks [ 47 ] buscan explotar la relación sinérgica entre requisitos y arquitectura.
Otros tipos de 'arquitectura'
- Arquitectura de computadoras
- La arquitectura informática se centra en la estructura interna de un sistema informático, en términos de componentes de hardware que colaboran entre sí, como la CPU (o procesador), el bus y la memoria .
- Arquitectura sin servidor
- La arquitectura sin servidor es un paradigma de computación en la nube que a menudo se malinterpreta como una arquitectura sin servidor. Básicamente, traslada las responsabilidades de la administración de servidores de los desarrolladores a los proveedores de servicios en la nube. Esto permite a las empresas ejecutar su código de backend en la infraestructura de la nube, eliminando la necesidad de administrar servidores físicos. El enfoque basado en eventos de la arquitectura sin servidor se basa en funciones pequeñas y específicas para cada tarea que se ejecutan bajo demanda. Estas funciones se conocen como Función como Servicio (FaaS) y ofrecen rentabilidad mediante un modelo de facturación de pago por uso y escalado dinámico de recursos basado en la demanda de la aplicación. [ 48 ]
- Arquitectura de sistemas
- El término arquitectura de sistemas se aplicó originalmente a la arquitectura de sistemas que constan de hardware y software . La principal preocupación que aborda la arquitectura de sistemas es, por lo tanto, la integración de software y hardware en un dispositivo completo y que funcione correctamente. En otro sentido común —mucho más amplio—, el término se aplica a la arquitectura de cualquier sistema complejo, ya sea de naturaleza técnica, sociotécnica o social.
- Arquitectura empresarial
- El objetivo de la arquitectura empresarial es «traducir la visión y la estrategia de negocio en una empresa eficaz». Los marcos de arquitectura empresarial , como TOGAF y el Marco Zachman , suelen distinguir entre diferentes capas de arquitectura empresarial. Si bien la terminología varía de un marco a otro, muchos incluyen al menos una distinción entre una capa de negocio , una capa de aplicación (o información ) y una capa tecnológica . La arquitectura empresarial aborda, entre otros aspectos, la alineación entre estas capas, generalmente mediante un enfoque descendente.
Véase también
- ArchiMate
- lenguaje de descripción de arquitectura
- Marco de arquitectura
- Patrón arquitectónico (informática)
- Estilo arquitectónico
- Antipatrón
- Diseño basado en atributos
- modelo C4
- Arquitectura de computadoras
- Arquitectura de gestión de datos distribuidos
- Arquitectura de bases de datos relacionales distribuidas
- Arquitectura de sistemas
- Diseño de sistemas
- Método de análisis de arquitectura de software
- Lista de estilos y patrones de arquitectura de software
- Descripción de la arquitectura del software
- Sistema activado por tiempo
- Ver modelo
Referencias
- 1 2 3 Clements, Paul; Felix Bachmann; Len Bass ; David Garlan; James Ivers; Reed Little; Paulo Merson; Robert Nord; Judith Stafford (2010). Documenting Software Architectures: Views and Beyond, Second Edition . Boston: Addison-Wesley. ISBN 978-0-321-55268-6.
- 1 2 3 4 Perry, DE; Wolf, AL (1992). "Fundamentos para el estudio de la arquitectura de software" (PDF) . ACM SIGSOFT Software Engineering Notes . 17 (4): 40. CiteSeerX 10.1.1.40.5174 . doi : 10.1145/141874.141884 . S2CID 628695 .
- ↑ Head First Software Architecture . O'Reilly Media. 2024. ISBN 978-1-0981-3435-8.
- 1 2 3 4 5 6 7 8 9 10 11 Fundamentos de la arquitectura de software: Un enfoque de ingeniería . O'Reilly Media. 2020. ISBN 978-1-4920-4345-4.
- 1 2 3 4 5 6 7 8 9 10 Bass, Len; Paul Clements; Rick Kazman (2012). Arquitectura de software en la práctica, tercera edición . Boston: Addison-Wesley. ISBN 978-0-321-81573-6.
- ↑ SEI (2006). "¿Cómo se define la arquitectura de software?" . Consultado el 12 de septiembre de 2012 .
- ↑ Garlan y Shaw (1994). "Una introducción a la arquitectura de software" (PDF) . Consultado el 13 de septiembre de 2012 .
- 1 2 Fowler, Martin (2003). "Diseño: ¿Quién necesita un arquitecto?". IEEE Software . 20 (5): 11– 44. Bibcode : 2003ISoft..20e..11F . doi : 10.1109/MS.2003.1231144 . S2CID 356506 .
- ↑ ISO/IEC/IEEE 42010: Definición de "arquitectura" . Iso-architecture.org. Consultado el 21 de julio de 2013.
- 1 2 Jansen, A.; Bosch, J. (2005). "Arquitectura de software como un conjunto de decisiones de diseño arquitectónico". 5.ª Conferencia de Trabajo IEEE/IFIP sobre Arquitectura de Software (WICSA'05) . pág. 109. CiteSeerX 10.1.1.60.8680 . doi : 10.1109/WICSA.2005.61 . ISBN 978-0-7695-2548-8. S2CID 13492610 .
- ^ Ali Babar, Mahoma; Dingsoyr, Torgeir; Lago, Patricia; van Vliet, Hans (2009). Gestión del conocimiento de la arquitectura de software . Dordrecht Heidelberg Londres Nueva York: Springer. ISBN 978-3-642-02373-6.
- 1 2 3 George Fairbanks (2010). Arquitectura de software suficiente . Marshall & Brainerd.
- 1 2 Fundamentos de la arquitectura de software: Un enfoque de ingeniería . O'Reilly Media. 2020. ISBN 978-1-4920-4345-4.
- 1 2 Larman, Craig (2005). Patrones de diseño: Elementos de software orientado a objetos reutilizable . Pearson Deutschland GmbH. ISBN 978-0-201-63361-0.
- 1 2 Patrones de arquitectura de aplicaciones empresariales . ISBN 978-0-321-12742-6.
- 1 2 ISO/IEC/IEEE (2011). "ISO/IEC/IEEE 42010:2011 Ingeniería de sistemas y software – Descripción de la arquitectura" . Recuperado el 12 de septiembre de 2012 .
- ↑ Muller, Gerrit (20 de agosto de 2007). "Una introducción a la arquitectura de referencia" (PDF) . Sitio web de Gaudí . Archivado (PDF) del original el 19 de diciembre de 2011. Consultado el 13 de noviembre de 2015 .
- ↑ Angelov, S.; Grefen, P.; Greefhorst, D. (2009). "Una clasificación de arquitecturas de referencia de software: Análisis de su éxito y efectividad". 2009 Joint Working IEEE/IFIP Conference on Software Architecture & European Conference on Software Architecture . IEEE. pp. 141–150 . doi : 10.1109/WICSA.2009.5290800 . ISBN 978-1-4244-4984-2.
- ↑ Brooks, Frederick P. Jr. (1975). El hombre-mes mítico: ensayos sobre ingeniería de software . Addison-Wesley. ISBN 978-0-201-00650-6.
- ↑ Conway, Melvin. "Ley de Conway" . Página principal de Mel Conway . Archivado del original el 29 de septiembre de 2019. Consultado el 29 de septiembre de 2019 .
- 1 2 Obbink, H.; Kruchten, P.; Kozaczynski, W.; Postema, H.; Ran, A.; Dominick, L.; Kazman, R.; Hilliard, R.; Tracz, W.; Kahane, E. (6 de febrero de 2002). "Informe de revisión y evaluación de la arquitectura de software (SARA)" (PDF) . Recuperado el 1 de noviembre de 2015 .
- ↑ "ATAM: Método para la evaluación de arquitecturas" (PDF) . apps.dtic.mil . Archivado (PDF) del original el 2 de febrero de 2025. Consultado el 20 de diciembre de 2025 .
- ↑ Poort, Eltjo; van Vliet, Hans (septiembre de 2012). "RCDA: La arquitectura como disciplina de gestión de riesgos y costes" . Journal of Systems and Software . 85 (9): 1995– 2013. doi : 10.1016/j.jss.2012.03.071 .
- ↑ P. Naur; B. Randell, eds. (1969). «Ingeniería de software: Informe de una conferencia patrocinada por el Comité Científico de la OTAN, Garmisch, Alemania, 7-11 de octubre de 1968» (PDF) . Bruselas: OTAN, División de Asuntos Científicos. Archivado (PDF) del original el 7 de junio de 2003. Consultado el 16 de noviembre de 2012 .
- ↑ P. Kruchten; H. Obbink; J. Stafford (2006). "El pasado, presente y futuro de la arquitectura de software". IEEE Software . 23 (2): 22. Bibcode : 2006ISoft..23b..22K . doi : 10.1109/MS.2006.59 . S2CID 2082927 .
- ↑ Universidad de Waterloo (2006). "Una historia muy breve de la informática" . Recuperado el 23 de septiembre de 2006 .
- ↑ "Introducción al número especial sobre arquitectura de software". IEEE.org . 2006. doi : 10.1109/TSE.1995.10003 .
- ↑ Garlan y Shaw (1994). "Una introducción a la arquitectura de software" (PDF) . Consultado el 25 de septiembre de 2006 .
- 1 2 3 Christine Hofmeister; Philippe Kruchten; Robert L. Nord; Henk Obbink; Alexander Ran; Pierre America (2007). "Un modelo general de diseño de arquitectura de software derivado de cinco enfoques industriales". Journal of Systems and Software . 80 (1): 106– 126. doi : 10.1016/j.jss.2006.05.024 .
- 1 2 ISO/IEC (2011). "ISO/IEC 25010:2011 Ingeniería de sistemas y software – Requisitos y evaluación de la calidad de sistemas y software (SQuaRE) – Modelos de calidad de sistemas y software" . Recuperado el 8 de octubre de 2012 .
- ↑ Osterwalder y Pigneur (2004). «Una ontología para modelos de comercio electrónico» (PDF) . Creación de valor a partir de modelos de comercio electrónico . págs. 65–97 . CiteSeerX 10.1.1.9.6922 . doi : 10.1016/B978-075066140-9/50006-0 . ISBN 978-0-7506-6140-9. S2CID 14177438 . Archivado del original (PDF) el 17-11-2018.
- ↑ Chen, Lianping; Ali Babar, Muhammad; Nuseibeh, Bashar (2013). "Caracterización de requisitos arquitectónicamente significativos". IEEE Software . 30 (2): 38– 45. Bibcode : 2013ISoft..30b..38C . doi : 10.1109/MS.2012.174 . hdl : 10344/3061 . S2CID 17399565 .
- ↑ Woods, E. (2012). "Evaluación arquitectónica industrial mediante TARA". Journal of Systems and Software . 85 (9): 2034– 2047. doi : 10.1016/j.jss.2012.04.055 . S2CID 179244 .
- ↑ Maranzano, JF; Rozsypal, SA; Zimmerman, GH; Warnken, GW; Wirth, PE; Weiss, DM (2005). "Revisiones de arquitectura: práctica y experiencia". IEEE Software . 22 (2): 34. Bibcode : 2005ISoft..22b..34M . doi : 10.1109/MS.2005.28 . S2CID 11697335 .
- ↑ Kruchten, P. (2008). "¿Qué hacen realmente los arquitectos de software?". Journal of Systems and Software . 81 (12): 2413– 2416. doi : 10.1016/j.jss.2008.08.025 .
- ↑ Babar, MA; Dingsøyr, T.; Lago, P.; Vliet, H. van (2009). Gestión del conocimiento en arquitectura de software: teoría y práctica (eds.), Primera edición . Springer. ISBN 978-3-642-02373-6.
- ↑ Tang, A.; Han, J.; Vasa, R. (2009). "Razonamiento del diseño de arquitectura de software: un caso para un soporte metodológico mejorado". IEEE Software . 26 (2): 43. Bibcode : 2009ISoft..26b..43T . doi : 10.1109/MS.2009.46 . hdl : 1959.3/51601 . S2CID 12230032 .
- ↑ Kruchten, Philippe (1995). "Architectural Blueprints – The '4+1' View Model of Software Architecture" (PDF) . IEEE Software . 12 (6): 42– 50. arXiv : 2006.04975 . doi : 10.1109/52.469759 . S2CID 219558624 .
- ↑ Boehm, Barry; Turner, Richard (2004). Equilibrando agilidad y disciplina . Addison-Wesley. ISBN 978-0-321-18612-6.
- 1 2 3 Li, Ruiyin; Liang, Peng; Soliman, Mohamed; Avgeriou, Paris (2022). "Understanding software architecture erosion: A systematic mapping study" . Journal of Software: Evolution and Process . 34 (3) e2423. arXiv : 2112.10934 . doi : 10.1002/smr.2423 .
- ↑ Li, Ruiyin; Liang, Peng; Soliman, Mohamed; Avgeriou, Paris (2021). «Comprender la erosión de la arquitectura: la perspectiva de los profesionales». 29.ª Conferencia Internacional IEEE/ACM sobre Comprensión de Programas (ICPC) . págs. 311–322 . doi : 10.1109/icpc52881.2021.00037 . ISBN 978-1-6654-1403-6.
- ↑ van Gurp, J. y Bosch, J.: 2002, Erosión del diseño: Problemas y causas, Journal of Systems and Software 61(2), 105–119.
- ↑ Lungu, M. "Recuperación de la arquitectura de software", Universidad de Lugano, 2008. http://www.slideshare.net/mircea.lungu/software-architecture-recovery-in-five-questions-presentation
- 1 2 Amnon H. Eden; Rick Kazman (2003). "Implementación del diseño arquitectónico" (PDF) . Archivado del original (PDF) el 28 de septiembre de 2007.
- ↑ C. Shekaran; D. Garlan; M. Jackson; NR Mead; C. Potts; HB Reubenstein (1994). "El papel de la arquitectura de software en la ingeniería de requisitos". Actas de la Conferencia Internacional IEEE sobre Ingeniería de Requisitos . págs. 239–245 . doi : 10.1109/ICRE.1994.292379 . ISBN 978-0-8186-5480-0. S2CID 3129363 .
- ^ Remco C. de Boer, Hans van Vliet (2009). "Sobre la similitud entre requisitos y arquitectura". Revista de Sistemas y Software . 82 (3): 544– 550. CiteSeerX 10.1.1.415.6023 . doi : 10.1016/j.jss.2008.11.185 .
- ↑ Bashar Nuseibeh (2001). "Tejiendo requisitos y arquitecturas" (PDF) . Computer . 34 (3): 115– 119. doi : 10.1109/2.910904 . Archivado (PDF) del original el 7 de septiembre de 2012.
- ↑ "Cómo usar la arquitectura sin servidor" . DashDevs . Consultado el 28 de agosto de 2023 .
Lecturas adicionales
- Richards, Mark (2020). Fundamentos de la arquitectura de software: Un enfoque de ingeniería . O'Reilly Media . ISBN 978-1-4920-4345-4.
- Len, Bass (2012). Arquitectura de software en la práctica (3.ª ed.). Addison-Wesley Professional . ISBN 978-0-321-81573-6.Este libro abarca los conceptos fundamentales de la disciplina. El tema central es cómo lograr atributos de calidad en un sistema.
- Clements, Paul (2010). Documentación de arquitecturas de software: vistas y más allá (2.ª ed.). Addison-Wesley Professional . ISBN 978-0-321-55268-6.Este libro describe qué es la arquitectura de software y muestra cómo documentarla desde múltiples perspectivas, utilizando UML y otras notaciones. También explica cómo complementar las vistas de arquitectura con documentación sobre el comportamiento, la interfaz de software y la justificación. El libro incluye una wiki con un ejemplo de documentación de arquitectura de software .
- Bell, Michael (2008). Bell, Michael (ed.). Modelado orientado a servicios: análisis, diseño y arquitectura de servicios . Wiley. doi : 10.1002/9781119198864 . ISBN 978-0-470-25570-4.
- Shan, Tony; Hua, Winnie (octubre de 2006). «Mecanismo de arquitectura de soluciones». 10.ª Conferencia Internacional IEEE de Computación Distribuida de Objetos Empresariales (EDOC'06) de 2006. págs. 23-32 . doi : 10.1109/EDOC.2006.54 . ISBN 978-0-7695-2558-7. S2CID 8361936 .
- Garzás, Javier; Piattini, Mario (2005). "Una ontología para el conocimiento del diseño microarquitectónico". IEEE Software . 22 (2): 28– 33. Bibcode : 2005ISoft..22b..28G . doi : 10.1109/MS.2005.26 . S2CID 17639072 .
- Fowler, Martin (septiembre de 2003). "¿Quién necesita un arquitecto?" (PDF) . IEEE Software . 20 (5): 11. Bibcode : 2003ISoft..20e..11F . doi : 10.1109/MS.2003.1231144 . S2CID 356506 .
- Kazman, Rick (mayo de 2003). "Arquitectura, diseño, implementación" (PDF) . Software Engineering Institute . Archivado (PDF) del original el 21 de septiembre de 2015.- Sobre la distinción entre diseño arquitectónico y diseño de detalle.
- Kruchten, Philippe (1995). "Planos arquitectónicos: el modelo de vista '4+1' de la arquitectura de software" (PDF) . IEEE Software . 12 (6): 42– 50. arXiv : 2006.04975 . doi : 10.1109/52.469759 . S2CID 219558624. Archivado (PDF) del original el 13 de junio de 2006.
- Pautasso, Cesare (2020). Arquitectura de software: notas visuales de clase . LeanPub. pág. 689.
- Magee, J., Dulay, N., Eisenbach, S., & Kramer, J. (1995, septiembre). Especificación de arquitecturas de software distribuidas. En Conferencia europea de ingeniería de software (pp. 137-153). Berlín, Heidelberg: Springer Berlin Heidelberg.
Enlaces externos
- Explicación sobre IBM Developerworks
- Colección de definiciones de arquitectura de software en el Instituto de Ingeniería de Software (SEI), Universidad Carnegie Mellon (CMU).
- Asociación Internacional de Arquitectos de TI (IASA Global) , anteriormente conocida como Asociación Internacional de Arquitectos de Software (IASA)
- SoftwareArchitecturePortal.org – sitio web del Grupo de Trabajo 2.10 de IFIP sobre Arquitectura de Software
- SoftwareArchitectures.com Archivado el 29/10/2023 en Wayback Machine , un recurso independiente de información sobre la disciplina.
- Arquitectura de software , capítulo 1 de la tesis doctoral de Roy Fielding sobre REST.
- Cuando la buena arquitectura se vuelve mala
- El desarrollo impulsado por la arquitectura en espiral ( SDLC basado en el modelo espiral) tiene como objetivo reducir los riesgos de una arquitectura ineficaz.
- Estudios de casos reales sobre arquitectura de software
- Arquitectura de software