Arquitectura de software

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 13 de mayo de 2019; las comprobaciones requieren 8 ediciones .

La arquitectura de software es un  conjunto de las decisiones más importantes sobre la organización de un sistema de software. La arquitectura incluye:

Documentar la arquitectura de software (SW) simplifica el proceso de comunicación entre desarrolladores, permite registrar las decisiones de diseño tomadas y brindar información sobre las mismas al personal operativo del sistema [3] , reutilizar componentes y plantillas de proyectos en otros.

No existe una definición generalmente aceptada de "arquitectura de software". Así, el sitio del Instituto de Ingeniería de Software da más de 150 definiciones de este concepto [4] [5] .

Resumen

El campo de la informática, desde sus inicios, ha enfrentado desafíos relacionados con la complejidad de los sistemas de software. Anteriormente, los desarrolladores resolvían los problemas de complejidad eligiendo las estructuras de datos correctas, desarrollando algoritmos y aplicando el concepto de separación de poderes. Aunque el término "arquitectura de software" es relativamente nuevo en la industria del desarrollo de software, los principios fundamentales del campo han sido aplicados indiscriminadamente por los pioneros del desarrollo de software desde mediados de la década de 1980. Los primeros intentos de comprender y explicar la arquitectura de software de un sistema estaban llenos de imprecisiones y carecían de organización, a menudo solo un diagrama de bloques conectados por líneas. En la década de 1990 se intentó definir y sistematizar los principales aspectos de esta disciplina. Durante este tiempo se desarrolló un conjunto inicial de patrones de diseño, estilos de diseño, mejores prácticas, lenguajes de descripción y lógica formal [6] .

Una idea fundamental de la disciplina de la arquitectura de software es la idea de reducir la complejidad del sistema a través de la abstracción y separación de poderes. Hasta la fecha, todavía no hay acuerdo sobre una definición clara del término "arquitectura de software".

Como disciplina en evolución actual sin reglas claras sobre la forma "correcta" de construir un sistema, el diseño de arquitectura de software sigue siendo una mezcla de ciencia y arte. El aspecto "arte" es que cualquier sistema comercial implica una aplicación o una misión. Desde la perspectiva de un usuario de la arquitectura de software, la arquitectura de software proporciona una dirección para avanzar y resolver problemas relacionados con la especialidad de cada usuario, por ejemplo, una parte interesada, un desarrollador de software, un equipo de soporte de software, un mantenedor de software, un especialista en implementación de software, un probador, y también los usuarios finales. En este sentido, la arquitectura de software en realidad reúne diferentes perspectivas sobre un sistema. El hecho de que estos diferentes puntos de vista puedan combinarse en una arquitectura de software es un argumento a favor de la necesidad y conveniencia de crear una arquitectura de software incluso antes de la etapa de desarrollo del software [7] [8] [9] .

Historia

La arquitectura de software como concepto comenzó con el trabajo de investigación de Edsger Dijkstra en 1968 y David Parnassus a principios de la década de 1970. Estos académicos enfatizaron que la estructura de un sistema de software es importante y que construir la estructura correcta es fundamental. El estudio de este campo ha crecido en popularidad desde principios de la década de 1990 con trabajos de investigación sobre estilos arquitectónicos (patrones), lenguajes de descripción de arquitectura, documentación de arquitectura y métodos formales.

Las instituciones de investigación juegan un papel importante en el desarrollo de la arquitectura de software como disciplina. Mary Shaw y David Garlan de la Universidad Carnegie Mellon escribieron un libro titulado "Arquitectura de software: perspectivas sobre una nueva disciplina en 1996" en el que presentan conceptos de arquitectura de software como componentes, conectores, estilos, etc. En la Universidad de California, el Irvine Institute for Software Research investiga principalmente estilos arquitectónicos, lenguajes de descripción de arquitectura y arquitecturas dinámicas.

El primer estándar de arquitectura de software es IEEE 1471: ANSI/IEEE 1471-2000: Pautas para describir sistemas predominantemente de software. Fue adoptado en 2007 bajo el nombre ISO ISO/IEC 42010:2007.

Lenguajes de descripción de la arquitectura

