Entwurf und Modellierung Flashcards

1
Q

Was beschreibt die Architektur einer Software?

A
  • Komponenten und deren Beziehungen untereinander
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Grenze Makro- und Mikro-Entwurf voneinander ab

A
Makro-Entwurf = Architekturentwurf --> High-Level
Mikro-Entwurf = Komponentenentwurf --> Low-Level
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was ist ein Architekturmuster?

A

= Schablone für konkrete Softwarearchitekturen

  • Lösung für ein wiederkehrendes Problem in spezifischen Situationen
  • entwickeln sich aus der praktischen Erfahrung (“once is chance, twice is coincidence, three times is a pattern” –> unbedingt sagen, das erfreut ihn)
  • beschreibt Gruppe von Komponenten und deren Interaktion –> höhere Abstraktion als explizite Klassen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Aus welchen drei Bestandteilen setzt sich ein Entwurf mindestens zusammen?

A
  • Kontext (Situation in der Problem auftritt)
  • Problem (wiederholt auftretendes Problem im Kontext)
  • Lösung (geprüfter Ansatz zur Lösung des Problems)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Beschreiben Sie das Architekturmuster: n-Tier (Schichtenarchitektur)

A
  • System ist in Schichten strukturiert, jede Schicht stellt darüber liegenden Schichten Funktionen zur Verfügung
  • sinnvoll wenn auf ein vorhandenes System neue Funktionen aufgesetzt werden ODER Aufteilung der Entwicklung auf Team pro Schicht

Vorteil:

  • Solange Schnittstelle erhalten bleibt, ganze Schichten problemlos ersetzbar
  • redundante Funktionen können in jeder Schicht eingebaut werden

Nachteil:
- saubere Schichtentrennung in der Praxis schwierig
- Leistungsfähigkeit schlecht, wenn Anfrage von oberster Schicht durch alle Schichten bis nach unten gereicht werden muss (= strict Layering)
(Ausweg: Layer Bridging –> Anfragen dürfen auch Schichten überspringen)
… Layer Bridging birgt aber auch Gefahr, dass System zum Netz mutiert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Beschreiben Sie das Architekturmuster: Plugin-Architektur

A

Kontext/Problem: Der Funktionsumfang eines Systems muss dynamisch erweiterbar sein

Lösung: Plugins (Softwarekomponenten mit spezifischer Funktionalität). Schnittstelle (Plugin-Manager) implementiert Erweiterungspunkte für Plugins

Plugin-Manager gliedert Plugins ein/aus
Plugins können wiederum neue Erweiterungspunkte definieren

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Beschreiben Sie das Architekturmuster: Repository-Architektur

A
  • Daten eines Systems werden in zentralem Datenspeicher verwaltet. Alle Komponenten können darauf zugreifen
  • Komponenten interagieren nur über Repository
  • Verwendung: bei großer Informationsmengen-Erzeugung (mit langer Speicherung) (z.B. Versionskontrolle)

Vorteil:

  • Komponenten können unabhängig sein
  • konsistente Datenverwaltung (da nur an einem zentralen Ort)

Nachteil:

  • Repository ist SPOF
  • gesamte Kommunikation läuft über Repository –> Performance-Probleme
  • Verteilung des Datenspeichers auf mehrerere Computer schwierig

Beispiel: IDE mit zentralem Projektrepository

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Beschreiben Sie das Architekturmuster: Client-Server-Architektur

A
  • Systemfunktionen = Dienste ; jeder Dienst wird von einem Server angeboten
  • Clients greifen auf Server zu, um Dienste in Anspruch zu nehmen

Verwendung: Daten befinden sich in gemeinsam genutzter Datenbank; Zugriff auf diese von unterschiedlichen Orten aus
- gut bei Schwankungen der Systemauslastung

Vorteile:

  • Verteilung der über ein Netzwerk
  • Allgemeine Funktionen können allen Clients zur Verfügung gestellt werden (z.B. Druckerdienst)

Nachteile:

  • jeder einzelne Dienst ist SPOF –> anfällig für DoS-Angriff
  • Performance hängt nicht nur vom System, sondern auch vom Netzwerk ab
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Beschreiben Sie das Architekturmuster: Pipes-and-Filter

A
  • Aufbau aus mehreren Verarbeitungskomponenten (Filter), die jeweils eine Form der Datenverarbeitung durchführen
  • Daten fließen wie durch ein Rohr (Pipe) durch die einzelnen Komponenten

