Grundlagen des Software-Designs

Software-Design ist ein Prozess, um Benutzeranforderungen in eine geeignete Form umzuwandeln, die dem Programmierer bei der Codierung und Implementierung von Software hilft.

Zur Bewertung der Benutzeranforderungen wird ein SRS-Dokument (Software Requirement Specification) erstellt, während für die Codierung und Implementierung spezifischere und detailliertere Anforderungen in Bezug auf die Software erforderlich sind. Die Ausgabe dieses Prozesses kann direkt in die Implementierung in Programmiersprachen verwendet werden.

Software-Design ist der erste Schritt in SDLC (Software Design Life Cycle), bei dem die Konzentration von der Problemdomäne zur Lösungsdomäne verlagert wird. Es wird versucht anzugeben, wie die in SRS genannten Anforderungen erfüllt werden sollen.

Software Design Levels

Das Software-Design liefert drei Ergebnisebenen:

  • Architectural Design - Das architektonische Design ist die höchste abstrakte Version des Systems. Es identifiziert die Software als ein System mit vielen Komponenten, die miteinander interagieren. Auf dieser Ebene erhalten die Designer die Idee einer vorgeschlagenen Lösungsdomäne.
  • High-level Design- Das übergeordnete Design unterteilt das Konzept der architektonischen Gestaltung in einzelne Entitäten und mehrere Komponenten in eine weniger abstrahierte Ansicht von Subsystemen und Modulen und zeigt deren Interaktion miteinander. High-Level-Design konzentriert sich darauf, wie das System zusammen mit all seinen Komponenten in Form von Modulen implementiert werden kann. Es erkennt den modularen Aufbau jedes Teilsystems und ihre Beziehung und Interaktion untereinander.
  • Detailed Design- Das detaillierte Design befasst sich mit dem Implementierungsteil eines Systems und seiner Subsysteme in den beiden vorherigen Designs. Es wird detaillierter auf Module und deren Implementierungen eingegangen. Es definiert die logische Struktur jedes Moduls und seiner Schnittstellen für die Kommunikation mit anderen Modulen.

Modularisierung

Die Modularisierung ist eine Technik zum Aufteilen eines Softwaresystems in mehrere diskrete und unabhängige Module, von denen erwartet wird, dass sie in der Lage sind, Aufgaben unabhängig voneinander auszuführen. Diese Module können als Grundkonstrukte für die gesamte Software fungieren. Designer neigen dazu, Module so zu gestalten, dass sie separat und unabhängig ausgeführt und / oder kompiliert werden können.

Das modulare Design folgt unbeabsichtigt den Regeln der Problemlösungsstrategie „Teilen und Erobern“. Dies liegt daran, dass das modulare Design einer Software viele weitere Vorteile mit sich bringt.

Vorteil der Modularisierung:

  • Kleinere Komponenten sind leichter zu warten
  • Das Programm kann nach funktionalen Aspekten unterteilt werden
  • Die gewünschte Abstraktionsebene kann in das Programm aufgenommen werden
  • Komponenten mit hoher Kohäsion können wieder verwendet werden
  • Die gleichzeitige Ausführung kann ermöglicht werden
  • Aus Sicherheitsgründen erwünscht

Parallelität

In der Vergangenheit soll die gesamte Software nacheinander ausgeführt werden. Mit sequentieller Ausführung ist gemeint, dass der codierte Befehl nacheinander ausgeführt wird, was bedeutet, dass zu einem bestimmten Zeitpunkt nur ein Teil des Programms aktiviert wird. Angenommen, eine Software verfügt über mehrere Module. Dann kann zu jedem Zeitpunkt der Ausführung nur eines der Module als aktiv befunden werden.

Beim Software-Design wird die Parallelität implementiert, indem die Software in mehrere unabhängige Ausführungseinheiten wie Module aufgeteilt und parallel ausgeführt wird. Mit anderen Worten, Parallelität bietet der Software die Möglichkeit, mehr als einen Teil des Codes parallel zueinander auszuführen.

Die Programmierer und Designer müssen die Module erkennen, die parallel ausgeführt werden können.

Beispiel

Die Rechtschreibprüfung im Textverarbeitungsprogramm ist ein Softwaremodul, das neben dem Textverarbeitungsprogramm selbst ausgeführt wird.

Kopplung und Zusammenhalt

Wenn ein Softwareprogramm modularisiert wird, werden seine Aufgaben basierend auf einigen Merkmalen in mehrere Module unterteilt. Wie wir wissen, sind Module eine Reihe von Anweisungen, die zusammengestellt werden, um einige Aufgaben zu erfüllen. Sie werden jedoch als eine Einheit betrachtet, können sich jedoch aufeinander beziehen, um zusammenzuarbeiten. Es gibt Maßnahmen, mit denen die Qualität eines Entwurfs von Modulen und deren Wechselwirkung zwischen ihnen gemessen werden kann. Diese Maßnahmen werden als Kopplung und Zusammenhalt bezeichnet.

