Software Engineering 2 - Klausur HANNA NUR DIESES LERNEN BITTE Flashcards
Was ist ein Milestone?
- Ereignis besonderer Bedeutung (Abnahmen/Zwischenabnahmen/Prüfungen)
- Vorliegen von Zwischenergebnissen
- Entscheidungen weiteren Projektverlauf
Wann ist ein Milestone genau erreicht?
- Definition der Ergebnisse müssen vorliegen
- Ergebnisse erreichen Qualität
- Eine Instanz entscheidet ob Milestone erreicht ist
- Vorgegebene Deadline
Was ist die Idee hinter Git?
-Dezentralisierter Ansatz zur Bearbeitung an gleichen Daten
Wie war gemeinsames Arbeiten an Datensätzen vor Git und SVN nur möglich?
- Lineares Arbeiten an Daten
- Eine Datei wird gesperrt, sobald eine Person daran arbeitet
- Datei wurde verändert und auf den Server comitted
Wie geschieht gemeinsames Arbeiten auf Dateien mit SVN?
- Nicht linear
- Zentralisiert
- Beide holen sich eine Working Version
- Beide editieren gleichzeitig
- Beide commiten
- Merge Conflict muss gelöst werden und richtiges Ergebnis comitted werden
Wie geschieht ein zentralisierter Zugriff/Workflow auf Daten?
- Es gibt ein Repository
- Auf dieses können alle Mitglieder Commiten, mergen, checkouten
- Es gibt Tags, welche Versionsstände kennzeichnen
Wie geschieht ein dezentralisierter Zugriff/Workflow auf Daten?
-Durch Branches auf einem Repository
Wer erfand Git und mit welchen Zielen?
- Von Linus Torvalds entwickelt
- Ziele: Schnelligkeit, Massiv verteilt, einfaches Design und schnelles Branching
- Dezentral!
Welche lokalen Operationen gibt es in Git?
Working Directory | Staging Area | Git Directory(Repo)
|—–commit————
Welche Remote Operationen gibt es in Git?
- push (commits hochladen in Remote Repo)
- clone(herunterladen in lokales Repo)
- pull (bringt die lokalen branches auf den stand der remote branches=
- fetch (updated die remote tracking branches, ohne die lokalen branches zu verändern)
Erkläre folgende Git Commands:
- git init
- git add name.txt
- git commit -m “first hallo”
- git status
- git log
- git tag v1 -edit hallo.txt git checkout master
- git checkout “hallo.txt” -git remote add origin https://gitlab.com
- git push -u origin master
- git pull origin master
- git branch iss53 git checkout iss53 -edit Hallo.txt git commit -a -m “Änderung”
- git checkout master git checkout -b hotfix
- git checkout master git merge hotfix
- git branch -d hotfix
- git checkout iss53 edit Hallot.txt git commit -a -m “feature done”
- git checkout master git merge iss53
- git branch -d iss53 -git clone -edit Hallo.txt
- git fetch origin
- git pull
Erkläre folgende Git Commands:
- git init (Lokale Git Repo erstellen)
- git add name.txt (Datei Stagen)
- git commit -m “first hallo” (Datei auf das lokale Repo schreiben)
- git status (status des Staging Bereiches angeben)
- git log (Log Dateien ausgeben)
- git tag v1 (Letzte Version mit Tags versehen)
- edit hallo.txt git checkout master (Datei verändern und Veränderungen rückgängig machen)
- git checkout “hallo.txt”
- git remote add origin https://gitlab.com (Remote Repo angeben)
- git push -u origin master (Aufs entfernte Repo schreiben)
- git pull origin master (Vom entfernten Repo holen)
- git branch iss53 git checkout iss53 (Developer Branch erzeugen und wechseln)
- edit Hallo.txt git commit -a -m “Änderung” (Datei editieren und comitten)
- git checkout master git checkout -b hotfix (Weiteren Branch eröffnen)
- git checkout master git merge hotfix (Hotfix in master mergen)
- git branch -d hotfix (Hotfix Branch löschen)
- git checkout iss53 edit Hallot.txt git commit -a -m “feature done” (Weiter arbeiten auf issue53)
- git checkout master git merge iss53 (issue 53 mergen)
- git branch -d iss53 (Nach dem mergen den Branch löschen und Issue im Issuesystem)
- git clone -edit Hallo.txt (Lokal auf dem Master arbeiten)
- git fetch origin (Mit anderen Entwicklungen auf dem Remote Master abgleichen)
- git pull (Mit anderen Entwicklungen auf dem Remote Master abgleichen und lokal mergen gitpull = git fetch + git merge)
Erklären Sie Driessens Branching Modell(Git-flow)!
- Master Branch enthält eine stabile Version
- Entwickelt wird auf Developer Branch
- Nur stabile und auslieferbare Entwicklungen werden auf den Master gemerged
- Masterbranch enhält Auslieferungsversionen die mit Tags/Labels versehen worden sind
- Feature Branch wird auf lauffähigen Versionen erzeugt und dort entwickelt
- Nach dem Entwickeln werden die Änderungen der anderen Entwickler gemerged
- Stabile Versionen werden einmal wöchentlich auf den Developer Branch gemerged, gelabelt und ein Regressionstest gemacht
- Qualitätssicherung in der Folgewoche möglich
- Jedes Feature bekommt einen eigenen Feature Branch Ziel: Versionieren einzelner Features und Fehler früh finden durch wöchtenliches integrieren
- Hot fix Branch beinhaltet dringende Fehler zum sofortigen fixxen (Branch geht von Master ab)
- Merge auf Developer und Master (1.2 auf 1.2.1)
- Release Branch wird sehr lange getestet -Entwicklungen gehen für zukünftige Releases parallel im Develope weiter -Fehler im Releasebranch wrden auf den Developerbranch gemerged, damit sie nicht in Zukunft im Release Branch sind
Was ist ein Git-Flow?
- Ein Modell mit Konventionen zum Branchen.
- Git wird an sich nicht erweitert, sondern nur das Vorgehen beim Branchen.
Welche Git-Flows gibt es noch?
- Integration Manager Workflow (Projektbetreiber push alleine in ein blessed Repository)
- Diktator and Leutnant Workflow (Alle Synchronisieren mit dem blessed Repository und pushen zu Leutnants, Leutnants pushen zu Diktator)
Wofür gibt es Git?
- Zum Vermeiden von Chaos bei Zusammenarbeiten in Projekten
- Verfolgen von Änderungen
- Markieren von wichtigen Versionen
- Dezentraler Ansatz
- Driessens Branching Modell (git-flow) als Strategie für Branches
- Workflow für die verteilte Arbeit mit mehreren Repos
Was ist ein Issue-Tracking System?
- Datenbank Software zum Verwalten von Tickets (Fehlerfällen, Änderungen an einem Produkt)
- Erfassung der Fehler
- Zuordnen eines Bearbeiters
- Überwachung der Bearbeitung(Dauer und Stand)
- Statistische Auswertung
Welche Arten von Workflows unterstützt Git?
- Zentralisierten Workflow
- Integration Manager Workflow(distributiert)
- Diktator und Leutnant Workflow(distributiert)
Was ist Continuous Integration?
- Eine der 12 Praktiken des Extreme Programming(Agile)
- Steht für regelmäßige Integration von Code in die Mainline(Master/Developer/Releasebranch)
- Die Mainline sollte fehlerfrei gehalten werden
Was sind die Ziele bei Continuous Integration?
- Fehler schnell finden
- Fehler schnell beheben
- Insgesamt weniger Fehler im System (Denn je mehr Fehler im System, desto schwerer ist das beheben einzelner und Broken-Windows-Theorie)
Was sind die Vorraussetzungen für Continuous Integration an die Technik?
- Ein Versionierungssystem (Git, SVN)
- Automatisierte Builds
- Automatisierte Testdurchführung(Junit)
- Schnelle Builds
Was sind die Vorraussetzungen für Continuous Integration an den Entwicklungsprozess?
- Mainline immer fehlerfrei halten
- Selbsttestenden Code schreiben
- Aufteilung großer Aufgaben (Regelmäßiges Committen, ein mal am Tag)
- Kommunikationsbereitschaft der Entwickler
Wie funktioniert Continuous Integration?
- Laden einer lokalen Kopie des Codes
- Programmieren eines kleinen Features
- Lokales Bauen des Systems und Durchführen der Testfälle für das System
- Update auf die aktuellste Version mit Pull (Zwischenzeitliche Änderungen könnten eingecheckt sein)
- Beheben aller Konflikte und erneutes Durchführen der Testfälle
- Einchecken des integrierten Codes (stage, commit, push)
- Integrationsserver baut Mainline und führt Testfälle durch
- Integrationsserver macht gebautes System zugänglich
- Integrationsserver benachrichtigt Comitter über Erfolg des Builds
Was sind gängige CI-Produkte?
- Gitlab CI (.yml datei enthält die task pipeline)
- Jenkins
- Atlassian Bamboo
- JetBrains TeamCity
Was sind denkbare Probleme bei der Nutzung von Continuous Integration?
- Fehlerfreiheit der Mainline nicht sichergestellt:
- >Lösung: Nicht direkt auf die Mainline comitten, sondern Git-Flow/Branch-Strategien nutzen
- Dezentrale Ansätze wie Git nutzen
- Fehlerhafte Builds zwischencomitten und CI-Server prüft bevor es final comitted wird Build dauert zu lange:
- >Lösung: -Staged Buids (Build Pipeline)
- Projekt sinvoll gliedern (Komponenten)
- Nicht alle Tests immer durchführen
- Performancetests nur ab und zu machen










