Grundlagen des Software-Designs und der Systemarchitektur
Strukturiertes Systemdesign
Das strukturierte Systemdesign ist der Prozess der Entscheidung, welche Komponenten und Verbindungen zwischen ihnen erforderlich sind, um ein eindeutig festgelegtes Problem zu lösen.
Kernbereiche des Designs
- Daten-Design: Wandelt die während der Analyse erstellten Informationsmodelle in Datenstrukturen um, die von der Software implementiert werden.
- Strukturelles Design: Definiert die Beziehungen zwischen den wichtigsten Strukturelementen des Programms. Das Hauptziel ist die Entwicklung einer modularen Programmstruktur und die Festlegung der Kontrollbeziehungen zwischen den Modulen.
- Prozedurales Design: Verwandelt die Strukturelemente in eine prozedurale Beschreibung der Software. Dies erfolgt, nachdem die Programmstruktur und die Daten definiert wurden, um die notwendigen Algorithmen festzulegen.
Qualität im Software-Design
Design ist der Prozess, der hinter der Qualität der Softwareentwicklung steht. Es produziert Darstellungen, anhand derer die Qualität beurteilt werden kann. Structured Design zielt darauf ab, die Softwareentwicklung von einer traditionellen zu einer technischen Disziplin zu führen. Wichtige Qualitätsmerkmale sind: Effizienz, Wartbarkeit, Änderbarkeit, Flexibilität und Nutzbarkeit.
Systemdesign
Das Systemdesign ist die Strategie auf hoher Ebene, um Probleme zu lösen und eine Lösung aufzubauen. Dabei sind folgende Entscheidungen zu treffen:
- Organisation des Systems in Subsysteme
- Identifikation der inhärenten Konkurrenz
- Zuweisung von Teilsystemen an Prozessoren und Aufgaben
- Verwaltung des Zugriffs auf globale Ressourcen
- Wahl der Steuerungs-Software
- Verwaltung von Randbedingungen und Prioritäten
Modellbau und objektorientiertes Design
Dieses Paradigma basiert auf der Lösung von Problemen durch Konzepte, die auf Modellen der realen Welt basieren.
- Objektmodell: Beschreibt die Datenstruktur von Objekten und deren Beziehungen.
- Dynamisches Modell: Beschreibt die Aspekte des Verhaltens eines Systems über die Zeit.
- Komponente: Ein vorverpacktes Stück Code, das Standard-Funktionalität über Schnittstellen kapselt.
Vorteile des objektorientierten Ansatzes
- Wiederverwendung von Software: Führt zu einem höheren Grad an Wiederverwendbarkeit.
- Vereinfachung von Tests: Ermöglicht das Testen einzelner Komponenten vor der Integration.
- Vereinfachte Wartung: Eine schwache Kopplung zwischen Komponenten erlaubt Updates oder Erweiterungen ohne Auswirkungen auf andere Systemteile.
- Höhere Qualität: Kontinuierliche Verbesserung der Komponenten durch Experten steigert die Qualität der Anwendung.
Software-Architektur
Die Software-Architektur ist die grundlegende Organisation eines Systems, gebildet durch ihre Bestandteile, deren Beziehungen, den Kontext sowie die Prinzipien ihrer Gestaltung und Entwicklung. Ziel ist es, die Entscheidungsfindung zu unterstützen und eine gemeinsame Sprache für die beteiligten Teams zu etablieren.
Modelle und Ansichten
- Statische Sicht: Beschreibt die Architektur-Komponenten.
- Funktionale Sicht: Beschreibt die Funktion jeder Komponente.
- Dynamische Sicht: Beschreibt, wie sich Komponenten über die Zeit verhalten und interagieren.
Gängige Architekturen
- Monolithische Struktur: Die Software ist in eng verbundenen funktionalen Gruppen organisiert.
- Client-Server: Die rechnerische Last wird auf zwei Teile verteilt.
- Schichtenarchitektur: Eine Spezialisierung der Client-Server-Architektur, bei der die Last in drei Schichten unterteilt ist: Präsentation (UI), Berechnung (Business Logic) und Speicherung (Persistenz).
Spezielle Designbereiche
User Interface Design
Das Design von Anwendungen, Maschinen, mobilen Kommunikationsgeräten und Websites, das sich auf die User Experience (UX) konzentriert.
Datenbankdesign
Ein komplexer Prozess, der durch einfache Regeln vereinfacht werden kann, um eine optimale Datenbankstruktur zu schaffen.
Design und Prozesssteuerung
Die angemessene Vorbereitung von Daten und deren Verarbeitung durch Regeln und Verfahren. Kontrolle umfasst dabei Prüfung, Inspektion, Revision und Verwaltung von Prozessen.
Software-Metriken
Eine Metrik ist ein Instrument, das ein Kriterium quantifiziert. Sie helfen, technische Verfahren und das Produkt selbst zu verstehen.
Arten von Metriken
- Indirekte Maßnahmen: Funktionalität, Qualität, Komplexität, Effizienz, Zuverlässigkeit, Wartbarkeit.
- Technische Metriken: Fokus auf Software-Eigenschaften und Systemstruktur.
- Qualitätsmetriken: Indikator für die Erfüllung impliziter und expliziter Kundenanforderungen.
- Produktivitätsmetriken: Konzentration auf die Leistung des Software-Engineering-Prozesses.
- Personenorientierte Metriken: Messung der Wirksamkeit von Instrumenten und Methoden aus menschlicher Sicht.
- Größenorientierte Metriken: Direkte Maßnahmen zur Bestimmung des Fertigstellungszeitpunkts und des Personalbedarfs.
- Funktionsorientierte Metriken: Fokus auf die Funktionalität oder Gebrauchstauglichkeit des Programms.
Nachteil: Es gibt bisher keine allgemein anerkannten Kriterien für die Regelung von Metriken.