Red de conocimiento informático - Conocimiento informático - Puntos clave del diseño de la arquitectura de software

Puntos clave del diseño de la arquitectura de software

Cómo diseñar mejor la arquitectura de software siempre ha sido el foco del campo de la ingeniería de software. En las últimas décadas, la comunidad internacional de ingeniería de software ha logrado grandes avances en el diseño de arquitectura de software. Los artículos y documentos registran experiencias y resultados maduros en esta área. El diseño de arquitectura de software es a menudo una tarea muy compleja, que involucra muchos detalles y aspectos, y puede discutirse desde muchos aspectos diferentes. Debido a limitaciones de espacio, el autor solo puede seleccionar puntos clave individuales del diseño de arquitectura de software según su comprensión personal, combinados con las ideas populares actuales de ingeniería de software ágil, para compartir su experiencia en el diseño de arquitectura de software con todos.

Arquitectura determina el éxito

La arquitectura de software es la estructura principal y la principal contradicción del diseño de un producto de software o de un sistema de software. Un breve programa HelloWorld El éxito o el fracaso del diseño de la arquitectura de software determina el éxito o el fracaso de los productos de software y el desarrollo de sistemas. Los atributos y características de la arquitectura de software en sí determinan la complejidad y dificultad del diseño de la arquitectura de software.

Hay. Hay un dicho popular en los últimos años: Los detalles determinan el éxito o el fracaso, este dicho sólo tiene razón a medias. Por un lado, la implementación de los detalles tácticos es ciertamente muy importante, pero por otro lado, la estrategia general correspondiente es igualmente importante. Podemos decir que la estrategia determina el éxito o el fracaso de la estrategia. Juega bien y poderosamente a nivel local, si ignoras Conocer la situación general, incluso si no hay oficiales (detalles), ¿no es suficiente para obtener una ventaja?

Del mismo modo, el diseño correcto de la arquitectura de software debe incluir un diseño global estratégico y un diseño de detalle táctico (ruta crítica). Existe una visión errónea de que el diseño de la arquitectura de software consiste simplemente en estratificar y empaquetar, y que basta con dibujar un esquema aproximado. Este tipo de comportamiento de arquitecto de sillón es muy perjudicial. De hecho, dado que la arquitectura de software es el cuerpo principal del edificio de software, es la ingeniería oculta, el muro de carga y las partes clave del edificio, entonces la arquitectura de software debe implementarse en los algoritmos y códigos reales, no solo en los código de implementación, pero también la parte de prueba. El código de la arquitectura garantiza que obtengamos una arquitectura de alta calidad que cumpla con varios requisitos de atributos de calidad funcionales y no funcionales.

Dos arquitecturas

En nuestro desarrollo diario de productos y sistemas de software, en realidad existen dos arquitecturas de software: una es la aplicación a desarrollar. La arquitectura de software (arquitectura de aplicación) y el otro es la arquitectura de software de la infraestructura existente (arquitectura de infraestructura). Solo necesitamos estar familiarizados con los detalles estructurales y los mecanismos de aplicación de la infraestructura para desarrollar eficazmente aplicaciones de capa superior de alta calidad y alto rendimiento. Sin embargo, para desarrollar aplicaciones y productos de software para usuarios finales, obviamente no basta con dominar el conocimiento general de los lenguajes de programación de computadoras de alto nivel y el conocimiento del uso de API de arquitectura de plataforma básica. En función del tipo de aplicaciones del cliente y de las características de la infraestructura, además se diseña un software de aplicación de alta calidad que satisfaga las necesidades del usuario.

Estar familiarizado con la tecnología de modelado abstracto, los principios de diseño, los patrones arquitectónicos, los patrones de diseño y otros métodos y tecnologías de OOA OOD no solo puede ayudarnos a comprender y utilizar mejor la arquitectura de la plataforma subyacente, sino que también nos ayuda a diseñar y desarrollar. Arquitectura de aplicaciones de mayor calidad

Diseño y desarrollo de arquitectura iterativa, ágil y basada en riesgos

