Entwurf und Modellierung Flashcards

(34 cards)

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
UML besteht aus zwei übergeordneten Diagramm-Typen. Benennen Sie diese und geben Sie jeweils Vertreter der Kategorien an
Verhaltensmodelle (Beschreibung des Laufzeitverhaltens): - Aktivitätsdiagramm, State-Machine-Diagramm, Sequenzdiagramm Strukturmodelle (statische Teile des Systems): - Klassendiagramm, Komponenten-Diagramm, Paket-Diagramm
26
Wie würde man typischerweise beim Entwurf im OOD vorgehen?
1. Klassen und Objekte identifizieren 2. Semantik (Verhalten) der Klassen und Objekte identifizieren 3. Beziehungen zwischen den Klassen identifizieren 4. Schnittstellen/Implementierung spezifizieren
27
Wie unterscheiden sich Assoziations-, Kompositions- und Aggregations-Beziehungen im Klassendiagramm voneinander?
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
In welche Kategorien lassen sich Entwurfsmuster im Mikro-Entwurf einordnen?
- 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
Beschreiben Sie das Adapter-Muster. Um was für ein Entwurfsmuster handelt es sich dabei?
Strukturmuster Problem: Schnittstelle ist an Klasse bereits vorhanden -> ist aber Dreck Lösung: Adapterklasse erstellen, implementiert Interface der Zielschnittstelle (intern delegieren)
30
Beschreiben Sie das Muster "Fassade". Um was für ein Entwurfsmuster handelt es sich dabei?
Strukturmuster Problem: vereinfachte, einheitliche Schnittstelle für ganzes Subsystem notwendig Lösung: Zugriffe auf Fassade werden an Klassen des Subsystems delegiert
31
Beschreiben Sie das Muster "Strategie". Um was für ein Entwurfsmuster handelt es sich dabei?
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
Beschreiben Sie das Observer-Muster. Um was für ein Entwurfsmuster handelt es sich dabei?
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
Beschreiben Sie das Fabrik-Muster. Um was für ein Entwurfsmuster handelt es sich dabei?
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
Beschreiben Sie das Singleton-Muster. Um was für ein Entwurfsmuster handelt es sich dabei?
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.