Prinzipien des Software Engineerings Aufgabe 4, Blatt 1 Flashcards
Prinzipien des Systems Engineering
Prinzipien des Systems Engineering anwendbar auf Software Engineering und daher werden diese zunehmend integriert betrachtet
▪ Systems Engineering dient als Schnittstelle zu Software Engineering
→ Systembegriff in Vorlesung bezieht sich auf softwareintensive Systeme
Systemdenken (Systems Thinking)
▪ Systemdenken ist als Prozess und Ansatz zur Problemlösung definiert
▪ Systemdenken beinhaltet die Analyse und Synthese von Systemen, um die Wechselwirkungen zwischen den Elementen zu untersuchen. Das bedeutet, dass man sich nicht nur auf die Einzelteile eines Systems konzentriert, sondern auch darauf, wie sie miteinander verbunden sind und wie sie sich gegenseitig beeinflussen
Kernbegriffe
▪ Systemgrenze / Systemumgebung
▪ Elemente / Wechselwirkungen (Relationen)
▪ Systemeigenschaften / Funktionen
▪ Digitale Modelle / Systemmodell
▪ Blackbox / Greybox / Whitebox
Angenommen, wir betrachten ein Ökosystem wie einen Wald. Dieser Wald kann als ein komplexes System betrachtet werden, das aus verschiedenen Elementen besteht, darunter Bäume, Pflanzen, Tiere, Boden, Wasserquellen und Luft. Diese Elemente interagieren miteinander auf vielfältige Weise, um ein Gleichgewicht im Ökosystem aufrechtzuerhalten.
Trennung von Problem- und Lösungsraum
Problemraum
▪ Der Problemraum ist der Bereich, der dem Erfassen, Analysieren und Verstehen des zu lösenden technischen Problems dient
▪ Anwendungskontext und Zweck definieren
▪ Formulierung lösungsneutraler Anforderungen Lösungsraum
▪ dient zur Beschreibung und technischen Darstellung einer Software-/Systemlösung
▪ Fokus liegt auf Software-/Systemfunktionen
▪ Definition logischer und technischen Komponenten / Module sowie Schnittstellen
Zusammenfassend gesagt, der Problemraum beschäftigt sich mit dem Verständnis des Problems und der Festlegung der Anforderungen, während der Lösungsraum sich auf die Entwicklung und Implementierung der Lösung konzentriert. Der Übergang zwischen beiden Räumen beinhaltet die Umsetzung der Anforderungen des Problemraums in konkrete Funktionen und Komponenten im Lösungsraum.
Funktionale Dekomposition
Funktionale Dekomposition als Grundlage der funktionalen Analyse: zerlegen wir das System in seine grundlegenden Funktionen oder Aufgaben. z.B. Aufgabe erstellen, Aufgabe organisieren, Aufgabe verfolgen.
Funktionale Analyse als Basis zur Entwicklung von Funktionen passend zu den Anforderungen an das System: könnten wir beispielsweise feststellen, dass Benutzer Aufgaben erstellen, priorisieren, Terminen zuweisen und den Status verfolgen müssen.
Endprodukt der funktionalen Analyse ist vor allem die funktionale Aufgliederung: In unserem Beispiel wäre das Endprodukt eine Liste von Funktionen wie: Aufgabe erstellen, Aufgabe bearbeiten, Aufgabe priorisieren, Aufgabe einem Benutzer zuweisen usw.
Angewandte Systemkonzepte:
Funktionales Konzept: Dieses Konzept besagt, dass ein System durch seine Funktionen definiert wird. Im Beispiel werden die Funktionen des Aufgabenverwaltungssystems identifiziert und definiert.
Hierarchisches Konzept: Die Funktionen werden hierarchisch strukturiert, wobei einige Funktionen auf höherer Ebene zusammengefasst werden und detailliertere Funktionen auf niedrigeren Ebenen definiert sind.
Modularisierung
Modularisierung ist wie das Zusammenstellen eines Puzzles. Jedes Stück des Puzzles eine separate Aufgabe darstellt, die die Software erledigen muss. Anstatt das gesamte Puzzle auf einmal zu bearbeiten, wird es in kleine Teile aufgeteilt. Diese Teile sind die Module. Jedes Modul hat eine bestimmte Funktion oder Aufgabe, ähnlich wie jedes Puzzleteil ein bestimmtes Bild oder Muster hat.
Hier sind die Hauptpunkte der Modularisierung:
Gliederung nach ähnlichen Merkmalen: Ähnliche Aufgaben werden in einem Modul zusammengefasst. Zum Beispiel könnten alle Teile des Puzzles, die den Himmel darstellen, in einem Modul sein.
Funktionalität als Kriterium: Jedes Modul erledigt eine spezifische Aufgabe. Ähnlich wie ein Puzzleteil nur zu einem bestimmten Teil des Bildes passt.
Gliederung nach Input/Output-Verhalten: Module können auch basierend darauf organisiert werden, welche Art von Informationen sie erhalten oder erzeugen. Zum Beispiel könnten alle Teile des Puzzles, die Wasser darstellen, in einem Modul sein, weil sie ähnliche Eigenschaften haben.
Funktionale Schnittstellen: Wie die Verbindungslinien zwischen den Puzzleteilen stellen die Schnittstellen sicher, dass die Module miteinander kommunizieren können, aber die Komplexität jedes Moduls verborgen bleibt.
Angewandte Systemkonzepte: Dies sind die grundlegenden Prinzipien, die bei der Modularisierung angewendet werden, um sicherzustellen, dass die Module gut organisiert und miteinander verbunden sind.
Funktionales Konzept: Es geht darum, die Software in kleinere, leichter zu handhabende Teile aufzuteilen, ähnlich wie das Zerlegen eines großen Problems in kleinere, leichter zu lösende Probleme.
Insgesamt hilft die Modularisierung, die Softwareentwicklung zu vereinfachen, da Entwickler sich auf kleinere Teile konzentrieren können, anstatt das gesamte System auf einmal zu bearbeiten. Vorteile: hohe Änderungsfreundlichkeit, Erleichterung der Standardisierung, Arbeitsorganisation und Arbeitsplanung, Verbesserung der Überprüfbarkeit, leichte Lokalisierung.
Strukturierung
Strukturierung zur Darstellung der Anordnung und Abhängigkeiten
▪ Strukturierung der Funktionen stellt funktionale Architektur dar
▪ Strukturierung der Module stellt logische oder technische Architektur dar
▪ Angewandte Systemkonzepte. Dies sind die Prinzipien oder Ideen, die bei der Entwicklung von Software angewendet werden, um sie zu organisieren und zu gestalten.
▪ Strukturelles Konzept. Dies bezieht sich darauf, wie die Software strukturiert ist, um ihre verschiedenen Teile und ihre Beziehungen zueinander darzustellen. Es geht um die Organisation und Hierarchie der Softwarekomponenten.
▪ Holistisches Konzept. Dies bezieht sich darauf, wie alle Teile der Software miteinander verbunden sind und wie sie zusammenarbeiten, um das Gesamtsystem zu bilden. Es betrachtet die Software als Ganzes und nicht nur als Ansammlung einzelner Teile.
Vorteile: Erhöhung der Verständlichkeit, Verbesserung der Wartbarkeit, Erleichterung der Einarbeitung in ein fremdes Softwareprodukt, Beherrschbarkeit der Komplexität eines Systems.
Kombination einzelner Prinzipien
Kombination verschiedener Prinzipien und Ansätze im Software Engineering ist möglich.
Trennung von Problem- und Lösungsraum:
Durch die Trennung von Problem- und Lösungsraum wird sichergestellt, dass die Anforderungen des Systems unvoreingenommen und unabhängig von möglichen Lösungsansätzen analysiert werden. Dies ermöglicht eine klarere Definition der Probleme und Anforderungen, bevor die Entwicklung der Lösung beginnt.
Funktionale Dekomposition:
Die funktionale Dekomposition hilft dabei, ein System in kleinere, überschaubare Funktionen oder Module zu zerlegen. Dies erleichtert die Entwicklung, da komplexe Probleme in kleinere, leichter zu handhabende Teile aufgeteilt werden können.
Modularisierung & Strukturierung:
Die Modularisierung und Strukturierung beziehen sich darauf, wie die verschiedenen Funktionen oder Module eines Systems organisiert und miteinander verbunden sind. Durch die klare Definition von Schnittstellen und die Aufteilung der Software in gut definierte Module wird die Wartbarkeit, Erweiterbarkeit und Wiederverwendbarkeit verbessert.
Rekursive Spezifikation des Softwaresystems (“Zig-Zagging-Approach”):
Dies bezieht sich auf den iterativen Entwicklungsprozess, bei dem die Spezifikation des Systems schrittweise verfeinert wird, indem man zwischen dem Problem- und Lösungsraum hin- und hergeht. Dies ermöglicht eine kontinuierliche Verbesserung der Spezifikationen und eine Anpassung an sich ändernde Anforderungen.
Kombinationen je nach konkreter Aktivität in Prozessmodellen:
Je nach den Anforderungen eines bestimmten Projekts oder einer bestimmten Aktivität im Entwicklungsprozess können verschiedene Kombinationen von Prinzipien und Ansätzen verwendet werden. Es ist wichtig, flexibel zu sein und die am besten geeigneten Methoden für die jeweilige Situation auszuwählen.
“Prinzipien-Baukasten” als Metamodell für Software Engineering Aktivitäten:
Dies bezieht sich auf die Idee, dass verschiedene Prinzipien und Ansätze im Software Engineering als Baukasten betrachtet werden können, aus dem man wählen kann, um die am besten geeigneten Methoden für ein bestimmtes Projekt zusammenzustellen. Es ermöglicht eine anpassungsfähige und maßgeschneiderte Herangehensweise an die Softwareentwicklung.
Insgesamt ermöglicht die Kombination verschiedener Prinzipien und Ansätze im Software Engineering eine ganzheitliche und effektive Herangehensweise an die Entwicklung von Softwarelösungen. Es erlaubt Entwicklern, flexibel zu sein und die bestmöglichen Methoden für ihre spezifischen Anforderungen auszuwählen.
Prinzip der Abstraktion
Das Prinzip der Abstraktion bezieht sich auf eine spezialisierte Form der Trennung von Problem und Lösungsraum, bei der Software in einzelne Komponenten basierend auf ihrer Funktionalität und Verantwortung aufgeteilt wird. Die Vorteile dieser Abstraktion liegen darin, dass sie es ermöglicht, Muster zu erkennen, Informationen zu ordnen, zu klassifizieren und allgemeine Charakteristika zu identifizieren, was wiederum zu einer effizienteren Entwicklung und Wartung von Software führen kann.
Das Prinzip der Bindung und Kopplung
Das Prinzip der Bindung und Kopplung in der Softwareentwicklung beschreibt die Struktur eines Softwaresystems, die maßgeblich durch die Art und Weise bestimmt wird, wie die einzelnen Systemkomponenten miteinander verbunden sind (Bindung) und wie stark sie voneinander abhängig sind (Kopplung). Eine hohe Bindung bedeutet, dass die Verantwortlichkeiten und Funktionen einer Komponente klar definiert und zusammenhängend sind, während eine niedrige Kopplung darauf hinweist, dass die Komponenten unabhängig voneinander sind und Änderungen in einer Komponente wenig Auswirkungen auf andere haben. Ein ausgewogenes Verhältnis von Bindung und Kopplung ist entscheidend für die Flexibilität, Wartbarkeit und Erweiterbarkeit eines Softwaresystems.
Prinzip der Hierarchisierung
Beschreibung: Dieses Prinzip bezieht sich auf die Organisation von Komponenten oder Informationen in einer hierarchischen Struktur, um eine klare Ordnung und Strukturierung zu erreichen.
Zuordnung: Dieses Prinzip kann eng mit dem Prinzip der Strukturierung verbunden werden, da beide darauf abzielen, klar definierte Hierarchien und Strukturen zu schaffen, um die Komplexität zu reduzieren und die Verständlichkeit zu verbessern.
Geheimprinzip (Principle of Least Knowledge)
Beschreibung: Das Geheimprinzip besagt, dass eine Komponente nur über das Wissen verfügen sollte, das für ihre unmittelbaren Aufgaben erforderlich ist, und nicht über das interne Wissen anderer Komponenten.
Zuordnung: Dieses Prinzip ist eng mit dem Prinzip der Modularisierung verbunden, da es die Trennung von Verantwortlichkeiten und die Minimierung von Abhängigkeiten zwischen Komponenten unterstützt.
Prinzip der Lokalität
Beschreibung: Dieses Prinzip besagt, dass Daten oder Operationen, die zusammengehören oder häufig gemeinsam verwendet werden, räumlich nahe beieinander platziert werden sollten, um die Effizienz und Verständlichkeit zu verbessern.
Zuordnung: Das Prinzip der Lokalität kann mit dem Prinzip der Modularisierung in Verbindung gebracht werden, da beide darauf abzielen, eng zusammenhängende Teile des Systems räumlich zusammenzufassen, um eine bessere Organisation und Verständlichkeit zu erreichen.
Prinzip der Verbalisierung
Beschreibung: Dieses Prinzip besagt, dass Code und Strukturen so benannt und dokumentiert werden sollten, dass sie für andere Entwickler leicht verständlich sind.
Zuordnung: Das Prinzip der Verbalisierung kann mit dem Prinzip der Strukturierung verbunden werden, da beide darauf abzielen, klar verständlichen und gut dokumentierten Code zu erstellen, um die Lesbarkeit und Wartbarkeit zu verbessern.
DRY (don’t repeat yourself)
Beschreibung: Das DRY-Prinzip besagt, dass es vermieden werden sollte, denselben Code oder dieselben Konzepte an mehreren Stellen im System zu wiederholen, um Redundanz zu vermeiden und die Wartbarkeit zu verbessern.
Zuordnung: Dieses Prinzip kann mit dem Prinzip der Modularisierung und der Trennung von Problem und Lösungsraum in Verbindung gebracht werden, da es dazu beiträgt, Code in wiederverwendbare Module zu strukturieren und zu organisieren, um Redundanz zu minimieren.
KISS (keep it simple, stupid)
Beschreibung: Das KISS-Prinzip besagt, dass Lösungen so einfach wie möglich gehalten werden sollten, um sie leichter zu verstehen, zu implementieren und zu warten.
Zuordnung: Dieses Prinzip kann mit dem Prinzip der Strukturierung und dem Systemdenken in Verbindung gebracht werden, da es darauf abzielt, klare und einfach zu verstehende Strukturen zu schaffen, die die Komplexität des Systems reduzieren.