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.

326voto

Razzie Punkte 30442

Ja, Sie haben Recht. Die Architektur eines Systems ist sein "Skelett". Sie ist die höchste Abstraktionsebene eines Systems. Welche Art der Datenspeicherung ist vorhanden, wie interagieren die Module miteinander, welche Wiederherstellungssysteme gibt es. Genau wie Entwurfsmuster gibt es auch Architekturmuster: MVC, 3-stufiger Schichtaufbau, usw.

Beim Softwaredesign geht es um die Gestaltung der einzelnen Module/Komponenten. Was sind die Aufgaben, Funktionen von Modul x? Von Klasse Y? Was kann sie tun und was nicht? Welche Entwurfsmuster können verwendet werden?

Kurz gesagt, geht es bei der Software-Architektur mehr um den Entwurf des gesamten Systems, während beim Software-Design der Schwerpunkt auf der Ebene der Module/Komponenten/Klassen liegt.

80voto

Patrick Karcher Punkte 22087

In einigen Beschreibungen der SDLC (Software Development Life Cycle) sie sind austauschbar, aber der Konsens ist, dass sie unterschiedlich sind. Sie sind gleichzeitig: unterschiedlich (1) Stufen , (2) Zuständigkeitsbereiche und (3) Entscheidungsebenen .

  • Architektur ist das Gesamtbild: die Wahl der Rahmenbedingungen, der Sprachen, des Umfangs, der Ziele und der High-Level-Methodologien ( Rationale , Wasserfall , wendig , usw.).
  • Gestaltung ist das kleinere Bild: der Plan, wie der Code organisiert werden soll; wie die Verträge zwischen den verschiedenen Teilen des Systems aussehen sollen; die laufenden Umsetzung der Methoden und Ziele des Projekts. In dieser Phase wird die Spezifikation erstellt.

Diese beiden Stufen werden scheinen verschmelzen aus unterschiedlichen Gründen miteinander.

  1. Kleinere Projekte haben oft nicht genug Umfang, um die Planung in diese beiden Phasen zu unterteilen.
  2. Ein Projekt kann Teil eines größeren Projekts sein, und daher sind Teile beider Phasen bereits beschlossen. (Es gibt bereits bestehende Datenbanken, Konventionen, Standards, Protokolle, Frameworks, wiederverwendbaren Code usw.)
  3. Neuere Denkweisen über den SDLC (siehe Agile Methodologien ) diesen traditionellen Ansatz etwas umgestalten. Design (in geringerem Maße auch Architektur) findet während des gesamten SDLC statt absichtlich . Oft gibt es mehr Iterationen wo sich der ganze Prozess immer wieder wiederholt.
  4. Die Softwareentwicklung ist ohnehin schon kompliziert und schwer zu planen, aber die Kunden/Manager/Verkäufer machen es in der Regel noch schwieriger, indem sie die Ziele und Anforderungen mitten im Prozess ändern. Design- und sogar Architekturentscheidungen muss später im Rahmen des Projekts durchgeführt werden, unabhängig davon, ob dies geplant ist oder nicht.

Selbst wenn die Phasen oder Verantwortungsbereiche ineinander übergehen und überall stattfinden, ist es immer gut zu wissen, auf welcher Ebene die Entscheidungsfindung stattfindet. (Wir könnten ewig so weitermachen, aber ich versuche, es kurz zu halten): Selbst wenn es den Anschein hat, dass Ihr Projekt keine formale Architektur- oder Designphase/AOR/Dokumentation hat, findet sie statt, ob jemand sie bewusst durchführt oder nicht. Wenn niemand beschließt, Architektur zu machen, dann wird eine Standardarchitektur erstellt, die wahrscheinlich schlecht ist. Das Gleiche gilt für den Entwurf. Diese Konzepte sind fast wichtiger wenn es keine formalen Stufen gibt, die sie repräsentieren.

55voto

Chris Kannon Punkte 5601

Architektur ist strategisch, während Design taktisch ist.

Die Architektur umfasst die Rahmenwerke, Werkzeuge, Programmierparadigmen, komponentenbasierten Software-Engineering-Standards, High-Level-Prinzipien

Der Entwurf ist eine Tätigkeit, die sich mit lokalen Beschränkungen befasst, z. B. Entwurfsmustern, Programmiersprachen und Refactorings.

38voto

George S. Punkte 603

Ich fand dies, als ich selbst nach einer einfachen Unterscheidung zwischen Architektur und Design suchte;
Was halten Sie von dieser Art der Betrachtung?

  • Architektur ist das, "was" wir bauen;
  • Design ist das "Wie", das wir bauen;

21voto

TryinHard Punkte 3940
  1. Unter Architektur versteht man die konzeptionelle Struktur und logische Organisation eines Computers oder computergestützten Systems.

    Ein Entwurf ist ein Plan oder eine Zeichnung, der/die das Aussehen und die Funktion eines Systems oder eines Gegenstands vor seiner Herstellung zeigt.

  2. Wenn Sie eine Komponente "entwerfen", legen Sie fest, wie sie sich in einem größeren System verhält.

    Wenn Sie dieselbe Komponente "entwerfen", legen Sie fest, wie sie sich intern verhält.

Alle Architektur ist Design, aber NICHT alles Design ist Architektur.

What Teil ist das Design, der How ist die konkrete Umsetzung und der Schnittpunkt von What y How ist Architektur.

Bild zur Unterscheidung von Architektur und Design :

Design vs Architecture

Es gibt auch Entwurfsentscheidungen, die nicht architektonisch bedeutsam sind, d.h. nicht zum Bereich der Architektur gehören. Dazu gehören zum Beispiel einige komponenteninterne Entwurfsentscheidungen, wie die Wahl des Algorithmus, die Auswahl der Datenstruktur usw.

Jede Designentscheidung, die außerhalb der Komponentengrenze nicht sichtbar ist, ist ein internes Design einer Komponente und ist nicht architektonisch. Dies sind die Entwurfsentscheidungen, die ein Systemarchitekt dem Moduldesigner oder dem Implementierungsteam überlassen würde, solange ihr Entwurf nicht gegen die architektonischen Beschränkungen verstößt, die durch die Architektur auf Systemebene vorgegeben sind.

Der Link, der die gute Analogie

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