Prog2 Theorie Flashcards
(96 cards)
Welche Vorteile bietet ein System zur Versionverwaltung?
Versionverwaltungen sind dafür da um koordinierte Zusammenarbeit in Projekten zu vereinfachen. Sie ermöglichen es Änderungen im Code nachzuverfolgen, jederzeit auf ältere Codeversionen zurückgreifen zu können und das teilen von Dateien mit anderen Entwicklern.
Was ist ein Git Repository?
Ein Git Repo speichert alle Dateien und Verzeichnisse eines Projektess sowie deren Historie. Es gibt ein lokales und ein remote (auf dem Server z.B. GitHub, GitLab etc.)
Welche Komponenten sind an einem Git Repository beteiligt?
- Working Copy (Arbeitsverzeichnis) Ist der aktuelle Zustand des Projektes den man sieht und bearbeitet
- Staging Area zwischengehaltener Bereich wo Änderungen gesammelt werden bevor man sie comittet
- Repository entählt alle Metadaten und die gesamte Historie
- Remote Repo Eine Kopie des Projekts die auf einem Server (GitHub, GitLab etc.) gespeichert ist und auf die andere zugreifen können
Wie interagieren die Komponenten in einem Git Repository untereinander?
Über Commands in der Console oder das GUI ?
Beschreiben Sie wichtige Git Kommandos und deren Auswirkung
git add - Verschiebt Änderungen in die Staging Area
git commit - verschiebt Datei in das lokale Repo
git log - zeigt die Historie an
git clone - erstellt eine kopie des repos
git push - pusht Dateien auf das remote Repo
git pull - pullt eine Kopie des remote repos auf das lokale (merge)
Was ist der Unterschied zwischen Git und GitLab?
Git ist ein verteiltes Versionskontrollsystem das lokal auf dem Computer läuft und Änderungen an Dateien verfolgt.
GitLab ist eine webbasierte Plattform die git Repository-Hosting und viele zusätzliche Funktionen zur Teamzusammenarbeit und Automatisierung bietet.
Was versteht man unter einem Merge und wann wird eine Merge benötigt?
Bei einem Merge werden Änderungen von einem Repo in das andere Repo integriert, womit das eine repo den Stand bekommt vom anderen repo.
Es ist üblich bevor man mit seiner täglichen Arbeit anfängt, zu fetchen und einen merge vom überliegenden branch durchzuführen, damit das eigene repo auf dem aktuellsten stand ist (änderungen vom team die in der zwischenzeit gepusht worden)
Was ist eine Exception?
Eine Ausnahme (Ereignis), die während der Ausführung des Programms auftritt und den normalen Programmablauf unterbricht
Wozu verwendet man Try/Catch Blöcke?
Zum reagieren auf Ausnahmesituationen. Sollte im überwachten Code (try) ein Fehler auftreten, fängt der catch Block den Fehler ab und gibt informationen darüber
Was ist der Unterschied zwischen geprüften und ungeprüften Ausnahmen (Checked vs Unchecked Exceptions)
Checked Exceptions werden vom Compiler noch vor kompilieren des Programms gemeldet und als fehler markiet das diese behandelt werden müssen
Unchecked Exception verhindern nicht das das programm kompiliert
!!!WICHTIG!!!
In beiden Fällen stürtzt das Programm ab wenn eine Exception nicht behandelt wird! Egal ob Checked oder Unchecked!
Checked Exceptions sollten verwendet werden, wenn der Aufrufer der Methode wahrscheinlich in der Lage ist, sich von der Ausnahme zu erholen oder sie sinnvoll zu behandeln.
Unchecked Exceptions sollten verwendet werden, wenn die Ausnahme auf einen Programmierfehler hinweist oder wenn es unwahrscheinlich ist, dass der Aufrufer sie sinnvoll behandeln kann.
Was ist ein Finally Block und wozu wird er typischerweise verwendet?
Ein Finally Block kann optional hinter catch block folgen und wird nach den catch blöcken IMMER ausgeführt. Er wird typischerweise für die freigabe von Ressourcen verwendet
Was sind die Vor- und Nachteile von zentralisiertem und lokalisiertem Exception Handling?
Zentralisiert: Exception Handling weit “oben” in der Anwendungslogik mit einer Reihe von catch Blöcken die alle möglichen Fehlerzustände abfangen
Vorteil: Exception Handling übersichtlich an einer Stelle zusammengefasst
Nachteil: Recovery erschwert wenn die Exception weit vertieft in einem Unterzweig ist
Lokalisiertes Eception Handling nahe an der Stelle in der Anwendungslogik, an der der Fehelr auftritt.
Vorteil: Erleichter das Recovery direkt in der Verarbeitungslogik
Nachteil: Kann Fehlerbehandlund umständlicher machen, da Error Handling über den Code verteilt ist
Was versteht man unter defensiver Programmierung?
Defensive Progammierung ist ein Ansatz um Programme möglichst robust und zuverlässig zu machen. Dabei wird versucht auf unerwartete und unglütige Eingaben oder Zustände in vorhinein passend zu reagieren um Robusheit zu gewährleisten
Was ist ein Breakpoint?
Ein Breakpoint ist ein Punkt den man im Programm an eine gewisse Stellt setzt an der man die Ausführung des Programms anhalten möchte um es Schritt für Schritt von diesem Punkt aus weiter auszuführen (Debugging)
Erläutern Sie die Softwareteststufen “Komponententest”, “Integrationstest” und “Systemtest” und Grenzen die Begriffe gegeneinander ab.
Komponententest - Definition:
Der Komponententest, auch als Unit Test bekannt, ist die niedrigste Teststufe und konzentriert sich auf das Testen einzelner Softwarekomponenten oder Module. Eine Komponente ist die kleinste testbare Einheit in der Software, z. B. eine einzelne Funktion oder Methode.
Integrationstest - Definition:
Der Integrationstest folgt auf den Komponententest und befasst sich mit dem Zusammenspiel mehrerer Komponenten. Hierbei wird überprüft, ob die Module korrekt zusammenarbeiten, insbesondere an den Schnittstellen zwischen den Modulen.
Systemtest - Definition:
Der Systemtest ist die umfassendste Teststufe und prüft das gesamte integrierte System als Ganzes. Er wird durchgeführt, nachdem alle Module integriert und die Integrationstests abgeschlossen sind.
Abgrenzung:
Komponententest vs. Integrationstest:
Komponententest: Testet einzelne Module isoliert.
Integrationstest: Testet das Zusammenspiel mehrerer Module.
Integrationstest vs. Systemtest:
Integrationstest: Fokussiert auf die Interaktion und Schnittstellen zwischen Modulen.
Systemtest: Fokussiert auf das gesamte integrierte System und prüft die Erfüllung der gesamten Systemanforderungen.
Komponententest vs. Systemtest:
Komponententest: Kleinste Testeinheit, überprüft einzelne Module auf ihre korrekte Funktion.
Systemtest: Umfassendste Teststufe, überprüft das gesamte System auf Erfüllung aller Anforderungen.
Was versteht man unter Regressionstests?
Die Test die man durchführt, nachdem man an einer Stelle des Programms eine Änderung gemacht hat, nennt man Regressionstests. Sie dienen dazu Fehler durch die Änderung an unvorhergesehenen Stellen zu entdecken.
Erläutern Sie das Grundprinzip von Unit Testing.
Das Grundprinzip von Unit Testing (Komponententest) besteht darin, die kleinsten testbaren Einheiten einer Software, die sogenannten “Units” oder “Komponenten”, isoliert zu testen, um sicherzustellen, dass sie korrekt funktionieren. Diese Einheiten sind typischerweise einzelne Funktionen, Methoden oder Klassen.
Erläutern Sie den Unterschied und die Verwendungsweise der Annotationen @BeforeEach und @BeforeAll.
BeforeEach:
Wird vor jedem Test ausgeführt, verwendet zur Vorbereitung des Ausgangszustands (z. B. Instanzen erstellen, Felder initialisieren)
BeforeAll:
Wird einmalig vor allen Tests durchgeführt, verwendet für aufwändige Initialisierungen (z. B. Herstellen von Datenbankverbindungen)
Was versteht man unter testgetriebener Entwicklung (TDD)?
TDD ist eine Methode der agilen Softwareentwicklung. Hierbei werden Tests konsequent VOR der zu testenden Komponente geschrieben
Welches Interface beschreibt eine Collection, die keine Duplikat erlaubt?
Set
Welches Interface beschreibt eine geordnete Collection, die Duplikate enthalten kann?
List
Welches Interface beschreibt eine Zuordnung von Schlüsselwörtern (Key) zu Werten (Value)?
Map
Beschreiben Sie drei verschiedene Wege, um über die Elemente einer List zu iterieren.
for-schleife
for-each-schleife
iterator
Beschreiben Sie wichtige Methoden aus dem Interface Queue und erläutern Sie das FIFO-Prinzip.
add: fügt element am ende der schlange hinzu
offer: fügt element am ende der schlang hinzu, gib jedoch false zurück wenn es wegen Kapazitätsbeschränkung nicht hinzugefügt werden kann
remove: entfernt das element am kopf der schlange
element: ruft das element am kopf der schlange auf
FIFO-First In First Out
Das zuerst eingefügte Element ist auch das zuerst entfernte Element.