VSK
-
- 1 / 47
-
Cartes-fiches
Was ist Middelware und in welche Middelwarekategorie fällt RMI ?
Middelware sind anwendungsneutrale Programme, die zwischen Anwendungen vermitteln, so dass die Komplexität der Applikationen und ihrer Infrastruktur verborgen bleibt.
RMI fällt in die Kommunikationsorientierte Middleware --> Abstraktion der Netzwerkprogrammierung
die drei gängisten Transparenzen (erklären)?
Ortstransparenz: der Ort an dem sich der Dienst/Ressource befindet ist dem Benutzer unbekannt
Zugriffstransaprenz: immer gleicher Zugriff, egal von wo (lokal oder entfernt)
Nebenläufigkeitstransparenz: Benutzer können gleichzeitg auf Diesnte/Ressourcen zugreifen. Zugriffe werden synchronisiert und repliziert.
Erkläre das RMI Prinzip?
Remote Interface: definiert Dienste welche zur Verfügung stehen sollten
Server Klasse: implementiert Remote Interface und erzeugt 1 oder n Instanz (Remote Objekte)
Remote Objekte: registrieren sich bei Namensservice
Namensservice: wird von Clients abgefragt
Clients: beschaffen sich mit Hilfe des Namensservice die Remote Referenzen der gewünschten Objekte und rufen dann die Dienste (Methoden) auf
Wie funktioniert RMI auf Clien - und Serverseite mit Stellvertretobjekten ?
Client Stub: bietet gleiche Schnittstelle wie das Remote Objekt an, ist auf dem gleichen Rechner wie der Client
Server Stub: auf gleichem Rechner wie der Server, nimmt Anfragen des Clients entgegen
Client und Serverstub kommunizieren ind er RMI Transportschicht miteinander. Der Server Stub kennt das Applikationsobjekt (Remote Object) und leitet die Anfragen des Client Stub an dieses weiter und den gibt den Rückgabewert zurück. Diese Kommunikation ist transparent.
Was sind die Voraussetzungen für Parameter und Rückgabewerte bei RMI ?
elementare Datentypen --> call by value
lokale Objekte --> serialisert (kopiert und somit auch als value)
verweise auf Remote Objekte --> Referenzcharakter
Erkläre das Push Prinzip für RMI?
Der Client übergibt dem Remote Objekt eine Remote Callback Referenz auf sich selbst. Das Remote Callback Objekt muss für die RMI Middelware exportiert werden.
Welche Komponenten sind notwendig um eine RMI Applikation zu verteilen ?
RMI Registry, RMI Server, RMI Client
Was sind die Nutzen von Komponenten ?
- Wiederverwendbarkeit (reduziert die Lieferzeit, grössere Konsistenz)
- Schnittstellen Vorteile (höher Qualität, präzise Spezifizierung, geteset)
- Austauschbarkeit (parallele Entwicklung)
Was sind die Eigenschaften einer Komponente?
- Eigenständige, ausführbare SW-Einheiten(Laufzeit-Sicht), d.h.Subsysteme, Prozesse, Objekte
- Über ihre Schnittstellen austauschbar
- Lassen sich unabhängig voneinander entwickeln
- Kunden -/ anwendungsspezifische bzw. wiederverwendbare sowie COTS
- Können installiert/deployed werden
Wieso ist die Versionierung von Komponenten so wichtig? welche Möglichkeiten zur Versionierung gibt es ?
eindeutige Indentifkation, ansonsten aufwändige Fehlersuche und schwer nachvollziehbar
- Versionierung im Dateinamen
- Vorteil:
- Artefakt kann sehr einfach identifiziert werden
- Eindeutige Referenz in Klassepfaden möglich
- Nachteil:
- Einfach manipulierbar
- Bei Bugfix à muss Klassenpfad angepasst werden
- Vorteil:
- Versionierung im manifest
- Vorteile:
- Manipulation nur durch Änderung in der JAR Datei
- Spezifikationskonform
- Dateiname ohne Versions-Nummer möglich à konstante Klassenpfade
- Nachteile:
- Version nur durch Blick in das JAR sichtbar
- Vorteile:
VARIANTEN KÖNNEN KOMBINIERT WERDEN
Was sind die Kriterien des modularen Entwurfs ?
- Zerlegbarkeit à Teilprobleme sind unabhängig voneinander realisierbar (oft rekursiv)
- Kombinierbarkeit à unabhängig voneinander (wieder)-verwendbar
- Verständlichkeit à unabhängig voneinander zu verstehen
- Stetigkeit à kleine Änderungen der Spezifikation führen nur zu kleinen Änderungen im Code
Was sind die Kriterien für gute Schnittstellen ?
Minimal (wenige Methoden und Überschneidungen, geringe Anzahl Parameter)
einfach zu verstehen
gut dokumentiert
Wer trägt welche Verantworlichkeiten bei DbC (Desing by Contract) ?
Precondition --> Zusicherungen die der Aufrufer einuhalten hat
Postconditon--> Nachbedingungen die das Aufgerufene garantiert
Invariaten --> Bedingungen die Instanzen ab der Erzeugung erfüllen müssen und währen der Ausführung einer Funktion
Was muss eine Dokumentation einer Schnittstelle enthalten ?
- Syntax (Rückgabewerte, Argumente, in/out, Typen) à in der verwendeten Programmiersprache
- Semantik (Was bewirkt die Methode) à keine Allgemeineform
- Protokoll (synchron oder asynchron)
- Nichtfunktionale Eigenschaften (Performance, Robustheit, Verfügbarkeit, bei Web-Anwendungen auch Kosten)
Interfacetypen ?
Operational Interface
- Gruppieren Operationen welche zusammen gehören (Bsp. Reservation)
- Normalerweise braucht der Client mehrere Methoden des Interface
- Operationen welche zusammen gehören haben einen Effekt auf den Status des Komponenten Objekt
Signal Interface
- Komponente kann Signale erhalten oder schicken (Bsp. ErrorMessage)
Stream Interface
Collections von Data-Streams welche von Komponenten benutzt/erstellt werden können. (Bsp.Videoimage)
API Typen ?
objektorientierte API
REST API
Messaging API
Dateibasierte API
Was ist der Unterschied zwischen Validate und Verify ?
Validate: haben wir es das Richtige entwickelt
Verify: haben wir es richtig gemacht
V Model ?
Customer Requirments/PlanAcceptance Testing
Detailed Requirements/ Plan System Testing
System Design/ Plan Integartion Testing
Detailed Design/ Write Unit Testing/Run Unit Tests (IMPLEMENT AND REFACTOR)
Run Integration Tests --> verify system design
Run System Tests --> verify detailed Requirements
Run Acceptance Tests --> validate customer Requirments
Aus was können Systemtests abgeleitet werden ?
- Im Backlog formulierten Anforderungen und Abnahmekriterien
- Den dazugehörigen detaillierten UseCase-Beschreibungen
- Der Defintion of Done
- Nicht funktionale Tests ( Last-/ Performance-/Security-/Robustness -Tests à ebenfalls wichtige Systemtests
- Formulieren der Systemtests fördert das Verständnis der Anforderungen im Backlog und bringt Unklarheiten und Inkonsistenzen frühzeitig zu Tage
Die verschiedneen Arten von Reviews?
- Feasibility Review (Systemabgrenzung und grober Projektplan)
- Requirments Review (Kundenanforderung und Abnahmeplanung)
- Preliminary Design Review (Systemarchitketur und Testkonzept)
- Critical Design Review (Dateailentwürfe und UnitTest Spezifkaitonen)
Review Stufen ?
- Inspection à strenger wohldefinierter Prozess
- Team Review à geplant und sturkturiert, etwas wengier formal
- Walkthrough à Autor stellt sein Werk einer Gruppe von Fachkollegen vor
- Pair Programming à zwei Programmierer arbeiten am selben Produkt
- Peer Deskcheck à nur eine Person prüft das Arbeitsergebnis
- Passaround à Kopien werden an verschiedene Personen versandt und deren Feedback eingeholt
- Ad Hoc Review à gewöhnlich normaler Bestandteil der Team arbeit
Was ist bei der Durchführung eines Reviews wichtig ?
- Dauer: 1- max 2 Stunden
- Inhalt: Bei jeder Sitzung nur ein Objekt/Artefakt eines Autors (oder mehrere kleinere verwandte Objekte)
- Zeitpunkt: dann wann die Objekte Artefakte vorliegen sollten à Meilensteine
- Besser Anforderungen & Konzepte reviewen statt Detail Design und Code
- Der Autor muss sich mit der Idee der Review wohlfühlen
Welcher Zusammenhang besteht Version, Revision, Baseline, Release ?
- Version àein spezifisches, identifzierbares Artefakt auf einem bestimmten Entwicklungsstand
- Revision à eine neue Version eines Artefaktes mit dem Zweck eine ältere abzulösen
- Baseline à ein Satz von Revisionen d.h. ein Snapshot der Konfiguration
- Release à eine getestete und freigegebene Baseline
Kriterien für ein Versionskontrollsystem ?
- zentrale vs. Verteilte System à bei verteilten Systemen wirken sich die klassischen Befehle nur auf das lokale Repo aus , mit zusätzlichen Commands werden Revisionen für andere zur Verfügung gestellt (clone, fetch (kopiert die Daten ins lokale Repo à wir durch ein Update dann verändert), pull (fetch/merge), push)
- optimistische und pessimsistische Lockverfahren: pessimistisch lockt bei der Bearbeitung, optimistisch lässt Option offen zur Bearbeitung à Konflikte können passieren (nimmt man in Kauf)
- Versionierung auf der Basis einer Datei, der Verzeichnisstruktur (FS) oder der Änderung (changeset)
- Transaktionsunterstützung (vorhanden oder nicht)
- Verschiedene Zugriffsprotokolle
- Integration in Webserver (vorhanden oder nicht)
die Vorteile eines automatisierten Buildprozess?
- Automatisierter Ablauf, keine Interaktion mehr
- Reproduzierbare Ergebnisse
- Lange Builds könne z.B. über Nacht laufen à Nightly
- Unabhängig von IDE
wie ist eine Dependency in Maven hinterlegt ?
<dependencyManagment>
<dependency>
<groupid>package name</groupid>
<artifactid>log4j-api</artifactid>
<version>2.10.0</version>
<scope>test</scope>
</dependency>
</dependencyManagment>
Was sind transitive Depencencies ?
Modul A --> Modul B --> Modul C
Modul A ist transitiv abhängig von C
Maven kann solche Konflikte erkennen und einfache können direkt behoben werden
Was funktionieren Snapshots ?
Version ist erneuerbar und noch nicht stabil
--> wir bei jedem Build wieder vom Repo aufgelöst und aktualisert
--> sind mit einem Timestamp versehen
vollständiges Konfigurationsmanagment beinhaltet ?
Betriebssystemkonfig und Netzwerkkonfiguration
Für was ist Konfigurationsmanagement ?
- Übersicht gewinnen, welche Versionen von welchen Configuration Items (Software) wo im Einstatz sind
- Nachvollziehbarkeit von Problemen
- Nicht mehr verwendetet Versionen müssen nicht weiter unterstützt werden
- Ermitteln welche Konfiguration lauffähig ist
- Ermöglichen kontrollierte Durchführung von Konfigurationsänderungen unter Sicherstellung von Integrität und Rückverfolgung
Was ist die Breite einer Schnittstelle ?
Java Interface: Anzahl Methodne (und Länge der Parameterliste)
In welcher Projektphase werden Reviews eingeplant ?
- Wichtig ist, dass man Zeit für Reviews von anfang an einplant.
- Versch. Reviewarten (Management, Technische-Reviews und Sprint Reviews)
Was ist ein Buildprozess?
- Maven definiert einen generalisierten Ablauf eines Buildprozesses –den so genannten «lifecycle» (Auszug, Vereinfacht):
- validate – Validiert die Projektdefinition.
- compile – Kompilation der Quellen.
- test – Ausführen der Unit-Tests.
- package – Packen der Distribution (JAR, EAR etc.)
- verify – Ausführen der Integrations-Tests.
- install – Deployment im lokalen Repository.
- deploy – Deployment im zentralen Repository.
- allgemein: der Weg von Quellartefakten zu Zielartefakten
Vorteil von Buildprozessen?
- automatisierter Ablauf sorgt für reproduzierbare Ergebnisse (Artefakt X kann aus einem bestimmten Stand erstellt werden, auch später noch)
- funktionieren plattformübergreifend, indem plattformspezifische Eigenheiten abstrahiert werden (z.B. Dateipfade)
- automatische Auflösung von Abhängigkeiten
- Wiederverwendung von bereits erstellten Zielartefakten (wurde nichts am Code verändert, muss das Modul nicht neu gebaut werden)
Was ist ein Buildserver?
- Serversoftware, welche einen automatisierten Build eines SWProjektes ausführt und die Resultate allen EntwicklerInnen im Team zur Verfügung stellt.
- Integriert Buildautomation, Versionskontrolle, Issue-Tracking, Projektmanagement-Tools, Kommunikationswerkzeuge, Statistiken und Visualisierungen etc.
Was sind Buildtools?
- Werkzeuge, die das Erstellen von (Binär-)Artefakten aufgrund von (Code-)Artefakten ermöglichen und erleichtern.
- dem Compiler (javac, gcc) übergeordnete Werkzeuge (ant/Maven, make)
- erlauben die Definition von Abhängigkeiten (Maven-Dependencies, Make-Targets)
- übernehmen Zusatzfunktionen wie Deployment, Testausführung, Validierung
- geben dem Anwender Feedback über Korrektheit, Probleme, Warnungen etc.
Philosophie und Grundlagen von Clean Code?
- Code muss von hoher Qualität sein, damit auch das Produkt längerfristig von hoher Qualität ist.
- Code, den man sich nicht zu ändern getraut, ist eine tickende Zeitbombe.
- Aspekte: Aussagekräftige Namen, sinnvolle Kommentare, sinnvolle Aufteilung in Funktionen/Methoden, saubere Fehlerbehandlung, Unit-Tests etc.
5S:
Organisation, Ordenlichkeit, Sauberkeit, Standardisierung, Disziplin
Für was nutzt man Code Coverage?
- Man kann beim Testing feststellen, wie viele Fälle man abdeckt und sogar Fehler finden (wurde eine Bedingung geprüft, ein Branch betreten etc.)
- Man kann mit der zeitlichen Veränderung der Coverage beispielsweise feststellen, ob sich ungetesteter Code anhäuft.
- Herausfinden, wie man mit möglichst wenig Testcode möglichst viel Produktivcode testet.
Welche Test Typen gibt es ?
Unittest, Integrationstest, Systemtest, Akzeptanztest
Reggresionstest --> werden immer wieder ausgeführt, egal welcher Typ
manuell oder automatisiert
Was macht man mit statischen Code Analysen ?
- Feststellen potentieller Fehler
- Verwendung uninitialisierter Variablen
- Mögliche Race-Conditions/inkonsistente Verwendung von synchronized
- Hinweise auf deprecated-Konstrukte
- Erteilen von Verbesserungsvorschlägen
- Vereinfachung logischer Ausdrücke
- Überführung von Codeabschnitten in Lambda-Expressions
- Hinweise auf Codestyle
- Gross- und Kleinschreibung von Bezeichnern
- Überprüfung des Codes gegen Formatting-Guidelines (Einrückung, Zeilenumbrüche)
- konsistente Verwendung von Tabs/Spaces
- Festhalten von Statistiken: Verbesserungen/Verschlechterungen verfolgen