Saltar al contenido

Introducción a la arquitectura y el diseño de software

octubre 21, 2021
software architecture types

La arquitectura de un sistema describe sus componentes principales, sus relaciones (estructuras) y cómo interactúan entre sí. La arquitectura y el diseño del software incluyen varios factores que contribuyen, como la estrategia empresarial, los atributos de calidad, la dinámica humana, el diseño y el entorno de TI.

Tipos de arquitectura de software

Podemos segregar la Arquitectura y el Diseño de Software en dos fases distintas: Arquitectura de Software y Diseño de Software. En Arquitectura, las decisiones no funcionales se emiten y separan por los requisitos funcionales. En Diseño, se cumplen los requisitos funcionales.

Arquitectura de software

La arquitectura sirve como plano para un sistema. Proporciona una abstracción para gestionar la complejidad del sistema y establecer un mecanismo de comunicación y coordinación entre los componentes.

  • Define un solución estructurada para cumplir con todos los requisitos técnicos y operativos, optimizando al mismo tiempo los atributos de calidad comunes como el rendimiento y la seguridad.

  • Además, implica un conjunto de decisiones importantes sobre la organización relacionadas con el desarrollo de software y cada una de estas decisiones puede tener un impacto considerable en la calidad, la capacidad de mantenimiento, el rendimiento y el éxito general del producto final. Estas decisiones comprenden:

    • Selección de elementos estructurales y sus interfaces por las que se compone el sistema.

    • Comportamiento según lo especificado en colaboraciones entre esos elementos.

    • Composición de estos elementos estructurales y de comportamiento en un gran subsistema.

    • Las decisiones arquitectónicas se alinean con los objetivos comerciales.

    • Los estilos arquitectónicos guían la organización.

Diseño de software

El diseño de software proporciona una plan de diseño que describe los elementos de un sistema, cómo encajan y cómo funcionan juntos para cumplir con los requisitos del sistema. Los objetivos de tener un plan de diseño son los siguientes:

  • Negociar los requisitos del sistema y establecer expectativas con los clientes, el personal de marketing y de gestión.

  • Actuar como modelo durante el proceso de desarrollo.

  • Guíe las tareas de implementación, incluido el diseño detallado, la codificación, la integración y las pruebas.

Viene antes del diseño detallado, la codificación, la integración y las pruebas y después del análisis de dominio, el análisis de requisitos y el análisis de riesgos.

Diseño de software

Objetivos de la arquitectura

El objetivo principal de la arquitectura es identificar los requisitos que afectan la estructura de la aplicación. Una arquitectura bien diseñada reduce los riesgos comerciales asociados con la creación de una solución técnica y crea un puente entre los requisitos comerciales y técnicos.

Algunos de los otros objetivos son los siguientes:

  • Exponga la estructura del sistema, pero oculte sus detalles de implementación.

  • Realice todos los casos de uso y escenarios.

  • Intente abordar los requisitos de varias partes interesadas.

  • Manejar requisitos funcionales y de calidad.

  • Reducir el objetivo de propiedad y mejorar la posición de mercado de la organización.

  • Mejorar la calidad y funcionalidad que ofrece el sistema.

  • Mejorar la confianza externa en la organización o el sistema.

Limitaciones

La arquitectura de software sigue siendo una disciplina emergente dentro de la ingeniería de software. Tiene las siguientes limitaciones:

  • Falta de herramientas y formas estandarizadas de representar la arquitectura.

  • Falta de métodos de análisis para predecir si la arquitectura dará como resultado una implementación que cumpla con los requisitos.

  • Falta de conciencia de la importancia del diseño arquitectónico para el desarrollo de software.

  • Falta de comprensión del papel del arquitecto de software y mala comunicación entre las partes interesadas.

  • Falta de comprensión del proceso de diseño, experiencia en diseño y evaluación del diseño.

Rol del arquitecto de software

Un arquitecto de software proporciona una solución que el equipo técnico puede crear y diseñar para toda la aplicación. Un arquitecto de software debe tener experiencia en las siguientes áreas:

Experiencia en diseño

  • Experto en diseño de software, incluyendo diversos métodos y enfoques como diseño orientado a objetos, diseño impulsado por eventos, etc.

  • Liderar el equipo de desarrollo y coordinar los esfuerzos de desarrollo para la integridad del diseño.

  • Debería poder revisar las propuestas de diseño y las compensaciones entre ellos.

Experiencia en el campo

  • Experto en el sistema en desarrollo y plan de evolución del software.

  • Ayudar en el proceso de investigación de requisitos, asegurando la integridad y la coherencia.

  • Coordinar la definición del modelo de dominio para el sistema que se está desarrollando.

Experiencia en tecnología

  • Experto en tecnologías disponibles que ayuda en la implementación del sistema.

  • Coordinar la selección de lenguaje de programación, framework, plataformas, bases de datos, etc.

Experiencia metodológica

  • Experto en metodologías de desarrollo de software que pueden adoptarse durante SDLC (Ciclo de vida de desarrollo de software).

  • Elija los enfoques adecuados para el desarrollo que ayuden a todo el equipo.