Verwendung: in Stream-Datenverarbeitung

Vorteil:

  • einfach zu verstehen
  • Wiederverwendbarkeit von Filtern
  • sequentiell oder parallel implementierbar

Nachteil:

  • Datenübertragungsformat muss vereinbart werden
  • -> in Pipes Konvertierung durchführen (ggf. mit Mehraufwand oder Datenverlust)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Beschreiben Sie das Architekturmuster: Broker-Architektur

A

Problem: kennt jede Komponente jede andere Komponenten in einem verteilten System entsteht hohe Abhängigkeit (= starr). Ansprache über logische Namen wäre effizienter und dynamischer.

Lösung: Broker/Zwischenschicht verwaltet logische Namen und vermittelt Kommunikation zwischen Komponenten

! Vgl. DNS: hier wird nur Adresse aufgelöst –> aber keine Kommunikation vermittelt

Beispiel: CORBA

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Beschreiben Sie das Architekturmuster: SOA

A

(wer Bock hat labert hier ein bisschen das Riechert-Zeugs :P)

Problem: verschiedene Anwendungsfälle müssen auf Systeme abgebildet werden. Würde sich der Geschäftsprozess ändern, müsste das gesamte System adaptiert werden.

Lösung: Kapselung von Verarbeitungsfunktionen eines Geschäftsprozesses in Services (hohe Kohärenz, lose Kopplung)

  1. Serviceanbieter veröffentlicht Service in Service-Verzeichnis
  2. Servicenutzer –> Suchanfrage in Service-Verzeichnis
  3. Rückgabe Verweis auf veröffentlichten Service
  4. Service-Nutzer ruft Service auf
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Beschreiben Sie das Architekturmuster: EDA (Event Driven Architecture)

A

Kontext: Anwendung mit verteilten Softwarekomponenten, relativ stabiler Kommunikation

Problem: möglichst lose Kopplung zwischen den Softwarekomponenten, bspw. um verschiedene Entwicklerteams zu integrieren, einfache Erweiterbarkeit zu erreichen usw.

Lösung: statt direkten Aufrufen –> sende Zustandsänderung als Ereignis über Ereigniskanal. Interessierte Softwarekomponenten greifen auf Kanal zu –> führen Verarbeitung unabhängig/asynchron aus

Vorteil:

  • enorm lose Kopplung
  • einfache Erweiterbarkeit
  • Sprachvielfalt möglich
  • Skalierung einfach

Nachteil:

  • Debugging nur anhand verteilter Logs
  • Zustand der Gesamtanwendung/System zu beliebigem Zeitpunkt schwer zu definieren
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Beschreiben Sie das Architekturmuster: MicroService

A

Komponenten = Services mit innerem zustand und zugänglich über API

Kontext: Anwendung, welche aus verschiedenen Komponenten besteht

Problem: verschiedene Komponenten der Anwendung werden unterschiedlich gefordert, was eine Skalierung der Gesamtanwendung (Monolith) schwierig macht.
Verschiedene Teams sollen einzelne Komponenten der Anwendung entwickeln

Lösung: Module auf Services verteilen; Zugriff über API –> jedes Modul für sich entwickelbar und skalierbar

Vorteil:

  • lose Kopplung der Services
  • einfacher Austausch über Schnittstelle
  • unabhängige Entwicklung und Skalierung
  • einfaches Testing der einzelnen Services

Nachteil:

  • komplexes Management der Gesamtanwendung
  • Granularität der Aufteilung auf Services nicht klar definiert
  • gemeinsame Vision der Teams kann abhanden kommen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Beschreiben Sie das Architekturmuster: Monolith

A

Kontext: Anwendung durch einzelnes Team entwickeln, einfaches Deployment

Problem: Anwendung soll einfach verständlich sein. Hinter Load-Balancer werden Instanzen horizontal skaliert.

Lösung: Verpacke alle Module/Services in einzelnes Deployment-Paket

Vorteil:

  • typischerweise einfaches Deployment, einfache Entwicklung, einfaches Management
  • geringer Initialaufwand

Nachteil:

  • Gesamtarchitektur schwierig schlüssig zu fassen (z.B. für neue Entwickler)
  • schwierig zu testen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Welche drei Faktoren berücksichtigt der Architektur-Entwurf?

