341 Stimmen

Softwareentwurf vs. Softwarearchitektur

Kann mir jemand den Unterschied zwischen Softwaredesign und Softwarearchitektur erklären?

Genauer gesagt: Wenn Sie jemandem sagen, er solle Ihnen den "Entwurf" präsentieren - was erwarten Sie dann von ihm? Dasselbe gilt für die "Architektur".

Mein derzeitiges Verständnis ist:

  • Entwurf: UML-Diagramm/Ablaufdiagramm/einfache Wireframes (für die Benutzeroberfläche) für ein bestimmtes Modul/Teil des Systems
  • Architektur: Komponentendiagramm (das zeigt, wie die verschiedenen Module des Systems miteinander und mit anderen Systemen kommunizieren), welche Sprache soll verwendet werden, Muster...?

Korrigieren Sie mich, wenn ich falsch liege. Ich habe Wikipedia hat Artikel über http://en.wikipedia.org/wiki/Software_design y http://en.wikipedia.org/wiki/Software_architecture aber ich bin mir nicht sicher, ob ich sie richtig verstanden habe.

15voto

user662182 Punkte 181

Ich würde sagen, Sie haben Recht, mit meinen eigenen Worten;

Architektur ist die Zuordnung von Systemanforderungen zu Systemelementen. Vier Aussagen über eine Architektur:

  1. Sie kann nicht-funktionale Anforderungen wie Sprache oder Muster einführen.
  2. Sie definiert die Interaktion zwischen Komponenten, Schnittstellen, Zeitplanung usw.
  3. Es dürfen keine neuen Funktionen eingeführt werden,
  4. Sie weist den Elementen die (geplanten) Funktionen zu, die das System ausführen soll.

Architektur ist eine wesentlicher technischer Schritt wenn eine Komplexität des Systems unterteilt wird.

Beispiel: Denken Sie an Ihr Haus, Sie brauchen keinen Architekten für Ihre Küche (nur ein Element), aber das gesamte Gebäude braucht einige Interaktionsdefinitionen, wie Türen und ein Dach. .

Gestaltung ist eine informative Darstellung der (vorgeschlagenen) Implementierung der Funktion. Sie ist dazu gedacht, Feedback einzuholen und mit den Beteiligten zu diskutieren. Es könnte eine gute Praxis sein, aber ist kein wesentlicher technischer Schritt .

Es wäre schön, das Küchendesign zu sehen, bevor die Küche installiert wird, aber es ist nicht wesentlich für die Kochanforderung :

Wenn ich darüber nachdenke, kann man feststellen:

  • Architektur ist für eine Öffentlichkeit/Ingenieure auf einer detaillierteren Abstraktionsebene
  • der Entwurf ist für die Öffentlichkeit auf einer weniger detaillierten Abstraktionsebene bestimmt

14voto

Peter Gfader Punkte 7557

Meine Erinnerung:

  • Wir können das Design ändern, ohne jemanden zu fragen
  • Wenn wir die Architektur ändern, müssen wir dies jemandem mitteilen (Team, Kunde, Stakeholder, ...)

6voto

Enrique Molinari Punkte 297

Ich denke, wir sollten die folgende Regel anwenden, um zu bestimmen, wann wir über Design und wann über Architektur sprechen: Wenn die Elemente eines von Ihnen erstellten Softwarebildes eins zu eins auf eine syntaktische Konstruktion einer Programmiersprache abgebildet werden können, dann handelt es sich um Design, andernfalls um Architektur.

Wenn Sie zum Beispiel ein Klassendiagramm oder ein Sequenzdiagramm sehen, können Sie eine Klasse und ihre Beziehungen in einer objektorientierten Programmiersprache mit Hilfe der syntaktischen Konstruktion Klasse abbilden. Dies ist eindeutig Design. Darüber hinaus könnte dies dazu führen, dass diese Diskussion einen Bezug zu der Programmiersprache hat, die Sie zur Implementierung eines Softwaresystems verwenden werden. Wenn Sie Java verwenden, gilt das vorherige Beispiel, da Java eine objektorientierte Programmiersprache ist. Wenn Sie ein Diagramm erstellen, das Pakete und ihre Abhängigkeiten zeigt, ist das auch Design. Sie können das Element (in diesem Fall ein Paket) auf eine syntaktische Java-Konstruktion abbilden.

