Pregunta Diseño de Software vs. Arquitectura de Software [cerrado]


¿Podría alguien explicar la diferencia entre el diseño de software y la arquitectura de software?

Más específicamente; si le dices a alguien que te presente el 'diseño', ¿qué esperarías que presentaran? Lo mismo vale para 'arquitectura'.

Mi comprensión actual es:

  • Diseño: diagrama UML / diagrama de flujo / wireframes simples (para UI) para un módulo específico / parte del sistema
  • Arquitectura: diagrama de componentes (que muestra cómo los diferentes módulos del sistema se comunican entre sí y con otros sistemas), qué lenguaje se va a utilizar, patrones ...?

Corrígeme si estoy equivocado. Me he referido Wikipedia tiene artículos sobre http://en.wikipedia.org/wiki/Software_design y http://en.wikipedia.org/wiki/Software_architecture, pero no estoy seguro si los he entendido correctamente.


331
2018-04-01 10:00


origen


Respuestas:


Tienes razón, sí. La arquitectura de un sistema es su "esqueleto". Es el nivel más alto de abstracción de un sistema. Qué tipo de almacenamiento de datos está presente, cómo interactúan los módulos entre sí, qué sistemas de recuperación existen. Al igual que los patrones de diseño, existen patrones arquitectónicos: MVC, diseño en capas de 3 niveles, etc.

El diseño de software se trata de diseñar los módulos / componentes individuales. ¿Cuáles son las responsabilidades, funciones, del módulo x? De la clase Y? ¿Qué puede hacer y qué no? ¿Qué patrones de diseño se pueden usar?

En resumen, la arquitectura de software se basa más en el diseño de todo el sistema, mientras que el diseño de software hace hincapié en el nivel de módulo / componente / clase.


320
2018-04-01 10:19



En algunas descripciones de SDLC (ciclo de vida de desarrollo de software) son intercambiables, pero el consenso es que son distintos. Son al mismo tiempo: diferentes (1) etapas, (2) Areas de responsabilidady (3) niveles de toma de decisiones.

  • Arquitectura es la imagen más grande: la elección de marcos, idiomas, alcance, objetivos y metodologías de alto nivel (Racional, cascada, ágil, etc.)
  • Diseño es la imagen más pequeña: el plan de cómo se organizará el código; cómo se verán los contratos entre las diferentes partes del sistema; el continuo implementación de las metodologías y objetivos del proyecto. Las especificaciones se escriben durante esta etapa.

Estas dos etapas serán parece que mezclar juntos por diferentes razones.

  1. Los proyectos más pequeños a menudo no tienen suficiente alcance para separar la planificación en etapas.
  2. Un proyecto puede ser parte de un proyecto más grande, y por lo tanto, partes de ambas etapas ya están decididas. (Ya existen bases de datos, convenciones, estándares, protocolos, marcos, código reutilizable, etc.)
  3. Nuevas formas de pensar sobre el SDLC (ver Metodologías ágiles) reordenar en cierto modo este enfoque tradicional. El diseño (arquitectura en menor medida) tiene lugar en todo el SDLC a propósito. A menudo hay más iteraciones donde todo el proceso sucede una y otra vez.
  4. El desarrollo de software es complicado y difícil de planificar de todos modos, pero los clientes / gerentes / vendedores generalmente lo hacen más difícil al cambiar las metas y los requisitos a mitad de camino. Diseño e incluso decisiones arquitectónicas debe hacerse más tarde en el proyecto si ese es el plan o no.

Incluso si las etapas o áreas de responsabilidad se combinan y suceden por todas partes, siempre es bueno saber qué nivel de toma de decisiones está sucediendo. (Podríamos seguir para siempre con esto. Estoy tratando de mantenerlo en un resumen.) Terminaré con: incluso si parece que su proyecto no tiene una etapa formal de arquitectura / diseño / AOR / documentación, está sucediendo si alguien está conscientemente haciéndolo o no. Si nadie decide hacer arquitectura, entonces ocurre una predeterminada que probablemente sea deficiente. Lo mismo para el diseño. Estos conceptos son casi más importante si no hay etapas formales que los representen.


78
2017-12-24 15:39



La arquitectura es estratégica, mientras que el diseño es táctico.

La arquitectura comprende los marcos, herramientas, paradigmas de programación, estándares de ingeniería de software basados ​​en componentes, principios de alto nivel.

Si bien el diseño es una actividad relacionada con restricciones locales, como patrones de diseño, modismos de programación y refactorizaciones.


54
2017-12-24 15:44



Encontré esto porque estaba buscando una distinción simple entre la arquitectura y el diseño;
¿Qué piensas de esta forma de verlos?

  • la arquitectura es "lo que" estamos construyendo;
  • el diseño es "cómo" estamos construyendo;

