Software-Design
Software-Design ist der Prozess, durch den eine Agent erstellt eine Spezifikation von a Software -Artefakt beabsichtigt zu erreichen Toreunter Verwendung einer Reihe primitiver Komponenten und unterliegt zu Einschränkungen.[1] Das Softwaredesign kann sich entweder auf "alle Aktivitäten beziehen Bedarf Spezifikation und vor Programmierungwie ... [in] ein stilisierter Software -Engineering -Prozess. "[2]
Das Softwaredesign beinhaltet normalerweise die Problemlösung und Planung a Software Lösung. Dies beinhaltet sowohl eine Komponente auf niedriger Ebene als auch Algorithmus Design und ein hochrangiger Ebene, die Architektur Entwurf.
Überblick
Das Softwaredesign ist der Prozess der Vorstellung und Definition von Softwarelösungen für ein oder mehrere Probleme. Eine der Hauptkomponenten des Softwaredesigns ist die Analyse der Softwareanforderungen (SRA). SRA ist ein Teil der Softwareentwicklungsprozess Das listet auf Spezifikationen benutzt in Softwareentwicklung. Wenn die Software "halbautomatisch" ist oder Benutzer zentriert, Software -Design kann beinhalten Benutzer-Erfahrung-Design Nachgeben a Storyboard Um diese Spezifikationen zu bestimmen. Wenn die Software vollständig ist automatisiert (was bedeutet Nr Benutzer oder Benutzeroberfläche) Ein Softwaredesign kann so einfach sein wie a Flussdiagramm oder Text, der eine geplante Folge von Ereignissen beschreibt. Es gibt auch semi-Standard-Methoden wie Einheitliche Modellierungssprache und Grundlegende Modellierungskonzepte. In beiden Fällen einige Dokumentation des Plans ist normalerweise das Produkt des Designs. Darüber hinaus kann ein Softwaredesign sein Plattformunabhängig oder plattformspezifischAbhängig von der Verfügbarkeit der für das Design verwendeten Technologie.
Der Hauptunterschied zwischen Softwareanalyse und Design besteht darin, dass die Ausgabe einer Softwareanalyse aus kleineren Problemen besteht, die zu lösen sind. Darüber hinaus sollte die Analyse bei verschiedenen Teammitgliedern oder Gruppen nicht sehr unterschiedlich gestaltet werden. Im Gegensatz dazu konzentriert sich das Design auf Funktionen, und daher können und wird mehrere Designs für dasselbe Problem existieren. Abhängig von der Umgebung variiert das Design häufig, unabhängig davon, ob es aus zuverlässig erstellt wird Frameworks oder mit geeignetem implementiert Designmuster. Entwurfsbeispiele sind Betriebssysteme, Webseiten, mobile Geräte oder sogar das neue Cloud Computing -Paradigma.
Softwaredesign ist sowohl ein Prozess als auch ein Modell. Der Entwurfsprozess ist eine Abfolge von Schritten, mit der der Designer alle Aspekte der Software zum Erstellen beschreiben kann. Kreative Fähigkeiten, vergangene Erfahrungen, ein Gefühl dafür, was "gute" Software ausmacht, und ein allgemeines Engagement für Qualität sind Beispiele für kritische Erfolgsfaktoren für ein kompetentes Design. Es ist jedoch wichtig anzumerken, dass der Entwurfsprozess nicht immer ein unkompliziertes Verfahren ist. Das Designmodell kann mit den Plänen eines Architekten für ein Haus verglichen werden. Es beginnt mit der Repräsentation der Gesamtheit des Ding, das gebaut werden soll (z. B. eine dreidimensionale Darstellung des Hauses); Langsam wird das Ding verfeinert, um Leitlinien für die Konstruktion jedes Details (z. B. die Sanitärablagen) zu liefern. In ähnlicher Weise bietet das für Software erstellte Designmodell eine Vielzahl unterschiedlicher Ansichten der Computersoftware. Grundlegende Entwurfsprinzipien ermöglichen es dem Software -Ingenieur, den Entwurfsprozess zu navigieren. Davis[3] schlägt eine Reihe von Prinzipien für das Softwaredesign vor, die in der folgenden Liste angepasst und erweitert wurden:
- Der Entwurfsprozess sollte nicht unter "Tunnel Vision" leiden. Ein guter Designer sollte alternative Ansätze berücksichtigen und jeweils anhand der Anforderungen des Problems beurteilen, die zur Verfügung stehenden Ressourcen, die für den Job zur Verfügung stehen.
- Das Design sollte auf das Analysemodell zurückzuführen sein. Da ein einzelnes Element des Entwurfsmodells häufig auf mehrere Anforderungen zurückgeführt werden kann, ist es notwendig, ein Mittel zu haben, um zu verfolgen, wie die Anforderungen vom Entwurfsmodell erfüllt wurden.
- Das Design sollte das Rad nicht neu erfinden. Systeme werden unter Verwendung einer Reihe von Entwurfsmustern konstruiert, von denen viele wahrscheinlich zuvor aufgetreten sind. Diese Muster sollten immer als Alternative zur Neuerfindung ausgewählt werden. Die Zeit ist kurz und die Ressourcen begrenzt; Die Entwurfszeit sollte in die Darstellung von (wirklich neuen) Ideen investiert werden, indem Muster integriert werden (falls zutreffend).
- Das Design sollte "die intellektuelle Distanz zwischen der Software und dem Problem in der realen Welt minimieren. Das heißt, die Struktur des Softwaredesigns sollte nach Möglichkeit die Struktur der Problemdomäne nachahmen.
- Das Design sollte Gleichmäßigkeit und Integration aufweisen. Ein Design ist einheitlich, wenn es vollständig kohärent erscheint. Um dieses Ergebnis zu erzielen, sollten Stil- und Formatregeln für ein Designteam definiert werden, bevor das Designarbeiten beginnt. Es wird ein Design integriert, wenn die Definition von Schnittstellen zwischen Designkomponenten vorsichtig ist.
- Das Design sollte strukturiert sein, um Veränderungen zu berücksichtigen. Die im nächsten Abschnitt diskutierten Designkonzepte ermöglichen ein Design, um dieses Prinzip zu erreichen.
- Das Design sollte so strukturiert sein, dass es auch dann, wenn aberrante Daten, Ereignisse oder Betriebsbedingungen auftreten, sanft abbauen. Die gut gestaltete Software sollte niemals "bombardieren"; Es sollte so konzipiert werden, dass es ungewöhnliche Umstände berücksichtigt, und wenn es die Verarbeitung beenden muss, sollte es dies auf anmutige Weise tun.
- Design ist keine Codierung, Codierung ist kein Design. Selbst wenn detaillierte Verfahrensdesigns für Programmkomponenten erstellt werden, ist die Abstraktion des Entwurfsmodells höher als der Quellcode. Die einzigen auf der Codierungsebene getroffenen Entwurfsentscheidungen sollten die kleinen Implementierungsdetails behandeln, mit denen das Verfahrensdesign codiert werden kann.
- Das Design sollte auf Qualität beurteilt werden, während es geschaffen wird, nicht danach. Eine Vielzahl von Konzepten und Designmaßnahmen stehen zur Verfügung, um den Designer bei der Bewertung der Qualität während des gesamten Entwicklungsprozesses zu unterstützen.
- Das Design sollte überprüft werden, um konzeptionelle (semantische) Fehler zu minimieren. Manchmal besteht die Tendenz, sich auf Minutien zu konzentrieren, wenn das Design überprüft wird und den Wald für die Bäume fehlt. Ein Designteam sollte sicherstellen, dass wichtige konzeptionelle Elemente des Designs (Auslassungen, Mehrdeutigkeit, Inkonsistenz) behandelt wurden, bevor sie sich um die Syntax des Designmodells kümmerten.
Designkonzepte
Die Designkonzepte bieten dem Software -Designer eine Grundlage, aus der ausgefeiltere Methoden angewendet werden können. Eine Reihe grundlegender Designkonzepte hat sich entwickelt. Sie sind wie folgt:
- Abstraktion - Abstraktion ist das Prozess oder Ergebnis der Verallgemeinerung, indem der Informationsgehalt eines Konzepts oder eines beobachtbaren Phänomens reduziert wird, um nur Informationen zu erhalten, die für einen bestimmten Zweck relevant sind. Es ist ein Akt der Darstellung wesentlicher Merkmale, ohne die Hintergrunddetails oder Erklärungen einzubeziehen.
- Raffinesse - Es ist der Prozess der Ausarbeitung. Eine Hierarchie wird entwickelt, indem eine makroskopische Funktionserklärung schrittweise zerlegt wird, bis die Programmiersprachenaussagen erreicht sind. In jedem Schritt werden eine oder mehrere Anweisungen eines bestimmten Programms in detailliertere Anweisungen zerlegt. Abstraktion und Verfeinerung sind komplementäre Konzepte.
- Modularität - Softwarearchitektur ist in Komponenten unterteilt, die als Module bezeichnet werden.
- Softwarearchitektur - Es bezieht sich auf die Gesamtstruktur der Software und die Art und Weise, wie diese Struktur eine konzeptionelle Integrität für ein System bietet. Gute Software -Architektur erzielt einen guten Rendite in Bezug auf das gewünschte Ergebnis des Projekts, z. In Bezug auf Leistung, Qualität, Zeitplan und Kosten.
- Kontrollhierarchie - eine Programmstruktur, die die Organisation einer Programmkomponente darstellt und eine Hierarchie der Kontrolle impliziert.
- Strukturelle Partitionierung - Die Programmstruktur kann sowohl horizontal als auch vertikal unterteilt werden. Horizontale Partitionen definieren für jede Hauptprogrammfunktion getrennte Zweige der modularen Hierarchie. Die vertikale Partitionierung legt nahe, dass Kontrolle und Arbeit in der Programmstruktur oben nach unten verteilt werden sollten.
- Datenstruktur - Es ist eine Darstellung der logischen Beziehung zwischen einzelnen Datenelementen.
- Software -Prozedur - Es konzentriert sich auf die Verarbeitung jedes Moduls einzeln.
- Informationen verstecken sich - Module sollten angegeben und gestaltet werden, damit die in einem Modul enthaltenen Informationen für andere Module, die keine solchen Informationen benötigen, nicht zugänglich sind.
In seinem Objektmodell, Grady Booch Erwähnt Abstraktion, Kapselung, Modularisierung und Hierarchie als grundlegende Software -Designprinzipien.[4] Der Akronym Phame (Prinzipien der Hierarchie, Abstraktion, Modularisierung und Kapselung) wird manchmal verwendet, um auf diese vier grundlegenden Prinzipien zu verweisen.[5]
Entwurfsüberlegungen
Es gibt viele Aspekte, die im Design einer Software zu berücksichtigen sind. Die Wichtigkeit jeder Gegenleistung sollte die Ziele und Erwartungen widerspiegeln, die die Software erstellt wird, um sie zu erfüllen. Einige dieser Aspekte sind:
- Kompatibilität - Die Software kann mit anderen Produkten arbeiten, die für die Interoperabilität mit einem anderen Produkt ausgelegt sind. Zum Beispiel kann eine Software mit einer älteren Version von sich selbst rückwärtskompatibel sein.
- Erweiterbarkeit - Neue Funktionen können der Software ohne wesentliche Änderungen an der zugrunde liegenden Architektur hinzugefügt werden.
- Modularität - Die resultierende Software umfasst gut definierte, unabhängige Komponenten, was zu einer besseren Wartbarkeit führt. Die Komponenten könnten dann isoliert implementiert und getestet werden, bevor sie integriert werden, um ein gewünschtes Softwaresystem zu bilden. Dies ermöglicht die Arbeitsteilung in einem Softwareentwicklungsprojekt.
- Fehlertoleranz - Die Software ist resistent und kann sich vom Ausfall des Komponenten wiederherstellen.
- Wartbarkeit - Ein Maß dafür, wie leicht Fehlerbehebungen oder funktionale Änderungen erfolgen können. Eine hohe Wartbarkeit kann das Produkt von Modularität und Erweiterbarkeit sein.
- Verlässlichkeit (Software -Haltbarkeit) - Die Software kann eine erforderliche Funktion unter angegebenen Bedingungen für einen bestimmten Zeitraum ausführen.
- Wiederverwendbarkeit - Die Fähigkeit, einige oder alle Aspekte der bereits bestehenden Software in anderen Projekten ohne Änderung zu verwenden.
- Robustheit - Die Software kann unter Stress arbeiten oder unvorhersehbare oder ungültige Eingaben tolerieren. Zum Beispiel kann es mit Resilienz gegen geringe Speicherbedingungen ausgelegt werden.
- Sicherheit - Die Software kann feindliche Handlungen und Einflüsse standhalten und widerstehen.
- Benutzerfreundlichkeit - Die Software Benutzeroberfläche Muss für den Zielbenutzer/seine Zielgruppe verwendet werden. Standardwerte für die Parameter müssen so ausgewählt werden, dass sie für die Mehrheit der Benutzer eine gute Wahl sind.[6]
- Leistung - Die Software führt ihre Aufgaben innerhalb eines Zeitrahmens aus, der für den Benutzer akzeptabel ist und nicht zu viel Speicher benötigt.
- Portabilität - Die Software sollte in verschiedenen Bedingungen und Umgebungen verwendet werden.
- Skalierbarkeit - Die Software passt gut an die Erhöhung von Daten oder die hinzugefügten Funktionen oder die Anzahl der Benutzer.
Modellierungssprache
A Modellierungssprache ist jede künstliche Sprache, die verwendet werden kann, um Informationen, Wissen oder Systeme in einer Struktur auszudrücken, die durch eine konsistente Reihe von Regeln definiert wird. Diese Regeln werden zur Interpretation der Komponenten innerhalb der Struktur verwendet. Eine Modellierungssprache kann grafisch oder textuell sein. Beispiele für grafische Modellierungssprachen für das Softwaredesign sind:
- Architektur Beschreibung Sprache (ADL) ist eine Sprache, mit der die beschrieben und dargestellt wird Softwarearchitektur von a Software System.
- Geschäftsprozessmodellierungsnotation (BPMN) ist ein Beispiel für a Prozessmodellierung Sprache.
- AUSDRÜCKEN und Express-G (ISO 10303-11) ist ein internationaler allgemeiner Standard-Allzweck Datenmodellierung Sprache.
- Erweiterte Unternehmensmodellsprache erweiterte Sprache (EEML) wird üblicherweise für die Modellierung des Geschäftsprozesses in einer Reihe von Schichten verwendet.
- Flussdiagramme sind schematische Darstellungen von Algorithmen oder anderen schrittweisen Prozessen.
- Grundlegende Modellierungskonzepte (FMC) ist die Modellierung der Sprache für softwareintensive Systeme.
- Idef ist eine Familie von Modellierungssprachen, die das bemerkenswerteste umfasst Idef0 Für funktionale Modellierung, Idef1x zur Informationsmodellierung und Idef5 zum Modellieren Ontologien.
- Jackson strukturierte Programmierung (JSP) ist eine Methode zur strukturierten Programmierung basierend auf Korrespondenzen zwischen Datenstromstruktur und Programmstruktur.
- Lepus3 ist ein objektorientierter visuelle Design Beschreibung Sprache und a Formale Spezifikation Sprache, die hauptsächlich für die Modellierung großer objektorientierter Modellierung geeignet ist (Java, C ++, C#) Programme und Designmuster.
- Einheitliche Modellierungssprache (UML) ist eine allgemeine Modellierungssprache, um Software sowohl strukturell als auch verhaltensmäßig zu beschreiben. Es hat eine grafische Notation und ermöglicht eine Erweiterung mit a Profil (UML).
- Legierung (Spezifikationssprache) ist eine Spezifikationssprache für allgemeine Zwecke, um komplexe strukturelle Einschränkungen und Verhaltensweisen in einem Softwaresystem auszudrücken. Es bietet eine kurze Sprachbasis auf der relationalen Logik erster Ordnung.
- Systemmodellierungssprache (Sysml) ist neu Allgemeine Modellierung Sprache für Systemtechnik.
- Service-orientiertes Modellierungsrahmen (SOMF)[7]
Designmuster
Ein Software -Designer oder Architekt kann ein Designproblem identifizieren, das in der Vergangenheit von anderen besucht und möglicherweise sogar gelöst wurde. Eine Vorlage oder ein Muster, das eine Lösung für ein gemeinsames Problem beschreibt Designmuster. Die Wiederverwendung solcher Muster kann dazu beitragen, den Softwareentwicklungsprozess zu beschleunigen.[8]
Technik
Die Schwierigkeit, den Begriff "Design" in Bezug auf Software zu verwenden, besteht darin, dass in einigen Sinnen der Quellcode eines Programms ist Das Design für das Programm, das es produziert. In dem Maße, in dem dies wahr ist, bezieht sich "Software -Design" auf das Design des Designs. Edsger W. Dijkstra bezeichnete diese Überlagerung semantischer Ebenen als "radikale Neuheit" der Computerprogrammierung,[9] und Donald Knuth benutzte seine Erfahrung beim Schreiben Tex Beschreiben Sie die Sinnlosigkeit des Versuchs, ein Programm vor der Implementierung zu entwerfen:
TEX wäre ein völliger Fehler gewesen, wenn ich es nur spezifiziert hätte und nicht vollständig an seiner ersten Implementierung teilgenommen hätte. Der Umsetzungsprozess führte mich ständig zu unerwarteten Fragen und zu neuen Einsichten darüber, wie die ursprünglichen Spezifikationen verbessert werden konnten.[10]
Verwendungszweck
Software -Design -Dokumentation kann überprüft oder präsentiert werden, um Einschränkungen, Spezifikationen und sogar Anforderungen zu ermöglichen, die zuvor angepasst werden können Computerprogrammierung. Neugestaltung kann nach Überprüfung eines programmierten Auftritts auftreten Simulation oder Prototyp. Es ist möglich, Software im Programmierungsprozess zu entwerfen, ohne Plan- oder Anforderungsanalyse,[11] Für komplexere Projekte würde dies jedoch nicht als machbar angesehen werden. Ein separates Design vor dem Programmieren ermöglicht es multidisziplinär Designer und Fachexperten (KMU) Zusammenarbeit mit hochqualifizierten Programmierern für Software, die sowohl nützlich als auch technisch solide sind.
Siehe auch
- Aspektorientierte Softwareentwicklung
- Bachelor of Science in Informationstechnologie
- Entwurf
- Design Begründung
- Grafikdesign
- Interaktionsdesign
- Icon Design
- Umriss der Software
- Umriss der Softwareentwicklung
- Umriss der Software -Engineering
- Suchbasierter Software-Engineering
- Software -Design -Beschreibung (IEEE 1016)
- Software-Entwicklung
- Benutzererfahrung
- UI-Design
- Web-Design
- Zero One Infinity
Verweise
- ^ Ralph, P. und Wand, Y. (2009). Ein Vorschlag für eine formale Definition des Designkonzepts. In Lyytinen, K., Loucopoulos, P.,, Mylopoulos, J.und Robinson, W., Herausgeber, Designanforderungen Workshop (LNBIP 14), S. 103–136. Springer-Verlag, p. 109 doi:10.1007/978-3-540-92966-6_6.
- ^ Freeman, Peter; David Hart (2004). "Eine Wissenschaft des Designs für softwareintensive Systeme". Kommunikation der ACM. 47 (8): 19–21 [20]. doi:10.1145/1012037.1012054. S2CID 14331332.
- ^ Davis, A: "201 Principles of Software Development", McGraw Hill, 1995.
- ^ Booch, Grady; et al. (2004). Objektorientierte Analyse und Design mit Anwendungen (3. Aufl.). MA, USA: Addison Wesley. ISBN 0-201-89551-x. Abgerufen 30. Januar 2015.
- ^ Suryanarayana, Girish (November 2014). Refactoring für Software -Design -Gerüche. Morgan Kaufmann. p. 258. ISBN 978-0128013977.
- ^ Carroll, John, ed. (1995). Szenariobasiertes Design: Stellen Sie sich Arbeit und Technologie in der Systementwicklung vor. New York: John Wiley & Sons. ISBN 0471076597.
- ^ Bell, Michael (2008). "Einführung in serviceorientierte Modellierung". Service-orientierte Modellierung: Serviceanalyse, Design und Architektur. Wiley & Söhne. ISBN 978-0-470-14111-3.
- ^ Judith Bishop. "C# 3.0 Designmuster: Verwenden Sie die Leistung von C# 3.0, um reale Probleme zu lösen.". C# Bücher von O'Reilly Media. Abgerufen 2012-05-15.
Wenn Sie die Entwicklung Ihrer .NET -Anwendungen beschleunigen möchten, sind Sie bereit für C# -Designmuster - elegante, akzeptierte und nachgewiesene Möglichkeiten, um gemeinsame Programmierprobleme anzugehen.
- ^ Dijkstra, E. W. (1988). "Über die Grausamkeit des wirklich lehrenden Computing Science". Abgerufen 2014-01-10.
- ^ Knuth, Donald E. (1989). "Anmerkungen zu den Fehlern von Tex" (PDF).
- ^ Ralph, P. und Wand, Y. Ein Vorschlag für eine formale Definition des Designkonzepts. IN, Lyytinen, K., Loucopoulos, P., Mylopoulos, J. und Robinson, W., (Hrsg.), Design Requirtion Engineering: Eine zehnjährige Perspektive: Springer-Verlag, 2009, S. 103-136
^Roger S. Pressman (2001). Software -Engineering: Ansatz eines Praktikers. McGraw-Hill. ISBN 0-07-365578-3.