A
  • Nützlichkeit:
    durch weitest mögliche Abdeckung der Anforderungen
  • Stabilität:
    durch Integration von stabilen Technologien
  • Anmut:
    durch durchdacht gewählte Komponenten, gute Wartbarkeit und Lesbarkeit
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Welche Sichten auf die Architektur sind im Entwurf zu berücksichtigen?

A

Logische Sicht: Abstraktion im System als Objekte/Klassen –> Klassen-Diagramm

Prozesssicht: Zusammensetzung des Systems aus interaktiven Prozessen

Entwicklungssicht: Zerlegung der Software in Komponenten (Zuordnung von Entwicklern möglich)

Physische Sicht: auf welcher Hardware soll es laufen? Systemkomponenten auf entsprechender Hardware

Konzeptuelle Sicht: zeigt den Systemverbund –> Erkennung systemübergreifender Komponenten

17
Q

Was sind Referenzarchitekturen und wie unterscheiden sie sich von Architektur-Mustern?

A

Muster liefert fachbereichsübergreifende Vorlagen

… Referenzarchitektur liefert Vorlagen für bestimmten Anwendungsbereich

  • -> umfassende, vollständige Architektur
  • -> fordert vom Architekt entsprechende Reduktion
  • -> zeigt Besonderheiten des Anwendungsbereichs auf
18
Q

Nenne Beispiel für Referenzarchitekturen

A

OSI-Referenzarchitektur
Azure Referenzmodell Single VM, N-Tier multiple VM
SOA reference Architecture
Referenzarchitekturmodell Industrie 4.0

19
Q

Welche grundsätzlichen Prinzipien verfolgt man im Software Engineering Entwurf (Mikro-Entwurf)?

A
  • Abstraktion
  • Strukturierung (Kopplung und Kohäsion)
  • Hierarchisierung
  • Geheimnisprinzip (Datenkapselung)
  • Trennung von Schnittstelle und Implementierung
  • Vollständigkeit und Einfachheit
  • Trennung der Zuständigkeiten
20
Q

Was kennzeichnet einen Aspekt im Software Engineering Entwurf (+ Beispiele)?

A

Aspekt ist Querschnittsbelang (cross-cutting-concern) –> funktionsübergreifende Integration

Bsp.:

  • Nebenläufigkeit
  • Protokollierung (Logging)
  • Ereignisverarbeitung (Callbacks, Events, …)
  • Fehlerbehandlung
  • Sicherheit
  • Persistenz
21
Q

Welche vier grundsätzlichen Strategien gibt es zur Erstellung des Software Engineering Entwurfs?

A

Top-Down: abstrakt -> konkret / allgemein -> speziell
+ Strukturelle Zusammenhänge gut zu erkennen
- “Top” schwer zu bestimmen - wann ist es abstrakt genug

Bottom-Up: konkret -> abstrakt / speziell -> allgemein
+ weniger Abstraktionsvermögen erforderlich
- Entscheidungen in niedrigen Ebenen –> Fixes in höheren Ebenen (fehlender Überblick)

Outside-In: erst Systemumwelt, dann System modellieren
+ Fokus auf Umweltschnittstellen –> gute Anforderungsabdeckung
- schlechte Wiederverwendung durch mangelnde Innensicht

Inside-Out: erst System, dann Systemumwelt modellieren
+ Wiederverwendbarkeit, gute Strukturierung
- Verlust des Umweltbezugs/ Anforderungen nicht ausreichend berücksichtigt

22
Q

Nach welcher Strategie würde man eine (a) Neuentwickklung (b) Weiterentwicklung entwerfen?

A

Neuentwicklung: outside-in + top-down –> Anforderungen ausreichend berücksichtigen

Weiterentwicklung: inside-out + bottom-up –> bestehende Funktionalität sichern

23
Q

Nennen Sie Entwurfsparadigmen im Mikro-Entwurf

A
  • Function-Oriented Design
  • Data Structure-Centered Design
  • Component-Based Design
  • Object-Oriented Design
  • Serviceorientiertes Design
24
Q

Charakterisieren Sie das Paradigma Object-Oriented Design. Welche formelle Sprache wird üblicherweise zur Beschreibung verwendet?

A
  • Verbindung der Data-Structure und Function-Oriented Designs durch Kapselung der Daten in Klassen mit entsprechenden Methoden
  • Erweiterung der Diagramme und Modelle aus Object Oriented Analysis (OOA) –> Ziel: möglichst genaue Abbildung des zu implementierenden Systems

