iSAQB Foundation Level Inhalte

Description

Foundation Level iSAQB Flashcards on iSAQB Foundation Level Inhalte, created by Lukas Holzner on 07/03/2024.
Lukas Holzner
Flashcards by Lukas Holzner, updated 10 days ago
Lukas Holzner
Created by Lukas Holzner about 2 months ago
0
0

Resource summary

Question Answer
softwareintensives System Menge von Bausteinen vollständig oder wesentliche Teile sind Software essentielle Aufgaben zur Erfüllung des Zwecks
Rolle der Softwarearchitektur grobes Konzept systemweite Abstraktion Struktur der Strukturen Wiederverwendung abstrakter Ideen
Vorteile der Softwarearchitektur langfristige Planung verständlich analysierbar wiederverwendbar
Arten von Architektur Geschäftsarchitektur Prozessarchitektur Integrationsarchitektur Anwendungsarchitektur Infrastrukturarchitektur
Inhalte der Geschäftsarchitektur Strategie Produkte Dienstleistungen
Inhalte der Prozessarchitektur Geschäftsprozesse Organisationseinheiten Rollen
Inhalt der Integrationsarchitektur Bebauungsplan fachliche Services Integration
Inhalt der Anwendungsarchitektur Modularisierung Wiederverwendung Schnittstellen
Inhalt der Infrastrukturarchitektur Server Plattformen Netzwerkkomponenten
Definition: Softwarearchitektur grundlegende Prinzipien und Regeln für die Organisation eines Systems sowie dessen Strukturierung in Bausteinen und Schnittstellen und deren Beziehung zueinander wie zur Umgebung Richtlinien für den Systemlebenszyklus angefangen bei Analyse über Entwurf und Implementierung bis zu Betrieb und Weiterentwicklung wie auch für Entwicklungs- und Betriebsorganisationen Beschreiben der Lösung, nicht Lösung selbst
Rolle von Software-Architektur im Entwicklungsprozess Projektleitung/-management: Aufgabenplanung Anforderungsanalyse: funktionale & nicht-funktionale Anforderungen als Basis für Architektur Implementierung: Anleiten durch Vorgaben Qualitätssicherung: Testplanung & Überprüfung der Anforderungen Hardwareentwicklung: gegenseitige Beeinflussung Betrieb: bestimmt Laufzeitumgebung
Nutzen von Software-Architektur Brücke zwischen Analyse und Realisierung (Abbildung von Anforderungen auf Strukturen) Abstraktion (Modellbildung) Macht Komplexität beherrschbar und verständlich Basis für Qualität -> Flexibilität & Erweiterbarkeit
Definition: Baustein Abstraktion von speziellen Programmierkonstrukten oder Beschreibungselementen
Arten von Bausteinen Pakete, Packages, Namespaces Klasse, Modul, Funktion, Prozedur Komponente, Programm Skript Bibliothek, Framework Datenstruktur, DB-Tabelle Layout-/Mappingdefinition
Aspekte von Bausteinen Export und Import von Schnittstellen (Contract) Kapselung & Austauschbarkeit Konfiguration & hierarchische (De-)Komposition (Subbausteine)
Arten von Sichten Blackbox Whitebox Greybox
Blackbox-Sicht (Außensicht) nur Schnittstellen mit Funktionalität (Dienste) kein Innenleben (Geheimnisprinzip) Sicht des Architekten
Whitebox-Sicht (Glasbox-/Innensicht) innere Struktur und Zerlegung in Subbausteine Arbeitsweise der Subbausteine und Delegation der Schnittstellen an das Innenleben Sicht des Implementierers
Greybox-Sicht (Konfigurationssicht) Ausschnitt der inneren Struktur (Konfiguration, Parameter, Varianten)
Verantwortung des Architekten bei Blackbox-Bausteinen Erfüllung von funktionalen und nicht-funktionalen Anforderungen Methodensignaturen und Datenformate der Schnittstelle Ausmaß der Kopplung mit anderen Bausteinen
Verantwortung des Architekten bei Whitebox-Zerlegung Enthaltene Blackbox-Bausteine Begründung der Zerlegung Abhängigkeiten & Testbarkeit der enthaltenen Blackbox-Bausteine
Definition: Schnittstelle wohldefinierter Zugangspunkt zum System oder dessen Bausteinen Eigenschaften des Zugangspunktes (Attribute, Daten, Funktionen) präzise mit notwendigen Aspekten (Syntax, Datenstrukturen, funktionales Verhalten, Fehlerverhalten, nichtfunktionale Eigenschaften, Nutzungsprotokoll, Technologien, Randbedingungen & Semantik)
Postel's Law Sei strikt bei dem, was du tust, und nachsichtig bei dem, was du von anderen akzeptierst.
Orte der Schnittstellendefinition
Ziele von Software-Architekturen Langlebigkeit Wartbarkeit Änderbarkeit/Erweiterbarkeit Energieeffizienz Qualitätsmerkmale (oben) als Differenzierung ggü. Funktionalität
Aufgaben des Software-Architekten konstruieren und entwerfen absichern der Erfüllung der Anforderungen beraten dokumentieren vereinfachen kommunizieren bewerten Diplomatie und Akrobatik Mut (nicht waghalsig)
Abwägungen Komplexität <--> Einfachheit Kosten & Termine <--> Leistung neue Tech. <--> etablierte Tech. min. Schnittstellen <--> enge Integration strikte Kontrolle <--> agile Entscheidungen Top-Down <--> Bottom-Up
angrenzende Rollen an den Software-Architekten Auftraggeber Projektleiter Anwender Entwickler Qualitätsmanager Architecture-Board Businessanalyst Sicherheitsexperte Betrieb
Informationen sammeln Materialien zu ähnlichen Problemen Wiederverwendung (eigene Erfahrung, andere Projekt im Unternehmen, Internet, Literatur, Entwurfsmuster) Misstrauen ggü. unbekannter Lösungen neue Ideen nicht immer genial (schlechte Recherche)
Fragen zu Lösungsidee Was ist die Kernaufgabe des Systems? Wie wird das System genutzt? Wer nutzt das System? Welche Schnittstellen gibt es? Wie verwaltet das System Daten? Wie wird das System gesteuert? -> Dokumentation (max. eine A4 Seite)
Was ist die Kernaufgabe des Systems? Kernaufgabe und Verantwortlichkeit positiv & Begriffe aus Fachdomäne zusätzlich wichtigste Begriffe oder Aspekte der Fachdomäne ggf. aus der Anforderungsanalyse übernehmen Abstimmung mit Auftraggeber/Kunde
Wie wird das System genutzt? interaktive Online-Systeme (operationale Systeme): Geschäftsprozesse, Operation auf Daten abgebildet in UI Entscheidungsunterstützungssysteme: Kopie der Daten (Data Warehouse) lesenden Zugriff via Queries Hintergrundsysteme (Offline, Batch): Datenmanipulation, Vor- & Nachbereitung von Daten eingebettete Systeme: enge Verzahnung mit Hardware Echtzeitsysteme: Operation innerhalb garantierter Zeit beendet
Wer nutzt das System? Benutzer der Kernfunktionalität Admin & Betreiber Benutzer von Sonderfunktionen negativ-gesinnte Stakeholder Nutzerschnittstellen (Bildschirm/Formular, Expertenarbeitsplatz, Konsole/CMD, spezielle Hardware) Nutzungsgruppen-UI?
Welche Schnittstellen gibt es? externe Systeme (Export/Import) Stabilität/Fehlertoleranz Funktionen oder Daten Semantik Synchronität Performance Änderbarkeit der anderen Seite
Wie verwaltet das System Daten? Hauptspeicher, Dateien, DB Entscheidungsaspekte: Persistenz & Volumen Kosten (Lizenz, Wartung) Performance (paralleler Zugriff) Erweiterbarkeit Datenintegrität Unterstützung von Transaktionen Anfragesprache Sicherheit Wiederherstellbarkeit
Wie wird das System gesteuert? ereignisgetrieben: Baustein für Eingaben und Klicks ruft System auf prozedural: Baustein des Systems ruft sequenziell weitere Bausteine auf parallel: mehrere unabhängige Bausteine reagieren auf Ereignisse / Anfragen
Systemidee kommunizieren Abstimmung mit Auftraggebern und Projektleitung Kommunikation zu allen Beteiligten Indikator für Risiken falls Beschreibung von Aspekten ungenau
Einflussfaktoren und Randbedingungen klären
typische Risiken enger Zeitplan eingeschränkte Verfügbarkeit/Eignung von Resourcen (inkl. Personal) eingeschränkte Verfügbarkeit von Wissen neue Produkte, geänderte Lizenz-/Geschäftsmodelle/Kooperationen organisatorische Änderungen kritische Schnittstellen zu externen Systemen technische Infrastruktur/externe technische Entscheidungen schlecht gestellte Anforderungen (widersprüchlich/nicht priorisiert) neue/sich ändernde Anforderungen (fachlich oder regulatorisch)
Risiken identifizieren keinen systematischen oder deterministischen Weg zur Identifikation Erfahrung und Sachvertand Techniken (Brainstorming mit Beteiligten, Diskussion mit Personen anderer Projekte, Risikomanagement der Projektleitung, Wechselwirkung/gegenseitige Verstärkung)
Qualitätseigenschaften Funktionalität Zuverlässigkeit Benutzbarkeit Effizienz Sicherheit Kompatibilität Wartbarkeit Portierbarkeit
Qualitätsmerkmale der Eigenschaft Funktionalität Eignung Verwendbarkeit Genauigkeit Interoperabilität
Qualitätsmerkmale der Eigenschaft Zuverlässigkeit Reife Fehlertoleranz Ausfallsicherheit Datensicherheit
Qualitätsmerkmale der Eigenschaft Benutzbarkeit Verständlichkeit Erlernbarkeit Bedienbarkeit Attraktivität
Qualitätsmerkmale der Eigenschaft Effizienz Zeitverhalten Ressourcennutzung
Qualitätsmerkmale der Eigenschaft Sicherheit Integrität Vertraulichkeit Nachweisbarkeit Authentizität Verantwortlichkeit
Qualitätsmerkmale der Eigenschaft Kompatibilität Austauschbarkeit Interoperabilität Compliance
Qualitätsmerkmale der Eigenschaft Wartbarkeit Analysierbarkeit Änderbarkeit Erweiterbarkeit Stabilität Testbarkeit
Qualitätsmerkmale der Eigenschaft Portierbarkeit Anpassbarkeit Installierbarkeit Ersetzbarkeit Konfigurierbarkeit
Produktkarton mit Beipackzettel Wie heißt das Produkt? Was entwickeln wir? (ein Satz) Wem nützt es und wozu ist es gut? Was sind die wesentlichen Features? Was ist das zentrale Verkaufs-/ Nutzungsargument? (Claim/Slogan) Welche Qualitätsmerkmale (Ziele) sind besonders wichtig? Welche Risiken sind mit dem Projekt verbunden?
Top-Down-Entwurf Zerlegung in Teilprobleme (Dekomposition) Vision des Gesamtsystems
Bottom-Up-Entwurf Zusammenbau von Teillösungen (Komposition) fachliche Klassen und Teilfunktionen
Vorteile Top-Down-Entwurf gutes Problemverständnis maschinen- und sprachunabhängig kein sich-im-Detail-verlieren saubere Schnittstellen/Konsistenz Entwurf im Produkt erkennbar
Nachteile Top-Down-Entwurf kritische Integration am Ende Übersehen von existierenden (Teil-)Lösungen gravierende Änderungen bei spät erkannten Problemen spätes Feedback über Richtigkeit
Vorteile Bottom-Up-Entwurf hoher Wiederverwendungsgrad hohe Funktionssicherheit durch inkrementelle Tests schrittweise Integration Beginn mit vermuteten Teilproblemen
Nachteile Bottom-Up-Entwurf potentiell nicht alles benötigt Orientierung an technischen Gegebenheiten statt Benutzeranforderung Gefahr der frühzeitigen Optimierung Wildwuchs
Architekturebenen fachliche Architektur Architekturstile technische Infrastuktur technische Architektur auf allen Ebenen: Programmdesign
fachliche Umgangsformen Art und Weise der Handhabung von Gegenständen Welche Informationen werden am Gegenstand abgelesen? Welche Veränderungen werden am Gegenstand vorgenommen? Welche Aktionen werden ausgelöst? (ohne Zerstörung/Transformation)
Entwurf nach Zuständigkeiten Modularität Separation of Concerns Kohäsion Single Responsibility Principle Law of Demeter
Entwurfsprinzipien große Bausteine vermeiden Don't Repeat Yourself (DRY) Keep It Simple, Stupid! (KISS) Schnittstellen verbergen Interna (Geheimnisprinzip): Kapselung & Lokalität
Law of Demeter "If you delegate, delegate fully!" "Don't talk to a stranger!" Fluent Interface
Ziele von gutem Design geringe Kopplung Zyklenfreiheit
Kopplung Maß der Abhängigkeit eines Bausteins von der Umgebung Vorteile bei geringer Kopplung: leichte Anpassbarkeit Verständlichkeit gute Testbarkeit hohe Wiederverwendbarkeit
Zyklenfreiheit Acyclic Dependency Principle (ADP) Auswirkung auf: Wartbarkeit Austauschbarkeit Testbarkeit Einstiegspunkt beim Analysieren
fachliche Architekturansätze Transaction Script Table Module Domain Model
Transaction Script gut für einfache Probleme einzelne Prozeduren Prozedur pro Anfrage vom UI Transaktionsklammern korrespondieren mit Prozedur direkte Kommunikation (max. schlanker Adapter) kein OO, sondern prozedural große Anzahl und Duplicate Code bei großer Komplexität Mix von Fach- und Techcode kaum nachvollziehbare Abhängigkeiten
Table Module Klasse pro DB-Tabelle Algorithmen direkt auf ResultSet kein OO, sondern DB-zentriert große Anzahl und Duplicate Code bei großer Komplexität Mix von Fach- und Techcode kaum nachvollziehbare Abhängigkeiten
Domain Model typische OO-Modellierung Verwendung von Konzepten wie Kapselung, Lokalität & Delegation Trennung von Fach- und Techcode Kapselung von Daten & Algorithmen Polymorphie statt Conditionals Funktionalität am besten geeigneten Objekt komplexer Kern von fachlichen Klassen
CRC-Karten Klassen/Komponentenname: Begriff des Anwendungsgebiets/Fachsprache Verantwortlichkeit: erbrachte Dienstleistungen, Angebot an Klienten Zusammenarbeit: Nennung anderer Komponenten, deren Dienstleistung genutzt wird, um eigene Dienstleistung zu erbringen (Delegation)
Vorgehen bei CRC-Karten-Modellierung Fachbegriffe aus Use Cases und Glossaren Was tun Akteuere mit den Dingen? Rollenspiel um Lücken zu finden bei der Nachstellung der Use Cases
Vermeiden bei CRC-Karten-Modellierung Klassen mit zu viel Verantwortlichkeit Klassen ohne Verantwortlichkeit Klassen mit unbenutzter Verantwortlichkeit Klassen mit unzusammenhängender Verantwortlichkeit gleiche Verantwortlichkeit in mehreren Klassen Klassen ohne Zustand aber: nicht zu früh rauslassen, lieber zu viel als zu wenig
Architekturstil prinzipielle Lösungsstruktur, die durchgängig und weitgehendem Verzicht auf Ausnahmen angewandt werden sollte Microservice Schichtenarchitektur Mustersprache
Schichtung Standardschichten: Präsentation, Applikation, Fachdomäne, Infrastruktur fachliche Schichtung als Module mit je allen Schichten höhere Schichten nur Beziehung zu unter ihr liegenden Schichten Schnittstellen zischen Schichten strenge Schichtung: nur direkt darunter liegende Schicht
Vorteile von Schichtung Flexibilität Unabhägigkeit Austauschbarkeit minimierte Abhängigkeiten leicht verständlich
Nachteile von Schichtung negativer Einfluss auf Performance (Gegenmaßnahme: Layer-Bridging) manche Änderung schlecht unterstützt (Anpassung in vielen Schichten)
Schwierigkeiten & Lösungen für die Infrastrukturschicht enthält Logging Framework, Libraries, OR-Mapper, ... Zugriffe aus allen Schichten notwendig Umwandlung in fachliches Modul (Libraries/Framework nur auf entsprechender technischer Schicht)
Effekte durch Zwang zur Zyklenfreiheit Build-System verbietet Zyklen Monolith mit vielen Satelliten Pipes & Filter für Datenfluss (Trennung fachlicher und technischer Bestandteile)
Trennung fachlicher und technischer Bestandteile jeder Baustein nur für einen der beiden Aspekte zuständig Anforderungen ändern sich getrennt voneinander Vorteile: Modularisierung, Wartbarkeit, Verständlichkeit, bessere Kommunikation zwischen Domänenexperten und Sortwareexperten
Architekturen die Fachlichkeir und Technik trennen Hexagonale Architektur (Adapter verbinden technische Schnittstellen mit fachlichem Anwendungskern) Onion / Clean Architecture Domain Driven Design
Elemente der Domain-Schicht
DDD Entities Kernobjekte Zustand anhand von ValueObjects Konsistenz des Zustands unveränderliche Identität klar definierter Lebenszyklus (immer) persistent anwendungsfachlich
DDD ValueObjects keine eigene Identität beschreiben Zustand anderer Objekte unveränderlich können aus anderen ValueObjects bestehen, nie aus Entities anwendungsfachlich
DDD Services stellen Abläufe oder Prozesse dar, die nicht von Entitäten ausgeführt werden können zustandslos Parameter und Ergebnisse der Operationen sind Entities und ValueObjects anwendungsfachlich
DDD Factories Erzeugung von Aggregates, Entities und ValueObjects innerhalb der Domäne kein Zugriff auf technische Bausteine anwendungsfachlich
DDD Repositories kapseln technische Details der Infrastukturschicht ggü. der Domänenschicht beschaffen Objektreferenzen von Entities, die ais DB gelesen werden müssen Transformationssoftware
DDD Aggregates vernetze Entities & ValueObjects einzige Entity als Wurzel Änderung als Einheit fachliche Konsistenz und Integrität anwendungsfachlich
DDD Schichtenarchitektur UI: Eingaben/Benutzerkommandos, Darstellung Application: Geschäftsprozesse, Domain-Schicht kann Aufgabe übernehmen Domain: Fachdomäne, siehe DDD Karten Infrastruktur: technische Dienste, wie Persistenz, Sicherheit, Kommunikation mit anderen Systemen
Werkezug-Material-Ansatz Erweiterung DDD um UI Werkzeug: verkörpert fachliches Prinzip, Untersuchen und Ändern von Entities, neues Konzept, da kein Pendant in Domain, Freiraum in Bearbeitung Automaten: wiederkehrende Routine, definierte Folge von Schritten, festes Ergebnis, keine äußere Eingriffe
Conway's Law "Organizations, which design systems, are constrained to produce designs, which are copies of the communication structures of these organizations. They are congruent!" z.B.: Wenn 4 Teams einen Compiler bauen, bekommt man einen 4-Phasen Compiler
Zuordnung Bausteine zu Teams Komponenten-Teams: Wenn ein Team mehrere Bausteine umsetzt, werden diese verschmelzen Feature-Teams: Bausteine aus mehreren Schichten werden verschmelzen
Monolith vs. Microservices Monolith: alle Funktionalität in einem Prozess, Skalierung durch mehrere Server Microservices: Jedes Element der Funktionalität ist ein eigener Server, Skalierung durch Verteilung und Replikation der einzelnen Services
Entwurfsmuster wiederkehrende Probleme und bewährte Lösungen standardisierte Arrangements von Bausteinen lokale Anwendung mehrere pro System
Ziele von Entwurfsmustern Kopplung bei Erzeugung aufheben (Factory) Schnittstellenanpassung (Adapter, Bridge, Fassade) Kapselung (Proxy) dynamische und transparente Erweiterung (Decorator) Benachrichtigung ohne Addresat zu kennen (Observer)
Factory-Pattern Schnittstelle zum Erzeugen von Objekten - System unabhängig von Objekten (Bibliothek, Framework) - Systemkonfiguration mit Produktfamilie - Wahrung der Konsistenz bei verwandten Produkten - Blackbox-Bibliothek
Vor-/Nachteile des Factory-Pattern einfacher Austausch der konkreten & abstrakten Fabriken Anwendung nur einer Produktfamilie sichergestellt Erweiterung komplex, da Schnittstellen in allen Subklassen ergänzt werden müssen
Adapter-Pattern Anpassung einer Schnittstelle an die Erwartungen des Klienten. Überbrückung von inkompatiblen Schnittstellen. - existierende Klasse soll wiederverwendet werden aber Schnittstelle passt nicht - Erstellung wiederverwendbarer Klasse - Wiederverwendung von Unterklassen ohne Spezialisierung aller Schnittstellen
Klassenadapter Anpassung an genau eine Zielklasse (keine Unterklassen) Verhalten adaptierter Klasse kann geändert werden nur ein Objekt, keine Durchreicheoperationen
Objektadapter Adapter kann adaptierte und Subklassen anpassen begrenzte Verhaltensänderung ohne Unterklassenbildung
Brückenmuster Entkopple Abstraktion von Implementierung für unabhängige Variierung - Implementierung soll zur Laufzeit ausgewählt werden - Abstraktion und Implementierung durch Unterklassen erweiterbar - verschiedene Kombinationen von Abstraktion und Implementierung - Implementierung hat keine Auswirkung auf Klienten - Nutzung von mehreren Objekten
Vor-/Nachteile des Brückenmusters - Entkoppelt Schnittstelle & Implementierung -> keine Abhängigkeiten von der Implementierung - keine Neuübersetzung der Abstraktion oder der Klienten bei Änderung - Förderung von Schichtenbildung -> besser strukturierte Systeme - Abschirmen der Klienten vor Implementierungsdetails
Fassadenmuster - Anbieten einer einfachen Schnittstelle zu komplexem Subsystem - einfache Sicht auf ein Subsystem für Klienten - Aufteilung eines Systems in Schichten mit definierten Eintrittspunkten
Vor-/Nachteile des Fassadenmusters - verringerte Komplexität durch Subsysteme - erleichterte Benutzung komplexer Subsysteme durch Minimierung der handhabbaren Objekte - minimierte Kommunikation und Abhängigkeit zwischen Subsystemen (verringerte Kopplung) - Änderung von Subsystemen ohne Neuübersetzung des Gesamtsystems
Proxymuster Zugriffskontrolle über Stellvertreterobjekt anpassungsfähige und intelligente Referenz auf ein Objekt - teure Objekte erst auf Verlangen initialisieren (virtueller Proxy) - Kontrolle des Zugriffs auf Originalobjekt (Schutzproxy) - lokaler Stellvertreter für Objekt aus anderem Adressraum (Remote Proxy) - Verfolgung von Referenzen mit zuätzlichen Aktionen (Smart Pointer)
Vor-/Nachteile des Proxymusters Ebene der Indirektion für Objektzugriff - Remote-Proxy versteckt anderen Adressraum - virtueller Proxy kann Optimierungen ausführen - Schutzproxies und Smart Pointer ermöglichen zusätzliche Verwaltungsaufgaben - echtes Objekt nicht zwingend bekannt, kann auch für Familien von echten Objekten verwendet werden
Dekorierermuster (Decorator Pattern) dynamische Erweiterung von Objekten als alternative zur Unterklassenbildung - Erweiterung einzelner Objekte ohne Einfluss auf andere Objekte - zusätzliche Funktionalität soll entfernt werden können - Unterklassenbildung unpraktisch (z.B. viele Klassen nötig um alle Kombinationen abzudecken)
Vor-/Nachteile des Dekorierermusters - höhere Flexibilität im Vgl. zu Vererbung - keine Überfrachtung der hochstehenden Klassen in der Hierarchie - Dekorierer umschließt ist aber nicht identisch - oft erhöhte Objektanzahl - benötigt eine leichtgewichtige Oberklasse - statt oberflächlicher Veränderung kann mit Strategiemuster auch innere Logik geändert werden
Beobachtermuster (Observer Pattern) 1:n-Beziehung zwischen Objekten, so dass Zustandsänderung abhängige Objekte benachrichtigt - Geberobjekt kennt Schnittstelle des Nehmerobjektes nicht - Vermeidung von wechselseitige Beziehungen, welche Bildung von Subsystemen & Komponenten erschwert - Entkopplung von Komponenten
M(odel)-V(iew)-C(ontroller) Muster Model: Datenhaltung/Zustand View: Darstellung der Daten des Models Controller: Steuerung des Verhaltens - Controller wählt View - View fragt Model ab - View sendet Input an Controller - Controller aktualisiert Model - Model informiert View über Änderungen
Broker (Vermittler)-Muster Strukturierung verteilter Softwaresysteme - Vermittler zur Koordination der Kommunikation - Dienste für Hinzufügen, Entfernen, Auswechseln, Aktivieren und Suchen - Klient weiß nicht ob lokale oder entfernte Komponente - Grundlage von CORBA (Common-Object-Request-Broker-Archtitecture)
Vorteile Brokermuster - Standortunabhängig: Vermittler kümmert sich um Auffinden der Services - Komponenten leicht zu ändern wenn Schnittstellen stabil - Portierbarkeit eines Brokersystems - Interoperabilität zw. Brokersystemen - Wiederverwendung von Komponenten
Nachteile Brokermuster - eingeschränkte Effizienz - hohe Netzwerklast - niedrige Fehlertoleranz - schwieriges Testen/Debuggen - Interoperabilität zw. Brokern nicht erreicht - Wiederverwendung meist nur innerhalb des Servers
SOLID S ingle Responsibility Principle O pen Closed Principle L iskov Substitution Pronciple I nterface Segregation Principle D ependency Inversion Principle
Single Responsibility Principle (SRP) Jede Klasse nur eine fest definierte Aufgabe
Open/Closed Principle (OCP) Komponenten offen für Erweiterung aber geschlossen für Veränderung - Polymorphie - Erweiterung ohne Änderung des bestehenden Codes - nur Abhängigkeiten von Abstraktionen nicht Implementierungen
Liskov Substitution Principle (LSP) Unterklassen erfüllen alle Verträge ihrer Oberklassen, überschriebene Methoden besitzen keine stärkeren Vorbedingungen und keine schwächeren Nachbedingungen Unterklassen sollen nicht mehr erwarten und nicht weniger liefern als ihre Oberklassen
Interface Segregation Principle (ISP) "Many client specific interfaces are better than one general purpose interface" Kategorisierung ähnlicher Klienten in Interfaces Verwendung derselben Methode in mehreren Klienten-Typen -> Methode in allen Interfaces
Dependency Inversion Principle (DIP) keine Abhängigkeit zu konkreten Klassen sondern zu Interfaces
Inversion of Control (IoC) Hollywood-Principle (Don't call us, we call you) Kontrollfluss geht vom Framework aus (Framework ruft System auf nicht umgekehrt)
Dependency Injection (DI) Abhängigkeiten zu anderen Bausteinen explizit machen durch Methoden zur Übergabe von Referenzen - gut modularisiert - leicht verständlich - einfach zu testen
Varianten von Dependency Injection Field Injection Interface Injection Setter Injection Constructor Injection Auflösung entweder explizit oder automatisch
Constructor Injection Konstruktor erwartet benötigte Objekte
Setter Injection Bereitstellung von Settern für benötigte Objekte
Field Injection benötigte Objekte per Reflection direkt in Feld geschrieben normalerweise per Annotation/Metadaten
Interface Injection Definition eines Interfaced für Kennzeichnung abhängige Klasse Implementiert interface
Vor-/Nachteile von Dependency Injection Objekt bekommt alles was es braucht - Konfiguration zum Auflösen der Abhängigkeiten nötig - mehrere Konfigurationen für unterschiedliche Zwecke - Austausch einer Implementierung erfordert Konfigurationsänderung nicht eine Anpassung der konfigurierten Objekte - Tests können Abhängikeiten durch Dummys/Mocks ersetzen - Überblick über Abhängigkeiten behalten, manchmal schwer
Dependency Injection Framework Steuerung der Konfiguration Zusätzliche Funktionen neben Konfiguration - einheitlicher Mechanismus - Lebenszyklen (singleton, prototype, request, session, conversation) - Aspect Oriented Programming (AOP) durch Erweiterung der Objekte (Proxies, Weaving) (Transactions, Security, Caches)
Was gehört unter DI-Kontrolle? ja: Services, Factories Repositories nein: Entities, ValueObjects, Aggregates
Logische Ebenen für Client/Server-Verteilung Präsentation (JSP/View) Application Logic (Servlet/Controller, Service, Entity, Value) Data Management + External Services (DB-Service, Fremdsystem)
Anforderungen an die technische Infrastruktur möglichst einfaches Verteilungsmodell für Konstruktion von Oberfläche, Businesslogik, Persistenzschicht & Schnittstellen, damit geringe Komplexität, Produktivität, Testbarkeit erhalten bleibt und das System für Benutzer erwartungskonform und performant ist.
Mögliche Client/Server-Schnitte
Fat-Client Übertragung der Entities auf den Client gehört zum Benutzungsmodell IDE, Textverarbeitung, explizite Kooperation Einzelplatzsysteme mit DB Zugriff vom Client Einzelplatzsysteme mit Remote-Aufruf von. CRUD-Operationen (auch per AJAX denkbar)
Rich-Client Transparenter Transport der Entities auf den Client Nachteile: große Entities nur teilweise laden (Performance), Trennung vom persistenten Kontext -> keine verteilten Transaktionen Beispiel: Client/Server Anwendung mit Applikationslogik teilw. auf Client, Rich GUI (GWT,...), Mobile Apps
Thin-Client Oberfläche und fachliche Logik durch DTO über Netz versorgt Nachteile: fehlende fachliche Konsistenz am Client, viele Anfragen am Service für Änderung der Entities Beispiel: Client/Server Anwendung mit Rich GUI (GWT,...), Ajax-Anwendung als FE
Ultra-Light/Thin-Client Implizite Kooperation mit Datenkonsistenz (Antrags-/Auftragsverarbeitung in Geschäftsprozessen) DB + Fremdsysteme müssen nicht am selben Server wie Businesslogik laufen (weiterer Verteilungsschritt) Beispiele: klassische Webanwendung (Server-side rendering), Half-Object-Lösungen
Dimensionen für Gestaltung von IT-Arbeitsplätzen Umfang der IT-Kenntnisse Vielfalt der Aufgaben Umfang der Unterstützung Ausmaß an Flexibilität
Integration verteilter Anwendungen Funktionalität über mehrere Anwendungen verteilt isolierte Applikation zur gemeinsamen Lösung verbinden
Ansätze für die Integration File Transfer (Dateitransfer) Shared Database (gemeinsame Datenbank) Remote Procedure Invocation (verteilte Aufrufe) Messaging (Nachrichten)
File Transfer Voraussetzung: gemeinsames Dateisystem, Format, Exporter & Importer Vorteile: einfach, alle Plattformen und Sprachen, asynchron, lose Kopplung, kaum Eingriffe für Export, App-Internas verborgen Nachteile: Inkonsitenz bei großen Update-Intervallen, viel Absprache bei DEVs (Namings, Paths), Semantik lokal festgelegt, manueller Eingriff naheliegend
Shared Database Voraussetzung: Aufsetzen der App auf einer Datenbank möglich, gemeinsames Datenschema Vorteile: zeitgleiche Updates, Verbreitung von SQL/OR-Mappern, Datenbestand konsistent und synchron, Zwang guter Datenmodellierung Nachteile: universelles DB-Schema schwierig, semantische Unterschiede zw. Apps, Performance-Issue der DB, Fremdsoftware hat eigene DB, ungekapselter Austausch, hohe Kopplung
Remote Procedure Invocation Voraussetzung: Veröffentlichung von nutzbaren Funktionen, gemeinsame Technologie, Berücksichtigung von Ausfällen Vorteile: Wiederverwendbarkeit, lokale Kapselung, Integrität der eigenen Daten, weniger Code Duplication Nachteile: Enge Kopplung, geringe Stabilität, Performance und Ausfallsicherheit, Änderung betreffen alle Nutzer, gegenseitige Aufrufe problematisch
Messaging Voraussetzung: Anschluss an Message BUS, Technologie Vorteile: lose Kopplung, Ausfallsicherheit, Performance (Message-Queue), asynchron, Nachrichten können Daten oder Funktion triggern Nachteile: Asynchronität muss beherrscht werden, semantische Dissonanz
Message-Oriented Middleware (MOM) Grundkonzepte: Send & Forget, Store & Forward Lose Kopplung und Zuverlässigkeit: Kanäle sind unabhängig von der Anwendung -> keine Standortabhängigkeit Kanäle sind asnchron und verlässlich -> keine zeitliche Abhägigkeit Datenaustausch in in sich geschlossenen Nachrichten -> keine Datenformatabhängigkeit
Auswirkungen asynchroner Komunikation Parallelisierung -> schneller, schwieriger zu debuggen Callback -> Empfang und Verarbeitung in neuem Kontext während anderer Arbeiten unbestimmte Ausführungsreihenfolge -> unabhängige Prozesse mit Synchronisationslogik
Delivering im MOM - Queue auf dem Server - Message kann nur einmal gelesen werden - mehrere Producer/Consumer können selbe Queue verwenden -> Reihenfolge nicht sicher
Herausforderung durch MOM - komplexes Programmiermodell (eventgetrieben, Logik auf Handler verteilt, Debugging) - Nachrichtenreihenfolge (Zustellgarantie, keine Reihenfolge, Resequenzierung) - Synchrone Anwendungsszenarien (Anwender erwarten synchrone Bearbeitung, Anwendung muss sich entsprechend verhalten) - Performanz (große Datenmengen besser außerhalb) - Plattform Support (eingeschränkte Möglichkeiten) - Herstellerabhängigkeiten (trotz Standards plattformunabhängig, Integration ist weitere Herausforderung)
Integration von Alt-/Fremdsystemen Geschäftsprozesse über einzelne Systeme verteilt Schnittstellen passen nicht zusammen Unterschiedliche Abstraktiongrade -> Integration über MOM
Probleme bei verteilten Anwendungen Overhead durch entfernte Aufrufe erhöhte Komplexität zusätzliche Datenkonvertierung und Transport Fehlerbehandlung über Systemgrenzen Anzahl Fehlerquellen steigt Testaufwand steigt Nebenläufigkeitsprobleme Dateninkonsistenz bei/nach Ausfällen
Lösungen für verteilte Systeme Verteilung vermeidbar? Entwurf stabiler Schnittstellen höhere Serverlast statt höherer Datentransfer Verarbeitungsprozesse nahe an den Daten
Probleme bei Integration bestehender Systeme (Legacy) monolithische Systeme kein Quelltext/Dokumentation ungenügende Fehler-/Ausnahmebehandlung schlechte Datenqualität anderes Laufzeitverhalten übergreifende Transaktionen
Lösungen für Legacy-Systeme Schnittstellen und Verantwortlichkeiten klar definieren minimal-invasive Eingriffe Migration statt Integration -> bei wenig Wissen zum Altsystem -> bei größerem Integrationsrisiko als Geschäftswert
Warum gibt es Service-Oriented Architecture (SOA)? Ansprüche von Kunden und Partnern steigen (Marktdruck) viele Geschäftsprozesse ausschließlich mit IT-Unterstützung bestehende IT meist Monolithen, unflexibel und lange gewachsen IT-Budgets oft für Entwicklung oder Modernisierung einzelner Anwendungen ohne Bezug zum gesamten Prozess -> SOA für Flexibilität mit Wertschöpfung bei geänderten Bedingungen -> Technik ist Mittel zum Zweck
Was ist SOA? IT-Architektur mit Services als zentralem Element, Services realisieren Geschäftsfunktionen -> integrierbare Einheiten (lose gekoppelt, selbstständig betriebene, verwaltete und gepflegte Software, kapseln Funktion über Schnittstelle) -> Service-Vertrag für Schnittstelle inkl. Metadaten -> Nutzung über entfernte Aufrufe mit offenen Standards (XML, JSON, ...)
Wie funktioniert SOA? Service Provider meldet Schnittstelle and Service Verzeichnis Service Consumer fragt Service Verzeichnis nach Service für Schnittstelle Service Consumer ruft Service Provider auf
Kopplung zwischen Services zeitliche Abhängigkeit: synchron (beide Services müssen zeitgleich aktiv sein örtliche Abhängigkeit: Adresse des aufgerufenen Service darf sich nicht ändern Struktur- und Implementierungsabhängigkeit: direkte Nutzung der Implementierung statt der öffentlichen Schnittstelle (Austauschbarkeit) Datenabhängigkeit: Nutzung einer Datenstruktur des anderen Service
Peer-to-Peer gleichberechtigte über Netzwerk verbundene Komponenten zeitgleich Client & Server Einsatzzweck: ausfallsichere Datenverteilung +: hohe Ausfallsicherheit, geteilte Ressourcen (CPU, RAM, ...) -: Auffinden bei großen Netzen schwierig, Fehlerbehandlung
Blackboard ohne Algorithmus Ableitung der Lösung aus dem Blackboard Quellen tragen gemeinsam zur Lösung bei parallele Erarbeitung und Bewertung von Alternativen +: effizient für große Datenmengen, zentrales Management, einfach für neue Quellen, Quellen arbeiten parallel -: Einigung aug ein Datenmodell, effiziente Verteilung schwer, Verarbeitungsende schwer festzulegen, Herausforderung Debuggen und Testen
Technische Architektur Persistenz Kommunikation & Nebenläufigkeit grafische Oberflächen Internationalisierung Sicherheit Logging/Protokollierung Fehlerbehandlung Energieeffizienz -> systemübergreifende Wiederverwendbarkeit -> wechselseitige Abhängigkeit
Paradigmen von Datenbanken hierarchische DB: jeder Datensatz hat einen Vorgänger (außer Wurzel) NetzwerkDB: m:n Beziehungen zw. Datensätzen relationale DB (Tupel/Spalten): Tabellen, Schlüsselbeziehung, SQL, verbreitet, zuverlässig objektorientierte DB: Objekte und Graphen direkt gespeichert, einfaches Programmiermodell, wenig verbreitet, gute Performance/Robustheit GraphDB: flexible aber komplex, endliche Beziehungen Key-Value-DB: flexibel, skalierbar, hoch performant, assoziative Datenfelder dokumentenorientierte DB: performant, wenn typische Abfragen entspricht, Dokumente im Standardformat (JSON, XML, ...), Dokumente über Schlüssel adressierbar oder per API über Inhalt zu finden
Risiken und Probleme der Persistenz Abhängigkeiten zu technischen Details Seiteneffekte durch Trigger Strukturbruch zw. Programmiersprache und Datenbank oder anderen Systemen große Unternehmen speichern in Mainframesysteme -> Interaktion mit dem System erzeugt Komplexität
Lösungsmuster der Persistenz Entkopplung des fachlichen Kerns von der Persistenz durch eigene Schicht zwei Subschichten: Objektschicht (Kapselung der Objektorientierung) & Speicherungsschicht (Schnittstelle zur DB)
Anforderungen an Persistenzschicht Unterstützung mehrerer Mechanismen parallele Verbindungen automatische Erzeugung von eindeutigen IDs Transaktionen Lazy-Loading Kapselung durch Schnittstellen für save, read, delete & dirty-Flag, Factories Performance-Tuning ohne Code-Anpassung
Kommunikation und Nebenläufigkeit Kommunikationsstile: Remote Procedure Call (RPC), Publish-Subscribe, Broadcast Zusammenführung der Ergebnisse bei Nebenläufigkeit
grafische Oberflächen Fragestellungen: Wie werden Daten präsentiert?, Wie interagiert der Benutzer?, Wer steuert die Navigation?, Wer kontrolliert Zustandswechsel?, Wer verarbeitet Ergebnisse?, Welche fachliche Komponente stellt Inhalte bereit? Interaktionsstile: objektorientiert, Frage-Antwort (Masken, Wizards), formularbasiert, Menüs und Fenster
Probleme der Internationalisierung mehr Dimensionen als nur Sprache: Zeichen/Schriftsätze/Layout, ltr vs. rtl, Zeitzonen, Formatierung, Währung, Adressen, Namen, Tastenkürzel, Datenbezeichnungen, politische/kulturelle Aspekte, abweichende Informationsarchitektur, ...
Lösungen für Internationalisierung externe Ressourcen für Sprachelemente, dynamisches GUI-Layout, Sprachauswahl durch Nutzer/OS/Profil, Zeichensätze mit ausliefern, Datenmodell um Sprache/Länder ergänzen, Bibliotheken für Formatierung, Währungswechsel beachten & Referenzwährung festlegen, Zeitzone durch Timestamp Service abdecken, Verzicht auf Symbole & Metaphern bei heterogenen Zielgruppen
Sicherheit Mechanismen zur Gewährleistung von Datensicherheit, Datenschutz und Missbrauchsverhinderung Sicherheitsziele: Vertraulichkeit, Integrität, Authentizität, Autorisierung & Verfügbarkeit
Probleme der Sicherheit Kommunikation zw. Systemen über Firewall Public-Key-Infrastructure zur Erzeugung und Verwaltung von Schlüsseln und Zertifikaten zusätzliche Hardware möglich Performance-Verlust gesetzliche Rahmenbedingungen
Lösungen für Sicherheit kryptographische Verfahren auf Unkenntnis der Schlüssel nicht des Verfahrens -> nicht selbst entwickeln eigene Zertifizierungstelle vs. gekaufte Dienstleistung Sicherung auf niedriger OSI-Ebene Sicherheitsanforderungen bei Auswahl von Verteilungsplattform berücksichtigen Verbindungspooling für Performance
Probleme der Protokollierung Abhängigkeit vermeiden hohe Flexibilität notwendig (Was?, Kategorie?, Kanäle?, Format?) OS und Programmiersprachengrenzen (Komplexe Zusammenführung, getrenntes Log erschwert Konsolidierung)
Lösungen für Protokollierung Framework und Fassade nutzen Weg den Nutzers verfolgbar machen Interaktion mit anderen Systemen protokollieren Ringpuffer für Platzprobleme Aspektoriente Programmierung nutzen
Ausnahme- und Fehlerbehandlung Fehler: Unterschied zw. erwartetem und konkretem Ergebnis/Zustand Ausnahme: Baustein kann aufgrund eines Fehlers nicht normal ablaufen Anforderungen: angemessene Reaktion des Systems Verhinderung von Seiteneffekten leichte Fehlerdiagnose Unterscheidung von Original- und Folgefehler vorzeitige Erkennung und Prävention
Fehlerkategorien fachlicher Fehler technischer Fehler Syntaxfehler Format-/Semantikfehler Protokollfehler korrigierbare Fehler nicht korrigierbare Fehler -> mit QS-Experte festlegen, semantische Lücken in Schnittstellen, Schnittstellen von Fremdsystemen
Muster zur Fehlerbehandlung Absprache mit externen Systemen technische Fehler verbergen (Logging, Benutzerfreundliche Meldungen Fail Fast (Folgefehler vermeiden) Protokollierung nur an einer Stelle keine leeren Catch-Blöcke oder Umwandeln von Exceptions
Energieeffizienz unangemessener Energieverbrauch -> angemessener Scope & Architektur Vermeidung unnötiger Aktionen/ Berechnungen -> effiziente Algorithmen & Caching -> schlanke Assets -> kompiliert statt interpretiert -> optimiertes Cloud-RZ statt on-premise -> Burstable instances -> ARM erfordert extra Builds -> Sizing der Instanzen -> "grüne" Server -> Auslastungsmonitoring
Warum Architektur dokumentieren? Kommunikation Erklären Bewertung Überblick wahren Quelltext zu geringe Abstraktion
Ziele der Architekturdokumentation Unterstützung des Entwurfs Überblick über längeren Zeitraum Leitung der Umsetzung -> Fehler und Probleme beseitigen -> geänderte Anforderungen erfüllen -> Reaktion auf geändertes technisches Umfeld Nachvollziehbarkeit und Bewertung
stakeholder gerechte Beschreibung Jeder benötigt seinen eigenen Plan (Abstraktion) Überschneidung möglich (Konsistenz)
Architektursichten System aus spezifischer Perspektive viele Sichten mit unterschiedlichem Schwerpunkt Sichten richten sich an Adressaten Spezialisierung -> Handhabung der Komplexität Informationen können mehrfach auftreten Konsistenz -> kein Widerspruch Art der Sicht und deren Benennung ansichts-/kontextabhängig
Arten von Architektursichten Kontextsicht Verteilungssicht Bausteinsicht Laufzeitsicht zusätzlich: Datensicht fachliche Sicht
Kontextsicht System als Black-Box (Sicht von außen) externe Akteure Schnittstellen zur Außenwelt (Art, Protokoll, Muster) wichtigste Anwendungsfälle -> Einstiegspunkt
Bausteinsicht Software-/Implementierungskomponenten (Abstraktion vom Quellcode) statischer Aspekt (Zerlegung, Beziehungen) Bausteine und deren Abhängigkeiten Was muss implementiert, konfiguriert, gekauft werden? -> Unterstützung Projektmanagement (Arbeitspakete) -> Unterstützung Entwickler (Big Picture)
Verteilungssicht Verteilung Laufzeitelement zu Hardware logische Kanäle zu physische Kanäle technische Komponenten und deren Verfügbarkeit Netz- und Speicherkapazitäten Was wird wo installiert? -> Kommunikation mit Betrieb -> Konfiguration und Administration -> Engpässe, Kosten, Risiken
Laufzeitsicht Welcher Baustein Teil welches Use Cases? Zusammenarbeit/Interaktion von Komponenten/externen Systemen? Wie startet/beendet das System? Instanzen und Lebenszyklen von Bausteinen -> Unterstützung Entwickler -> Kommunikation Betrieb
Diagramm-/Dokumentarten für Sichten
Paketdiagramm Gruppiert Modellelemente auf verschiedenen Abstraktionebenen zur Komplexitätsreduktion
Komponentendiagramm zeigt interne und externe Sicht von Komponenten, sowie die Verknüpfung von Komponenten untereinander
Zeit(verlaufs)diagramm Zeigt Zustandsänderungen der Interaktionspartner aufgrund von Zeitereignissen und Nachrichten
Aktivitätsdiagramm Dient zur Modellierung von prozeduralen Abläufen in Form von Kontroll- und Datenflüssen. Besonders sinnvoll für die Darstellung von konfigurierbaren und nebenläufigen Abläufen
Verteilungsdiagramm Zeigt die eingesetzte Hard- und Software-Topologie in Form von Knoten und Kommunikationsbeziehungen sowie das zugeordnete Laufzeitsystem in Form von Artefakten
Kompositionsstrukturdiagramm Zeigt die interne Struktur von Modellelementen und ermöglicht dadurch eine hierarchische Dekomposition
Kommunikationsdiagramm Beschreibt einfache Interaktionen Fokus: strukturelle Beziehungen
Interaktionsübersichtsdiagramm Zeigt auf abstrakter Ebene den Kontrollfluss zwischen verschiedenen Interaktionsabläufen
Use-Case-Diagramm Graphische Sicht auf einen oder alle Akteure, Use Cases und ihre Interaktion im Zusammenhang mit einem System
IT-Landschaft Welche Systeme werden in welchen Versionen betrieben? Über welche Schnittstellen wird zusammengearbeitet? Wo gibt es Verbesserungspotential?
Glossar Ist-Analyse: Erschließung von Fachsprache, relevante Begriffe in Prosa definieren, Unterschiede im Gebrauch festhalten Soll-Konzept: Rekonstruktion von Fachsprache, Vereinheitlichung der Fachbegriffe, neue Begriffsbildung
Szenarien & Visionen erzählende Prosatexte (Fragen stellen und Begriffe klären) Szenarien auf Ist-Ebene (Arbeitskontexte/-prozesse bekannter Akteure, Generalisierung für Rollen) Szenarien auf Soll-Ebene (Vision über System im Einsatzkontext) Szenarien im offenen Design (Vision über Systemeinsatz mit vorgestellten Akteuren, typische oder extreme (+/-) Situationen, Kreativität im Design)
Leitfragen für Entscheidungen Architecture Decision Records Textstruktur Datei mit 5 Infos: - Titel - Kontext - Entscheidung - Status - Auswirkung
Schnittstellendokumentation Bedarf für Schnittstellendokumentation obwohl in Sichten enthalten - Identifikation - bereitgestellte Ressourcen - Fehlerszenarien - Variabilität/Konfigurierbarkeit - Qualitätseigenschaften - Entwurfsentscheidungen - Benutzungshinweise
ARC42
typische Architekturdokumente zentrale Architekturbeschreibung Architekturüberblick Dokumentationsübersicht Übersichtspräsentation Architekturtapete Handbuch zur Architekturdokumentation technische Informationen zum Entwicklungsprozess
Show full summary Hide full summary

Similar

Software Processes
Nurul Aiman Abdu
Software testing strategies: Summary
harrymt
Software Application
Dim Ah
Diseño de Software
Verny Fernandez
Input and Output Devices
Jess Peason
GCSE Computer Science (AQA)
Wolfie Ruth
2.1.3 Software
Lavington ICT
GCSE AQA Computer Science - Definitions
James Jolliffe
Hardware, Software and Networking
dphillips211
Hardware and Software
Balikkoftesi