Papel oculto del arquitecto de software

  • Facilita el trabajo técnico entre los miembros del equipo y refuerza la relación de confianza en el equipo.

  • Especialista en información que comparte conocimientos y tiene una vasta experiencia.

  • Proteja a los miembros del equipo de fuerzas externas que los distraerían y aportarían menos valor al proyecto.

Entregables del arquitecto

  • Un conjunto de objetivos funcionales claros, completos, consistentes y alcanzables

  • Una descripción funcional del sistema, con al menos dos capas de descomposición.

  • Un concepto para el sistema

  • Un diseño en forma de sistema, con al menos dos capas de descomposición.

  • Una noción del tiempo, los atributos del operador y los planes de implementación y operación.

  • Un documento o proceso que garantiza que se sigue la descomposición funcional y se controla la forma de las interfaces.

Atributos de calidad

La calidad es una medida de excelencia o el estado de estar libre de deficiencias o defectos. Los atributos de calidad son las propiedades del sistema que están separadas de la funcionalidad del sistema.

La implementación de atributos de calidad hace que sea más fácil diferenciar un buen sistema de uno malo. Los atributos son factores generales que afectan el comportamiento del tiempo de ejecución, el diseño del sistema y la experiencia del usuario.

Se pueden clasificar como:

Atributos de calidad estática

Reflejar la estructura de un sistema y una organización, directamente relacionada con la arquitectura, el diseño y el código fuente. Son invisibles para el usuario final, pero afectan el costo de desarrollo y mantenimiento, por ejemplo: modularidad, capacidad de prueba, mantenibilidad, etc.

Atributos de calidad dinámica

Refleja el comportamiento del sistema durante su ejecución. Están directamente relacionados con la arquitectura, el diseño, el código fuente, la configuración, los parámetros de implementación, el entorno y la plataforma del sistema.

Son visibles para el usuario final y existen en tiempo de ejecución, por ejemplo, rendimiento, robustez, escalabilidad, etc.

Escenarios de calidad

Los escenarios de calidad especifican cómo evitar que una falla se convierta en falla. Se pueden dividir en seis partes según las especificaciones de sus atributos:

  • Fuente – Una entidad interna o externa como personas, hardware, software o infraestructura física que genera el estímulo.

  • Estímulo – Una condición que debe tenerse en cuenta cuando llega a un sistema.

  • Medio ambiente – El estímulo se produce en determinadas condiciones.

  • Artefacto – Un sistema completo o una parte de él, como procesadores, canales de comunicación, almacenamiento persistente, procesos, etc.

  • Respuesta – Una actividad realizada después de la llegada del estímulo, como detectar fallas, recuperarse de fallas, deshabilitar la fuente de eventos, etc.

  • Medida de respuesta – Deben medir las respuestas ocurridas para que se puedan probar los requisitos.

Atributos de calidad comunes

La siguiente tabla enumera los atributos de calidad comunes que debe tener una arquitectura de software:

Categoría Atributo de calidad Descripción
Cualidades de diseño Integridad conceptual Define la consistencia y coherencia del diseño general. Esto incluye la forma en que se diseñan los componentes o módulos.
Mantenibilidad Capacidad del sistema para sufrir cambios con cierta facilidad.
Reutilización Define la capacidad de los componentes y subsistemas para ser adecuados para su uso en otras aplicaciones.
Cualidades en tiempo de ejecución Interoperabilidad Capacidad de un sistema o de diferentes sistemas para operar con éxito mediante la comunicación e intercambio de información con otros sistemas externos escritos y administrados por partes externas.
Manejabilidad Define qué tan fácil es para los administradores del sistema administrar la aplicación.
Fiabilidad Capacidad de un sistema para permanecer operativo a lo largo del tiempo.
Escalabilidad Capacidad de un sistema para manejar el aumento de carga sin afectar el rendimiento del sistema o la capacidad de ampliarse fácilmente.
Seguridad Capacidad de un sistema para prevenir acciones maliciosas o accidentales fuera de los usos diseñados.
Rendimiento Indicación de la capacidad de respuesta de un sistema para ejecutar cualquier acción dentro de un intervalo de tiempo determinado.
Disponibilidad Define la proporción de tiempo que el sistema está funcional y en funcionamiento. Se puede medir como un porcentaje del tiempo de inactividad total del sistema durante un período predefinido.
Cualidades del sistema Compatibilidad Capacidad del sistema para proporcionar información útil para identificar y resolver problemas cuando no funciona correctamente.
Testabilidad Medida de lo fácil que es crear criterios de prueba para el sistema y sus componentes.
Cualidades del usuario Usabilidad Define qué tan bien la aplicación cumple con los requisitos del usuario y consumidor al ser intuitiva.
Calidad de la Arquitectura Exactitud Responsabilidad por satisfacer todos los requisitos del sistema.
Calidad sin tiempo de ejecución Portabilidad Capacidad del sistema para ejecutarse en diferentes entornos informáticos.
Integridad Capacidad para hacer que los componentes del sistema desarrollados por separado funcionen correctamente juntos.
Modificabilidad Facilidad con la que cada sistema de software puede adaptarse a cambios en su software.
Atributos de calidad empresarial Costo y cronograma Costo del sistema con respecto al tiempo de comercialización, la vida útil esperada del proyecto y la utilización del legado.
Comerciabilidad Uso del sistema con respecto a la competencia en el mercado.

close