Notation: UML

25
Q

UML besteht aus zwei übergeordneten Diagramm-Typen. Benennen Sie diese und geben Sie jeweils Vertreter der Kategorien an

A

Verhaltensmodelle (Beschreibung des Laufzeitverhaltens):
- Aktivitätsdiagramm, State-Machine-Diagramm, Sequenzdiagramm

Strukturmodelle (statische Teile des Systems):
- Klassendiagramm, Komponenten-Diagramm, Paket-Diagramm

26
Q

Wie würde man typischerweise beim Entwurf im OOD vorgehen?

A
  1. Klassen und Objekte identifizieren
  2. Semantik (Verhalten) der Klassen und Objekte identifizieren
  3. Beziehungen zwischen den Klassen identifizieren
  4. Schnittstellen/Implementierung spezifizieren
27
Q

Wie unterscheiden sich Assoziations-, Kompositions- und Aggregations-Beziehungen im Klassendiagramm voneinander?

A

Assoziation: loser Zusammenhang zwischen Klassen (z.B. Person hat besitzt beliebig viele Autos)

Aggregation: Form der Hierarchisierung (z.B. Vorlesung beinhaltet * Studenten; Student kann einer Vorlesung höchstens * mal zugehörig sein)

Kompostion: strenge Form der Aggregation (z.B. Auto besteht aus vier Reifen … wenn Reifen einem Auto gehört, gehört es keinem anderen Auto)

28
Q

In welche Kategorien lassen sich Entwurfsmuster im Mikro-Entwurf einordnen?

A
  • Strukturmuster (Zusammensetzung von Klassen)
  • Verhaltensmuster (Zusammenarbeit zwischen Klassen)
  • Erzeugungsmuster (machen System unabhängig davon, wie Objekte erzeugt werden)
  • Muster für Nebenläufigkeit
  • Muster für Persistenz
29
Q

Beschreiben Sie das Adapter-Muster. Um was für ein Entwurfsmuster handelt es sich dabei?

A

Strukturmuster

Problem: Schnittstelle ist an Klasse bereits vorhanden -> ist aber Dreck
Lösung: Adapterklasse erstellen, implementiert Interface der Zielschnittstelle (intern delegieren)

30
Q

Beschreiben Sie das Muster “Fassade”. Um was für ein Entwurfsmuster handelt es sich dabei?

A

Strukturmuster

Problem: vereinfachte, einheitliche Schnittstelle für ganzes Subsystem notwendig

Lösung: Zugriffe auf Fassade werden an Klassen des Subsystems delegiert

31
Q

Beschreiben Sie das Muster “Strategie”. Um was für ein Entwurfsmuster handelt es sich dabei?

A

Verhaltensmuster

Problem: Austauschen eines ganzen Algorithmus ohne Eingriff in Klassen

Lösung: alternative Strategien herausziehen und diese in einem Interface vom Typ IStrategie kapseln

32
Q

Beschreiben Sie das Observer-Muster. Um was für ein Entwurfsmuster handelt es sich dabei?

A

Verhaltensmuster

Problem: Inversion of Control –> Objekte sollen von Zustandsänderung informiert werden (+ dann aktualisiert)

Lösung: Trennung in Observer und Observable. Observable pflegt Liste von Observern –> ruft bei Änderung notify(Event e) auf, welcher bei allen registrierten Observern die onNotify(Event e) Methode aufruft.
Observer können sich an Observables registrieren und deregistrieren.

33
Q

Beschreiben Sie das Fabrik-Muster. Um was für ein Entwurfsmuster handelt es sich dabei?

A

Erzeugungsmuster

Problem: Klasse soll Objekt erzeugen, dessen Typ sie nicht kennt (bzw. Typ erst zur Laufzeit bekannt). Kennt nur die Basisklasse

Lösung: Objekt-Erzeugung wird an Unterklasse delegiert, mit Wissen über jeweilige Klasse der zu erzeugenden Objekte

34
Q

Beschreiben Sie das Singleton-Muster. Um was für ein Entwurfsmuster handelt es sich dabei?

A

Erzeugungsmuster

Problem: Gewährleistung, dass Klasse nur ein einziges Mal instanziiert wird

Lösung: Konstruktor verstecken –> dafür Methode getInstance(). Diese erstellt eine neue Instanz, wenn es noch keine gibt und gibt diese zurück.