Los lenguajes de descripción de arquitectura (ADLS) se utilizan para describir la arquitectura del software. Varias organizaciones han desarrollado varios ADLS diferentes, incluido AADL (estándar SAE), Wright (desarrollado en la Universidad Carnegie Mellon), Acme (desarrollado en la Universidad Carnegie Mellon), xADL (desarrollado en UCI), Darwin (desarrollado en Imperial College London) , DAOP-ADL (desarrollado en la Universidad de Málaga), y ByADL (Universidad de L'Aquila, Italia). Elementos comunes a todos estos lenguajes son los conceptos de componente, conector y configuración. Además, además de los lenguajes especializados, el lenguaje de modelado unificado UML se usa a menudo para describir la arquitectura .

Vistas

Una arquitectura de software generalmente contiene varias vistas que son similares a los diferentes tipos de dibujos en la construcción de edificios. En una ontología definida por ANSI/IEEE 1471-2000, las vistas son instancias de puntos de vista, donde existe un punto de vista para describir una arquitectura desde el punto de vista de un conjunto determinado de partes interesadas.

La vista arquitectónica consta de 2 componentes:

Las vistas arquitectónicas se pueden dividir en 3 tipos principales [10] :

  1. Vistas modulares (vistas de módulos ing. ): muestran el sistema como una estructura de varios bloques de software.
  2. Componentes y conectores (esp. vistas de componentes y conectores ): muestra el sistema como una estructura de elementos que se ejecutan en paralelo (componentes) y cómo interactúan (conectores).
  3. Asignación (ing. vistas de asignación ): muestra la ubicación de los elementos del sistema en entornos externos.

Ejemplos de vistas modulares:

Ejemplos de tipos de componentes y conectores:

Ejemplos de tipos de alojamiento:

Aunque se han desarrollado varios lenguajes para describir la arquitectura de software, actualmente no hay acuerdo sobre qué conjunto de vistas se debe adoptar como referencia. El lenguaje UML se creó como un estándar "para modelar sistemas de software (y no solo)".

Patrones arquitectónicos

Se aplican varios patrones arquitectónicos para satisfacer el sistema diseñado con diferentes atributos de calidad. Cada plantilla tiene sus propios objetivos y desventajas.

Ejemplos de patrones arquitectónicos:

Sin embargo, el concepto MVC también tiene sus inconvenientes. En particular, debido a la complicación de la interacción, la velocidad del sistema disminuye.

Frameworks básicos para la arquitectura de software

Existen los siguientes marcos (frameworks de arquitectura de software en inglés  ) relacionados con el campo de la arquitectura de software:

Los ejemplos de arquitectura como Zachman Framework, DoDAF y TOGAF caen bajo el dominio de las arquitecturas empresariales.

Véase también

Notas

  1. Kruchten, Philippe . El proceso unificado racional: una introducción, Addison-Wesley, 1998
  2. Rumbaugh, J. , Jacobsen, I. y Booch, G. Manual de referencia del lenguaje de modelado unificado. Lectura, Massachusetts: Addison-Wesley, 1999
  3. Documentación de arquitecturas de software: vistas y más allá, 2010 , P.1.1. Visión general.
  4. Documentación de arquitecturas de software: vistas y más allá, 2010 , P.1.2. Atributos de Arquitectura y Calidad.
  5. Arquitectura de software: glosario Archivado el 5 de enero de 2013 en Wayback Machine , Software Engineering Institute
  6. ↑ ¿Cuál es su definición de arquitectura de software  ? recursos.sei.cmu.edu. Consultado el 23 de octubre de 2019. Archivado desde el original el 28 de febrero de 2020.
  7. ISO/IEC/IEEE 42010: Definición de "arquitectura" . www.iso-arquitectura.org. Consultado el 23 de octubre de 2019. Archivado desde el original el 7 de abril de 2017.
  8. M. Fowler. Diseño - ¿Quién necesita un arquitecto?  // Software IEEE. — 2003-9. - T. 20 , n. 5 . — P. 11–13 . -doi : 10.1109/ MS.2003.1231144 . Archivado desde el original el 23 de octubre de 2019.
  9. Una introducción a la arquitectura de software . Consultado el 23 de octubre de 2019. Archivado desde el original el 6 de mayo de 2021.
  10. Len Bass, Paul Clements, Rick Kazman. Arquitectura de software en la práctica (3.ª edición) (Serie SEI en ingeniería de software). - 3ª edición (5 de octubre de 2012). - 2012. - 640 págs. — ISBN 978-0321815736 .

Literatura

Enlaces