Domanda

Qualcuno potrebbe spiegare la differenza tra progettazione software e architettura software?

Più specificamente;se dici a qualcuno di presentarti il ​​"design", cosa ti aspetteresti che presenti?Lo stesso vale per l'"architettura".

La mia comprensione attuale è:

  • Progetto:Diagramma UML/diagramma di flusso/wireframe semplici (per l'interfaccia utente) per un modulo/parte specifica del sistema
  • Architettura:diagramma dei componenti (che mostra come i diversi moduli del sistema comunicano tra loro e con gli altri sistemi), quale linguaggio deve essere utilizzato, modelli...?

Correggimi se sbaglio.Ho fatto riferimento a Wikipedia che contiene articoli su http://en.wikipedia.org/wiki/Software_design E http://en.wikipedia.org/wiki/Software_architecture, ma non sono sicuro di averli compresi correttamente.

È stato utile?

Soluzione

Hai ragione sì. L'architettura di un sistema è il 'scheletro'. E 'il più alto livello di astrazione di un sistema. Che tipo di memorizzazione dei dati è presente, come fanno i moduli interagiscono tra loro, quali i sistemi di recupero sono a posto. Proprio come modelli di progettazione, ci sono modelli architettonici: MVC, 3-tier design a strati, ecc

disegno del software è di progettare i singoli moduli / componenti. Quali sono le responsabilità, le funzioni del modulo x? Di classe Y? Che cosa può fare e cosa no? Quali modelli di progettazione può essere utilizzato?

Così, in breve, l'architettura software è più circa la progettazione di tutto il sistema, mentre il design del software enfatizza / component / livello di classe del modulo.

Altri suggerimenti

In alcune descrizioni del SDLC (ciclo di vita dello sviluppo software) sono intercambiabili, ma il consenso è che sono distinti.Sono allo stesso tempo:diverso (1) fasi, (2) aree di responsabilità, e (3) livelli decisionali.

  • Architettura è il quadro più ampio:la scelta di framework, linguaggi, ambito, obiettivi e metodologie di alto livello (Razionale, cascata, agile, eccetera.).
  • Progetto è l'immagine più piccola:il piano su come sarà organizzato il codice;come appariranno i contratti tra le diverse parti del sistema;quello in corso implementazione delle metodologie e degli obiettivi del progetto.Le specifiche vengono scritte durante questa fase.

Queste due fasi lo faranno sembra si fondono insieme per ragioni diverse.

  1. I progetti più piccoli spesso non hanno spazio sufficiente per suddividere la pianificazione in fasi.
  2. Un progetto potrebbe far parte di un progetto più ampio e quindi parti di entrambe le fasi sono già decise.(Esistono già database, convenzioni, standard, protocolli, framework, codice riutilizzabile, ecc.)
  3. Nuovi modi di pensare all’SDLC (vedi Metodologie agili) riorganizzano in qualche modo questo approccio tradizionale.La progettazione (architettura in misura minore) avviene durante tutto l'SDLC di proposito.Spesso ce ne sono di più iterazioni dove l'intero processo si ripete ancora e ancora.
  4. Lo sviluppo del software è comunque complicato e difficile da pianificare, ma i clienti/manager/venditori di solito rendono il tutto più difficile modificando obiettivi e requisiti nel corso del processo.Decisioni progettuali e anche architettoniche dovere essere realizzato più avanti nel progetto, indipendentemente dal fatto che questo sia il piano o meno.

Anche se le fasi o le aree di responsabilità si confondono e si verificano ovunque, è sempre bene sapere a quale livello del processo decisionale si sta verificando.(Potremmo andare avanti all'infinito.Sto cercando di mantenerlo in un riassunto.) Concluderò con:Anche se sembra che il tuo progetto non abbia una fase architettonica formale o di progettazione/AOR/documentazione, STA accadendo indipendentemente dal fatto che qualcuno lo stia facendo consapevolmente o meno.Se nessuno si decide a fare architettura, allora ne viene una di default, probabilmente scadente.Idem per il design.Questi concetti sono quasi più importante se non esistono fasi formali che li rappresentano.

L'architettura è strategica, mentre il design è tattico.

Architettura comprende i quadri, strumenti, paradigmi di programmazione, standard di ingegneria del software basati su componenti, principi di alto livello ..

Mentre il design è un'attività in questione con i vincoli locali, come modelli di progettazione, idiomi di programmazione, e refactoring.

Ho trovato questo come ero alla ricerca di semplice distinzione tra architettura e me progettare;
Cosa ne pensi di questo modo di guardare a loro:

  • architettura è "cosa" stiamo costruendo;
  • il design è "come" stiamo costruendo;
  1. Architettura significa che la struttura concettuale e l'organizzazione logica di un sistema informatico o computer basato su.

    Il design è un piano o un disegno realizzato per mostrare l'aspetto e la funzione o il funzionamento di un sistema o di un oggetto prima che sia reso.

  2. Se si sta “architecting” un componente, si sta definendo come si comporta nel sistema più grande.

    Se si “progetta” lo stesso componente, si sta definendo come si comporta internamente.

  

Tutta l'architettura è il design ma non tutti i design è l'architettura.

parte What è la progettazione, la How è l'attuazione concreta e l'intersezione di What e How è architettura.

Immagine per differenziare Architettura e Design :

design vs Architettura

Ci sono anche progettare decisioni, che non sono architettonicamente significativi, cioè non appartiene al ramo architettura del disegno. Ad esempio, alcuni decisioni di progettazione interni, scelta come-di algoritmo, selezione di struttura dei dati del componente ecc.

Qualsiasi decisione di progettazione, che non è visibile al di fuori del proprio perimetro componente è il design interno di un componente ed è non-architettonico. Queste sono le decisioni di progettazione di un architetto di sistema avrebbe lasciato sulla discrezione modulo del progettista o il team di implementazione a patto che il loro design non rompere i vincoli architettonici imposti dall'architettura livello di sistema.

Il legame che dà buona analogia

Direi che hai ragione, con parole mie;

Architettura è l'assegnazione dei requisiti di sistema per gli elementi del sistema. Quattro dichiarazioni circa un'architettura:

  1. Si può introdurre requisiti non funzionali come il linguaggio o modelli.
  2. definisce l'interazione tra i componenti, interfacce, tempi, ecc.
  3. Non deve introdurre nuove funzionalità,
  4. alloca le funzioni (progettato) che il sistema è progettato per eseguire agli elementi.

L'architettura è un passo di ingegneria essenziale quando una complessità del sistema è suddivisa.

Esempio: Pensate al vostro casa, non avete bisogno di un architetto per la vostra cucina (solo un elemento coinvolto), ma l'intero edificio ha bisogno di alcune definizioni di interazione, come porte, e un tetto <. / p>

design è una rappresentazione informativo della (proposto) implementazione della funzione. Esso è destinato a ottenere un feedback e di discutere con le parti interessate. Potrebbe essere una buona pratica, ma non è un passo essenziale di ingegneria .

Sarebbe bello vedere il disegno della cucina vedere prima di installare la cucina ma non è essenziale per il requisito di cottura :

Se penso a questo proposito si può affermare:

  • architettura è per un pubblico / ingegneri su un livello di astrazione più dettagliato
  • il design è destinato al pubblico su un livello di astrazione meno dettagliato

Il mio promemoria:

  • Siamo in grado di cambiare il design, senza chiedere a qualcuno
  • Se cambiamo l'architettura abbiamo bisogno di comunicare a qualcuno (squadra, cliente, delle parti interessate, ...)

Credo che dovremmo usare la seguente regola per determinare quando si parla di design vs Architettura: Se gli elementi di un'immagine software è stato creato possono essere mappati 1-1 ad un linguaggio di programmazione di costruzione sintattica, allora è il design, se non IS Architettura.

Quindi, per esempio, se si sta vedendo un diagramma delle classi o di un diagramma di sequenza, si è in grado di mappare una classe e le loro relazioni ad un linguaggio di programmazione Object Oriented mediante la costruzione sintattica Class. Questo è chiaramente Design. Inoltre, questo potrebbe portare al tavolo che questa discussione ha un rapporto con il linguaggio di programmazione che verrà utilizzato per implementare un sistema software. Se si utilizza Java, l'esempio precedente si applica, come Java è un linguaggio di programmazione Object Oriented. Se si arriva con un diagramma che mostra i pacchetti e le sue dipendenze, che è design anche. È possibile mappare l'elemento (un pacchetto in questo caso) a una costruzione sintattica Java.

Ora, supponiamo che l'applicazione Java è diviso in moduli, e ogni modulo è un insieme di pacchetti (rappresentati come unità di distribuzione file jar), e si sono presentati con un diagramma che contiene i moduli e le sue dipendenze, quindi, che è l'architettura . Non c'è un modo in Java (almeno non fino a Java 7) per mappare un modulo (un insieme di pacchetti) ad una costruzione sintattica. Si potrebbe anche notare che questo diagramma rappresenta un gradino più in alto del livello di astrazione del modello software. Qualsiasi schema sopra (grana grossa di) un diagramma dei package, rappresenta una vista architettonico quando si sviluppa nel linguaggio di programmazione Java. D'altra parte, se si sta sviluppando in Modula-2, quindi, un diagramma modulo rappresenta un disegno.

(Un frammento da http://www.copypasteisforword.com/notes/software-architecture -Vs-software-design )

Personalmente, mi piace questo:

"Il designer si occupa di ciò che accade quando un utente preme un pulsante, e l'architetto si preoccupa di ciò che accade quando decine di migliaia di utenti premono un pulsante."

SCEA per Java ™ EE Study Guide da Mark Cade e Humphrey Sheil

Sono d'accordo con molte delle spiegazioni; essenzialmente stiamo riconoscendo la distinzione tra la progettazione architettonica e la progettazione di dettaglio dei sistemi software.

Mentre l'obiettivo del designer è quello di essere il più preciso e concreto nelle specifiche in quanto sarà necessario per lo sviluppo; l'architetto mira essenzialmente a specificare la struttura e il comportamento globale del sistema così come richiesto per la progettazione di dettaglio per cominciare.

Un buon architetto impedirà iper-specifiche - l'architettura non deve essere eccessivamente specificato, ma quel tanto che basta, i (architettoniche) decisioni stabilita solo per gli aspetti che presentano rischi più costoso da gestire, e in modo efficace fornire un quadro ( "comunanza") entro il quale il disegno dettagliato può essere lavorata cioè variabilità per la funzionalità locale.

In effetti, il processo di architettura o di ciclo di vita solo segue questo tema - un adeguato livello di astrazione per delineare la struttura per le (architettonicamente) significativi requisiti di business, e lasciare più dettagli per la fase di progettazione per fornire più concreti

Architettura è il design, ma non tutto il design è architettonica. Quindi, a rigor di termini, avrebbe più senso cercare di distinguere tra progettazione architettonica e non disegno -architectural . E qual è la differenza? Dipende! Ogni architetto del software potrebbe avere una risposta diversa (YMMV!). Sviluppiamo i nostri euristica per trovare una risposta, come ad esempio 'i diagrammi delle classi sono di architettura e di sequenza diagrammi sono design'. Vedere DSA libro di più.

E 'comune per dire che l'architettura è a un livello di astrazione superiore a quello di progettazione, o l'architettura è logico e il design è fisico. Ma questa nozione, anche se comunemente accettato, è in pratica inutile. Dove tracciare la linea di confine tra alta o bassa astrazione, tra il logico e fisico? Dipende!

Quindi, il mio suggerimento è:

  • creare un unico documento di progettazione.
  • nome questo documento di progettazione nel modo desiderato o, meglio, il modo in cui i lettori sono più abituati. Esempi: "Software Architecture", "Software Design Specification".
  • rompere questo documento in vista e tenere a mente è possibile creare una vista come un affinamento di un altro punto di vista.
  • fanno il punto di vista del documento navigabili con l'aggiunta di riferimenti incrociati o collegamenti ipertestuali
  • allora avrete una vista di livello superiore che mostra ampia ma poco profonda panoramica della progettazione, e la vista più vicino a realizzazione che mostra strette, ma più profondi dettagli di design.
  • si consiglia di dare un'occhiata a un esempio di multi-vista architettura documento ( qui ).

Detto questo ... una domanda più rilevante che dobbiamo porci è:? Quanto il design è abbastanza Cioè, quando dovrei smettere di descrivere la progettazione (nei diagrammi o in prosa) e dovrebbe passare alla codifica?

Sì che suona giusto per me. Il design è quello che si sta andando a fare, e l'architettura è il modo in cui i bit e pezzi di design saranno uniti. Potrebbe essere lingua agnostico, ma normalmente precisare le tecnologie da utilizzare cioè LAMP v Windows, Web Service contro RPC.

L'architettura software di un sistema o programma informatico è la struttura o strutture del sistema, che comprendono componenti software, le proprietà visibili esternamente di tali componenti, e le relazioni tra loro.

(da Wikipedia, http://en.wikipedia.org/wiki/Software_architecture )

disegno del software è un processo di problem-solving e la pianificazione di una soluzione software. Dopo lo scopo e le caratteristiche tecniche del software sono determinati, gli sviluppatori di software progetteranno o impiegare progettisti di sviluppare un piano per una soluzione. Esso comprende componenti di basso livello e problemi di implementazione algoritmo così come la vista architettonico.

(da Wikipedia, http://en.wikipedia.org/wiki/Software_design )

Non avrebbe potuto dirlo meglio:)

ho vista l'architettura come fa Patrick Karcher - il quadro generale. Ad esempio, è possibile fornire l'architettura di un edificio, visualizzarne il supporto strutturale, le finestre, entrate e le uscite, il drenaggio dell'acqua, ecc, ma non si è "disegnato" della disposizione del pavimento, le posizioni cubicolo etc.

Così, mentre hai architettato l'edificio non è stato progettato il layout di ogni ufficio. Credo che lo stesso vale per il software.

Si potrebbe vedere la progettazione del layout, come "architecting il layout", anche se ...

Buona domanda ... Anche se la linea tra di loro non è certo una linea netta luminoso, imho, se si utilizza entrambi i termini, quindi Architecture comprende le decisioni più tecniche o strutturali su come costruire o costruire qualcosa, specialmente quelle decisioni che essere difficile (o più difficile) per cambiare una volta implemeneted, mentre il design racchiude quelle decisioni che o sono facili da cambiare in seguito (come i nomi dei metodi, classi <-> file struttura organizzativa, modelli di progettazione, se utilizzare un singolo o una classe statica per risolvere qualche problema specifico, etc.) e / o quelli che effetto gli aspetti estetici di aspetto o di un sistema o applicazione (Human Interface, la facilità d'uso, look and feel, ecc)

Software Architettura è “interessato con problemi ... al di là degli algoritmi e strutture dati del calcolo.

architettura è specificamente non merito ... dettagli di implementazione (ad esempio, algoritmi e strutture dati.) La progettazione architettonica comporta una collezione ricca di astrazioni che è tipicamente fornita da OOD”(progetto orientato agli oggetti).

design si occupa della modularizzazione e interfacce dettagliata degli elementi di disegno, i loro algoritmi e procedure, ei tipi di dati necessari per supportare l'architettura e per soddisfare i requisiti.

“architettura” è spesso usato come un mero sinonimo di “design” (a volte preceduto con l'aggettivo “di alto livello”). E molte persone usano il termine “pattern architetturali” come sinonimo di “design pattern”.

Dai un'occhiata a questo collegamento.

definire i termini di architettura, design e implementazione

Architettura:
progettazione strutturale a livelli elevati di astrazione che realizzano requisiti tecnicamente significative nel sistema. L'architettura prevede basi per un ulteriore disegno.

Design:
L'arte di riempire in ciò che l'architettura non fa attraverso un processo iterativo ad ogni livello di astrazione.

Mi è piaciuto molto questo lavoro per una regola empirica sulla separazione dell'architettura dal progetto:

http: //www.eden-study. org / articoli / 2006 / astrazione-classi-sw-design_ieesw.pdf

Si chiama l'ipotesi Intension / località. Dichiarazioni sulla natura del software che sono non-locale e intensionale sono architettonica. Dichiarazioni che sono locali e intensionale sono il design.

... molto tempo fa in un luogo lontano filosofi preoccupati per la distinzione tra l'uno e il molteplice. L'architettura è sul rapporto, che richiede molti. Architettura ha componenti. Il design è di contenuti, che richiede l'uno. Il design ha proprietà, qualità, caratteristiche. Noi di solito pensiamo che il design è dentro l'architettura. pensiero dualistico dà l'molti come primordiale. Ma l'architettura è anche all'interno di progettazione. E 'tutto come scegliamo di vedere ciò che è davanti a noi -. L'uno o tanti

Piuttosto soggettiva, ma il mio prendere:

Architettura Il disegno complessivo del sistema, compresa interazioni con altri sistemi, requisiti hardware, design complessivo dei componenti, e il flusso di dati.

design L'organizzazione e il flusso di un componente nel sistema complessivo. Questo includerebbe anche API del componente per l'interazione con gli altri componenti.

Architettura software è utilizzato al meglio a livello di sistema, quando si ha bisogno di proiettare attività e funzioni di identificare da livelli più elevati di architettura nelle applicazioni.

Per esempio, la vostra azienda è di circa "economico" per i commercianti, e le funzioni principali coinvolti "di valutazione del portafoglio" e "rischio di calcolo".

Ma quando un Software Architect volontà dettagli la sua soluzione, si renderà conto che:

"valutazione del portafoglio" non può essere una sola applicazione. Ha bisogno di essere affinato in progetti gestibili come:

  • GUI
  • Launcher
  • Dispatcher
  • ...

(poiché le operazioni coinvolte sono così enormi hanno bisogno di essere suddiviso tra più computer, mentre ancora monitorato in ogni momento attraverso un'interfaccia grafica comune)

un design Software esaminerà le diverse applicazioni, la loro relazione tecnica e le loro sub-componenti interni.
Produrrà le specifiche necessarie per l'ultimo strato di Architettura (il "Architettura Tecnica") per lavorare su (in termini di quadro tecnico o di componenti trasversali), e per i team di progetto (più orientata sulla realizzazione del attività funzioni) per iniziare i loro rispettivi progetti.

se qualcuno costruisce una nave, motore, scafo, elettrici circuiti ecc saranno suoi "elementi architettonici". Per lui, il motore-costruzione sarà "lavoro di progettazione".

Se poi delega la costruzione del motore ad un'altra squadra, si creerà un "architettura del motore" ...

- dipende dal livello di astrazione o dettaglio. Uno persone architettura potrebbe essere anothers' design!

Architettura sono "le decisioni di progettazione che sono difficili da cambiare."

Dopo aver lavorato con TDD, il che significa in pratica che il disegno cambia tutto il tempo, spesso mi sono ritrovato alle prese con questa domanda. La definizione di cui sopra è estratto da Patterns of Enterprise Application Architecture , di Martin Fowler

Ciò significa che l'architettura dipende dalla lingua, quadro e il dominio del tuo sistema. Se il vostro può semplicemente estrarre l'interfaccia dalla classe Java in 5 minuti non è più e l'architettura decisione.

Versione Cliff Note:

Design:. L'implementazione di una soluzione basata sulle specifiche del prodotto desiderato

Architettura:. I / strumenti / infrastrutture / componenti fondazione che supportano il vostro disegno

Questa è una piuttosto ampia domanda che richiamerà un sacco di risposte.

L'architettura è la collezione risultante di modelli di progettazione per costruire un sistema.

Credo design è la creatività utilizzata per mettere insieme tutto questo?

Design Software ha una storia più lunga, mentre l'architettura software termine è appena 20 anni. Quindi, sta attraversando dolori della crescita in questo momento.

Gli accademici tendono a vedere l'architettura come parte del campo più ampio di progettazione del software. Anche se v'è un crescente riconoscimento che Arch è un campo all'interno di essa la propria.

praticanti tendono a vedere Arch come decisioni di progettazione di alto livello che sono strategiche e possono essere costosi in un progetto per annullare.

La linea esatta tra Arco e design dipende dal dominio del software. Per esempio, nel campo delle applicazioni Web, l'architettura a strati sta guadagnando la più popolarità attualmente (Biz livello di logica, Data Access Layer, etc.) Le parti di livello più basso di questa Arch sono considerati di progettazione (diagrammi di classe, metodo firme, ecc ) Questo sarebbe definita in modo diverso nei settori dei sistemi embedded, sistemi operativi, compilatori, ecc.

L'architettura è di alto livello, astratto e progettazione logica, mentre la progettazione del software è di basso livello, progettazione dettagliata e fisica.

Mi piace la definizione e la spiegazione di Roy Thomas Fielding su ciò che è architettura software nel suo articolo: stili architettonici e la progettazione di architetture basate su software di rete

  

Un'architettura software è un'astrazione degli elementi runtime di un sistema software durante alcune fasi del suo funzionamento. Un sistema può essere composto da molti livelli di astrazione e molte fasi di funzionamento, ciascuno con la propria architettura software.

Egli sottolinea "elementi run-time" e "livelli di astrazione".

Non c'è una risposta definitiva a questa causa "architettura software" e "progettazione del software" hanno un certo numero di definizioni e non v'è una definizione canonica per entrambi.

Un buon modo di pensare di esso è Len Bass, Paul Clements e la dichiarazione di Rick Kazman che "tutta l'architettura è il design, ma non tutta la progettazione è architettura" [Software Architecture in Practice]. Non sono sicuro che sono abbastanza d'accordo con quello (perché l'architettura può includere altre attività), ma cattura l'essenza che l'architettura è un'attività di progettazione che si occupa della sottoinsieme critica del design.

La mia definizione un po 'impertinente (che si trova sulla SEI definizioni pagina ) è che è l'insieme di decisioni che, se fatta a torto, causare il progetto per ottenere annullata.

Un tentativo utile a separare l'architettura, il design e l'implementazione come concetti è stato fatto da Amnon Eden e Rick Kazman qualche anno fa in un documento di ricerca dal titolo "Architettura, progettazione, implementazione", che può essere trovato qui: http://www.sei.cmu.edu/library/assets/ICSE03-1.pdf . Il loro linguaggio è piuttosto astratto, ma semplicisticamente si dice che Architettura è il design che può essere utilizzato in molti contesti ed è destinato ad essere applicato in tutto il sistema, progettazione è (err) Design che può essere utilizzato in molti contesti, ma viene applicata in una parte specifica del sistema, e applicazione è il design specifico di un contesto e applicato in quel contesto.

Quindi, una decisione di architettura potrebbe essere una decisione di integrare il sistema tramite la messaggistica piuttosto che RPC (quindi è un principio generale che potrebbe essere applicato in molti luoghi ed è destinata ad essere applicata a tutto il sistema), una decisione di progettazione potrebbe essere quella di utilizzare una struttura filettata master / slave nel modulo di gestione delle richieste di ingresso del sistema (un principio generale che potrebbe essere utilizzato ovunque ma in questo caso viene usato solo in un modulo) e, infine, una decisione di attuazione potrebbe essere spostare responsabilità per la sicurezza da la Richiesta Router al gestore richieste nel modulo Request manager (una decisione rilevante solo per quel contesto, utilizzato in questo contesto).

Spero che questo aiuta!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top