La arquitectura de software evoluciona a lo largo del ciclo de vida de los productos y sistemas, y no siempre es la forma más eficiente de diseñar y desarrollar aplicaciones. La arquitectura de software evoluciona a lo largo de la vida útil de un producto o sistema de software, que a menudo dura más que una sola versión o incluso varios años, lo que la convierte en un activo importante tanto para los clientes como para los desarrolladores.

¿Qué proceso de desarrollo se debe seguir a la hora de diseñar una arquitectura de software? ¿O existe un proceso de diseño y desarrollo de arquitectura de software mejor y más maduro? La respuesta es que el diseño de arquitectura de software en este siglo debería priorizar métodos y métodos de desarrollo iterativos ágiles en lugar de prácticas tradicionales. El desarrollo iterativo ágil aboga por el diseño incremental, es decir, la arquitectura de un producto o sistema de software se construye y mejora a través de múltiples iteraciones e incluso múltiples lanzamientos durante el ciclo de vida de desarrollo.

Una buena arquitectura de software no se logra de la noche a la mañana.

Un producto de software o arquitectura de sistema se construye y perfecciona a través de múltiples iteraciones y lanzamientos durante el ciclo de vida de desarrollo.

Una buena arquitectura de software no se logra de la noche a la mañana. Décadas de práctica de ingeniería de software han demostrado que los diseños arquitectónicos sin implementación de código, pruebas y verificación del usuario a menudo están sujetos a conjeturas poco confiables, especulaciones y sobrediseño e ingeniería, lo que genera desperdicio y reelaboración, lo que resulta en altas tasas de falla.

Riesgo se refiere a cualquier factor y problema potencial que pueda obstaculizar el desarrollo de productos/sistemas de software y provocar que fallen. La calidad de la arquitectura de software determina la calidad de todo el sistema y los productos de software. La incertidumbre es a menudo uno de los mayores riesgos potenciales en el diseño de la arquitectura de software. Por lo tanto, el diseño y el desarrollo de la arquitectura de software deben seguir principios basados ​​en riesgos y mantener una copia en todo momento. A medida que avanza la iteración, la lista de problemas de riesgo abordará primero los riesgos arquitectónicos más importantes, luego los riesgos arquitectónicos más importantes en secuencia y luego los riesgos arquitectónicos más importantes en secuencia según los cambios dinámicos en tiempo real. en riesgos. La dificultad del diseño de la arquitectura de software surge de la complejidad del problema de diseño de software en sí. Un sistema de software complejo a menudo tiene una gran cantidad de detalles intrincados e incertidumbres que son difíciles de entender para los humanos. Por lo tanto, el diseño de software es esencialmente un proceso de modelado. Podemos comprender la arquitectura de software compleja desde diferentes niveles macro y micro a través de varios modelos y vistas abstractas, garantizando así la corrección y efectividad del diseño.

Algunas personas creen que la arquitectura del software es código fuente y el código fuente es diseño. ¿Qué es el software real? Sabemos que el software real que finalmente se puede ejecutar en una computadora es en realidad código binario y compiladores, que traducen lenguajes de programación de alto nivel a lenguaje ensamblador de bajo nivel, lenguaje de máquina, etc. Nadie puede ver directa y completamente cómo se ejecuta realmente el programa binario en la CPU, por lo que las personas sólo pueden observar indirecta y dinámicamente estos fragmentos de software reales a través de herramientas de depuración, vistas de ventanas, etc. Por lo tanto, el código fuente en tiempo de diseño de Java, C#, C, etc. es esencialmente un modelo. Aunque es un modelo estático que se puede ejecutar después del procesamiento, obviamente no son todo el software y la arquitectura del software real. La arquitectura de software completa no solo incluye código fuente (modelo de implementación), sino que también incluye modelos de demanda, modelos de análisis, modelos de diseño, modelos de implementación, modelos de prueba y muchos otros modelos. La arquitectura de software en sí es una colección de modelos.