38
2018-03-28 17:36



  1. Arquitectura significa la estructura conceptual y la organización lógica de una computadora o sistema computarizado.

    Diseño significa un plan o dibujo producido para mostrar el aspecto y la función o el funcionamiento de un sistema o un objeto antes de que se realice.

  2. Si está "diseñando" un componente, está definiendo cómo se comporta en un sistema más grande.

    Si está "diseñando" el mismo componente, está definiendo cómo se comporta internamente.

Toda la arquitectura es diseño pero NO todo el diseño es arquitectura.

What parte es el Diseño, el How es la implementación concreta y la intersección de What y How es Arquitectura.

Imagen para diferenciar arquitectura y diseño:

Design vs Architecture

También hay decisiones de diseño que no son significativas desde el punto de vista arquitectónico, es decir, no pertenecen a la rama de arquitectura del diseño. Por ejemplo, las decisiones de diseño interno de algunos componentes, como la elección del algoritmo, la selección de la estructura de datos, etc.

Cualquier decisión de diseño, que no es visible fuera de los límites de sus componentes es el diseño interno de un componente y no es arquitectónico. Estas son las decisiones de diseño que un arquitecto de sistemas dejaría a discreción del diseñador del módulo o del equipo de implementación, siempre que su diseño no rompa las restricciones arquitectónicas impuestas por la arquitectura de nivel del sistema.

El enlace que da buena analogía


19
2017-12-19 04:56



Yo diría que tienes razón, en mis propias palabras;

Arquitectura es la asignación de los requisitos del sistema a los elementos del sistema. Cuatro declaraciones sobre una arquitectura:

  1. Puede presentar requisitos no funcionales, como el lenguaje o los patrones.
  2. Define la interacción entre componentes, interfaces, tiempos, etc.
  3. No debe introducir nueva funcionalidad,
  4. Asigna las funciones (diseñadas) que el sistema debe realizar a los elementos.

La arquitectura es una paso de ingeniería esencial cuando se subdivide una complejidad del sistema.

Ejemplo: piense en su casa, no necesita un arquitecto para su cocina (solo un elemento involucrado) pero el edificio completo necesita algunas definiciones de interacción, como puertas y techo.

Diseño es una representación informativa de la implementación (propuesta) de la función. Tiene la intención de obtener retroalimentación y discutir con las partes interesadas. Puede ser una buena práctica, pero no es un paso esencial de ingeniería.

Sería agradable ver el diseño de la cocina antes de instalar la cocina, pero no es esencial para el requisito de cocción:

Si lo pienso, puede decir:

  • la arquitectura es para un público / ingenieros en un nivel de abstracción más detallado
  • el diseño está destinado al público en un nivel de abstracción menos detallado

15
2018-03-16 10:03



Mi recordatorio:

  • Podemos cambiar el diseño sin preguntarle a alguien
  • Si cambiamos la Arquitectura, debemos comunicarla a alguien (equipo, cliente, parte interesada, ...)

13
2017-11-23 23:31



Creo que deberíamos usar la siguiente regla para determinar cuándo hablamos de Diseño vs Arquitectura: si los elementos de una imagen de software que creó pueden mapearse uno a uno a una construcción sintáctica de lenguaje de programación, entonces es Diseño, si no es Arquitectura.

Entonces, por ejemplo, si está viendo un diagrama de clase o un diagrama de secuencia, puede asignar una clase y sus relaciones a un lenguaje de Programación Orientada a Objetos usando la construcción sintáctica de Clase. Esto es claramente Diseño. Además, esto podría traer a la mesa que esta discusión tiene una relación con el lenguaje de programación que usará para implementar un sistema de software. Si usa Java, se aplica el ejemplo anterior, ya que Java es un Lenguaje de programación orientado a objetos. Si se le ocurre un diagrama que muestra los paquetes y sus dependencias, eso también es Diseño. Puede asignar el elemento (un paquete en este caso) a una construcción sintáctica de Java.

Ahora, supongamos que su aplicación Java está dividida en módulos, y cada módulo es un conjunto de paquetes (representado como una unidad de despliegue de archivos jar), y se le presenta un diagrama que contiene módulos y sus dependencias, entonces, eso es Arquitectura. No hay una forma en Java (al menos no hasta Java 7) para asignar un módulo (un conjunto de paquetes) a una construcción sintáctica. También puede observar que este diagrama representa un paso más alto en el nivel de abstracción de su modelo de software. Cualquier diagrama anterior (grano grueso que) un diagrama de paquete, representa una vista arquitectónica cuando se desarrolla en el lenguaje de programación Java. Por otro lado, si está desarrollando en Modula-2, entonces, un diagrama de módulo representa un Diseño.

(Un fragmento de http://www.copypasteisforword.com/notes/software-architecture-vs-software-design)


6
2017-07-14 02:58



Personalmente, me gusta este:

"Al diseñador le preocupa lo que sucede cuando un usuario presiona un botón, y al arquitecto le preocupa lo que sucede cuando diez mil usuarios presionan un botón".

SCEA para Java EE Guía de estudio por Mark Cade y Humphrey Sheil


5
2018-04-12 17:04