Angenommen, Ihre Java-Anwendung ist in Module unterteilt, und jedes Modul ist ein Satz von Paketen (dargestellt als eine jar-Datei), und Sie erhalten ein Diagramm mit den Modulen und ihren Abhängigkeiten, dann ist das Architektur. In Java gibt es keine Möglichkeit (zumindest nicht bis Java 7), ein Modul (eine Menge von Paketen) auf eine syntaktische Konstruktion abzubilden. Sie werden vielleicht auch feststellen, dass dieses Diagramm eine höhere Abstraktionsebene Ihres Softwaremodells darstellt. Jedes Diagramm, das über einem Paketdiagramm liegt, stellt bei der Entwicklung in der Programmiersprache Java eine Architekturansicht dar. Wenn Sie hingegen in Modula-2 entwickeln, stellt ein Moduldiagramm einen Entwurf dar.

(Ein Fragment aus http://www.copypasteisforword.com/notes/software-architecture-vs-software-design )

5voto

Paulo Merson Punkte 11246

Architektur ist Design, aber nicht jedes Design ist architektonisch. Daher wäre es streng genommen sinnvoller, zu versuchen, zu unterscheiden zwischen architektonisches Design y nicht-architektonische Gestaltung . Und was ist der Unterschied? Es kommt darauf an! Jeder Softwarearchitekt hat vielleicht eine andere Antwort (ymmv!). Wir entwickeln unsere Heuristiken, um eine Antwort zu finden, wie zum Beispiel "Klassendiagramme sind Architektur und Sequenzdiagramme sind Design". Siehe DSA-Buch für mehr.

Es ist üblich zu sagen, dass die Architektur auf einer höheren Abstraktionsebene angesiedelt ist als das Design, oder dass die Architektur logisch und das Design physikalisch ist. Aber dieser Begriff ist zwar allgemein akzeptiert, aber in der Praxis nutzlos. Wo ziehen Sie die Grenze zwischen hoher oder niedriger Abstraktion, zwischen logisch und physikalisch? Es kommt darauf an!

Mein Vorschlag lautet also:

  • ein einziges Entwurfsdokument erstellen.
  • Benennen Sie dieses Design-Dokument so, wie Sie es wünschen oder besser, wie es die Leser gewohnt sind. Beispiele: "Software-Architektur", "Software-Design-Spezifikation".
  • dieses Dokument in Ansichten aufteilen und daran denken, dass Sie eine Ansicht als Verfeinerung einer anderen Ansicht erstellen können.
  • die Ansichten im Dokument durch Hinzufügen von Querverweisen oder Hyperlinks navigierbar machen
  • dann haben Sie Ansichten auf höherer Ebene, die einen breiten, aber oberflächlichen Überblick über den Entwurf geben, und Ansichten, die näher an der Umsetzung liegen und enge, aber tiefere Entwurfsdetails zeigen.
  • können Sie sich ein Beispiel für ein Architekturdokument mit mehreren Ansichten ansehen ( aquí ).

Nachdem ich das alles gesagt habe... Eine wichtigere Frage, die wir uns stellen müssen, lautet: Wie viel Design ist genug? Das heißt, wann sollte ich aufhören, das Design (in Diagrammen oder in Prosa) zu beschreiben, und zur Codierung übergehen?

5voto

Tavi Punkte 69

Ich persönlich mag das hier:

"Der Designer kümmert sich darum, was passiert, wenn ein Benutzer eine Taste drückt, und der Architekt kümmert sich darum, was passiert, wenn zehntausend Benutzer eine Taste drücken."

SCEA für Java™ EE Studienhandbuch von Mark Cade und Humphrey Sheil

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X