UML SysML Actualmente es un lenguaje de modelado visual de arquitectura de sistemas/software internacionalmente popular que utiliza diagramas de paquetes, diagramas de clases, diagramas de actividades, diagramas de interacción, etc. antes de escribir el código real. Antes de escribir código real, utilice símbolos gráficos estándar, como diagramas de paquetes, diagramas de clases, diagramas de actividad, diagramas de interacción y diagramas de estado para modelar la arquitectura del software, explorar y comunicar soluciones de diseño factibles e identificar posibles problemas de diseño y abstraer correctamente. diseñar antes de codificar es una forma de trabajar muy eficaz, eficiente y ágil

Reutilización de la arquitectura

En la práctica de la ingeniería de software, la reutilización es la clave para lograr una alta eficiencia y una alta eficiencia. factor de calidad y alta productividad. En la práctica de la ingeniería de software, la reutilización es una herramienta básica y un método clave para lograr alta eficiencia y alta calidad en el desarrollo de productos y sistemas. A través de la reutilización organizada, sistemática y efectiva, generalmente podemos lograr aumentos exponenciales en la eficiencia, y cuantas más veces se reutilice una arquitectura de software buena y duradera (como algunos marcos importantes), mejor será para el software en sí o para el usuario. El valor de sus componentes es mayor.

La reutilización en el software tiene diferentes alcances. El alcance, el nivel, la granularidad y el tipo de reutilización varían desde la reutilización funcional, la reutilización de clases, la reutilización de artefactos/componentes, la reutilización de bibliotecas (API) hasta la reutilización de marcos, la reutilización de arquitectura, la reutilización de patrones, el conocimiento del diseño de software y la reutilización de ideologías, etc. La aplicación y la llamada de varias plataformas básicas, marcos convencionales y API son en sí mismas las formas más comunes de reutilización. Una organización de desarrollo de software excelente y madura prestará atención a recopilar conocimientos y experiencia en diseño de software en el desarrollo diario, y establecerá y mantendrá en base a ellos. Patrones arquitectónicos y La base de conocimientos de reutilización de software de patrones de diseño aplica de forma activa y frecuente varios patrones de software para resolver problemas prácticos de ingeniería.

Aplicar activa y frecuentemente patrones de software para resolver problemas de ingeniería del mundo real

Los frameworks son una clase de software altamente reutilizable, flexible y altamente escalable que es adecuado para una aplicación o arquitectura de dominio específica. Las técnicas de diseño y análisis abstracto (como OOA y OOD) son un enfoque importante, y se ha descubierto que cuanto más abstracto es algo, más ampliamente aplicable y reutilizable es. Por otro lado, cuanto más específico sea algo, más reducido será su ámbito de aplicación y menor su reutilización. La reutilización se refiere a aprovechar al máximo las cosas existentes para resolver problemas nuevos o repetidos y adaptarse a los cambios. En el diseño de la arquitectura del software, es necesario distinguir activamente entre invariancia y cambio en la arquitectura del software, y gestionar sistemáticamente estos puntos estables y de cambio para adaptarse a cambios futuros. Esta también es una forma importante de mejorar la reutilización de la arquitectura de software y lograr un diseño de marco de alta calidad.

Compensaciones arquitectónicas

Como todas las demás profesiones de ingeniería, la ingeniería de software es esencialmente un arte y una ciencia de compensaciones, y la parte más difícil del diseño de la arquitectura de software es a menudo cómo hacer cada tipo de compensación. La parte más difícil del diseño de la arquitectura de software es cómo lograr las mejores compensaciones entre restricciones competitivas y contradictorias. El nivel de compensaciones en el diseño de la arquitectura de software es también el indicador más importante para medir la experiencia, capacidad y destrezas de diseño de los arquitectos de software.

En el proceso de desarrollo de software y diseño de arquitectura de software, desde elegir una plataforma, elegir un lenguaje, elegir un marco, elegir un patrón de diseño hasta elegir una herramienta, etc., todos debemos pensar constantemente en qué va a hacer nuestro software y cómo se utilizará.

En el proceso de desarrollo de software y diseño de arquitectura de software, desde la elección de una plataforma, hasta la elección de un lenguaje, la elección de un marco, la elección de un patrón de diseño, la elección de una herramienta...etc., nosotros Siempre es necesario sopesar y evaluar racionalmente varias alternativas. lishixinzhi/Article/program/Java/gj/201311/27294