Introducción a la arquitectura y el diseño de software
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.
Podemos segregar Arquitectura y Diseño de Software en dos fases distintas: Arquitectura de Software y Diseño de Software. EnArchitecture, las decisiones no funcionales son emitidas y separadas por los requisitos funcionales. En Diseño, se cumplen los requisitos funcionales.
Arquitectura de software
La arquitectura sirve como blueprint for a system. 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 structured solution 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 design planque 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.
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 tanto funcionales como 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.
Asistir en el proceso de investigación de requisitos, asegurando la integridad y 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 ser adoptadas durante SDLC (Software Development Life Cycle).
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 en 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:
Source - Una entidad interna o externa como personas, hardware, software o infraestructura física que genera el estímulo.
Stimulus - Una condición que debe tenerse en cuenta cuando llega a un sistema.
Environment - El estímulo se produce en determinadas condiciones.
Artifact - Un sistema completo o una parte de él, como procesadores, canales de comunicación, almacenamiento persistente, procesos, etc.
Response - Una actividad realizada después de la llegada del estímulo, como detectar fallas, recuperarse de fallas, desactivar la fuente de eventos, etc.
Response measure - 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. | |
Actuación | 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. Puede medirse 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. |
Probabilidad | 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 Arquitectura | Exactitud | Responsabilidad por satisfacer todos los requisitos del sistema. |
Calidad fuera del 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 del mercado. |