Zusammenhalt

Kohäsion ist ein Maß, das den Grad der Intra-Zuverlässigkeit innerhalb von Elementen eines Moduls definiert. Je größer der Zusammenhalt, desto besser ist das Programmdesign.

Es gibt sieben Arten des Zusammenhalts, nämlich -

  • Co-incidental cohesion -Es handelt sich um einen ungeplanten und zufälligen Zusammenhalt, der möglicherweise darauf zurückzuführen ist, dass das Programm aus Gründen der Modularisierung in kleinere Module aufgeteilt wird. Da es nicht geplant ist, kann es den Programmierern Verwirrung stiften und wird im Allgemeinen nicht akzeptiert.
  • Logical cohesion - Wenn logisch kategorisierte Elemente zu einem Modul zusammengefügt werden, spricht man von logischem Zusammenhalt.
  • Temporal Cohesion - Wenn Elemente eines Moduls so organisiert sind, dass sie zu einem ähnlichen Zeitpunkt verarbeitet werden, spricht man von zeitlichem Zusammenhalt.
  • Procedural cohesion - Wenn Elemente eines Moduls zusammengefasst werden, die nacheinander ausgeführt werden, um eine Aufgabe auszuführen, spricht man von prozeduralem Zusammenhalt.
  • Communicational cohesion - Wenn Elemente eines Moduls zusammengefasst werden, die nacheinander ausgeführt werden und mit denselben Daten (Informationen) arbeiten, spricht man von Kommunikationszusammenhalt.
  • Sequential cohesion - Wenn Elemente eines Moduls gruppiert werden, weil die Ausgabe eines Elements als Eingabe für ein anderes Element usw. dient, wird dies als sequentielle Kohäsion bezeichnet.
  • Functional cohesion - Es wird als der höchste Grad an Kohäsion angesehen und wird sehr erwartet. Elemente des Moduls im funktionalen Zusammenhalt werden gruppiert, weil sie alle zu einer einzigen genau definierten Funktion beitragen. Es kann auch wiederverwendet werden.

Kupplung

Die Kopplung ist eine Maßnahme, die den Grad der gegenseitigen Zuverlässigkeit zwischen Modulen eines Programms definiert. Es zeigt an, auf welcher Ebene die Module interferieren und miteinander interagieren. Je niedriger die Kopplung, desto besser das Programm.

Es gibt fünf Kopplungsstufen, nämlich -

  • Content coupling - Wenn ein Modul direkt auf den Inhalt eines anderen Moduls zugreifen oder diesen ändern oder darauf verweisen kann, spricht man von einer Kopplung auf Inhaltsebene.
  • Common coupling- Wenn mehrere Module Lese- und Schreibzugriff auf einige globale Daten haben, spricht man von gemeinsamer oder globaler Kopplung.
  • Control coupling- Zwei Module werden als steuerungsgekoppelt bezeichnet, wenn eines die Funktion des anderen Moduls bestimmt oder dessen Ausführungsfluss ändert.
  • Stamp coupling- Wenn mehrere Module eine gemeinsame Datenstruktur haben und an verschiedenen Teilen arbeiten, spricht man von einer Stempelkopplung.
  • Data coupling- Datenkopplung ist, wenn zwei Module durch Übergabe von Daten (als Parameter) miteinander interagieren. Wenn ein Modul die Datenstruktur als Parameter übergibt, sollte das empfangende Modul alle seine Komponenten verwenden.

Im Idealfall wird keine Kupplung als die beste angesehen.

Designüberprüfung

Die Ausgabe des Software-Entwurfsprozesses besteht aus Entwurfsdokumentation, Pseudocodes, detaillierten Logikdiagrammen, Prozessdiagrammen und einer detaillierten Beschreibung aller funktionalen oder nicht funktionalen Anforderungen.

Die nächste Phase, die Implementierung von Software, hängt von allen oben genannten Ausgaben ab.

Anschließend muss die Ausgabe überprüft werden, bevor mit der nächsten Phase fortgefahren werden kann. Je früher ein Fehler erkannt wird, desto besser ist er oder wird er möglicherweise erst beim Testen des Produkts erkannt. Wenn die Ergebnisse der Entwurfsphase in formaler Notationsform vorliegen, sollten die zugehörigen Tools zur Verifizierung verwendet werden. Andernfalls kann eine gründliche Entwurfsüberprüfung zur Verifizierung und Validierung verwendet werden.

Durch den strukturierten Überprüfungsansatz können Prüfer Fehler erkennen, die durch das Übersehen bestimmter Bedingungen verursacht werden können. Eine gute Entwurfsprüfung ist wichtig für ein gutes Software-Design, Genauigkeit und Qualität.