Technik und Werkzeuge
Was sind die Unterschiede zwischen zentralen/verteilten Source Code Managern SCM? Nennen Sie jeweils Vor- und Nachteile
Verteilt (Dezentral)
auf mehreren Rechnern verteilt, dadurch sicherer
es gibt meistens eine „Main-Repository“ mit dem sich die Clients regelmäßig synchronisieren (pull, push, fetch, pull-request, etc.)
lokal arbeiten möglich.
Repository geklont und lokal auf jedem Client gespeichert, alle Operationen können lokal ausgeführt werden.
große Menge an Daten beim klonen auf dem Client gespeichert
schnelleres commiten, merge conflicts bei push oder pull
Arbeitsablauf Git
- Kopie des Haupt-Repository (klonen) → nur 1x im gesamten Arbeitsablauf
- Lokale Änderungen
- Lokale Commits → keine konflikte, deshalb lokal commiten oft möglich
-
Merge → konflikte lösen
Push
Pull Request (requesting main branch to pull)
Zentral
source code nur auf einem Rechner mit dem ständig über einem Server abgeglichen wird.
Der Server ist ein „Single Point of Failure“ und ein Flaschenhals.
Operationen dauern lange (hohe Auslastung, Netzwerkverkehr).
arbeit lokal nicht möglich
clients brauchen keine lokalen versionen, brauchen weniger Speicherplatz
commiten langsamer da merge conflicts von commiter behoben werden müssen
Arbeitsablauf Subversion SVN
- Update
- Lokale Änderungen
-
Update → Man kann hier stecken bleiben und ständig updaten müssen
Änderungen remote und lokal
Merge → konflikte lokal lösen
- Commit
Beschreiben Sie Inversion of Control (IOC)
Umkehrung des Kontrollflusses mit einem Hook .
Viele Varianten.
Hollywood Prinzip: "Dont call us, well call you"
Dependency Injection DI
Abhängigkeiten werden von einem Container verwaltet, die Komponenten wissen nichts darüber → Die Abhängigkeiten werden injiziert.
Eine der vielen Arten von IoC.
Konzept:
Die Verantwortung für das Erzeugen und Initialisieren von Objekten wird an eine zentrale Stelle (z.B. eine Klasse) delegiert.
Von der zentralen Stelle kann man die Abhängigkeiten zwischen den Objekten leichter überblicken und steuern.
Implementierung:
Eine Komponente wird über einem Pointer / einer Referenz aufgerufen die urprünglich nicht initialisiert ist.
Kann mit Konstruktor, Setter, Annotation initialisiert werden.
Vorteile:
- Hohe Wiederverwendbarkeit
- Einfaches Austauschen einer Implementierung
- Verwalten von verschiedenen Konfigurationen (dev vs. prod)
- Automatisiertes „verdrahten“, weniger Boilerplate-Code benötigt.
- Verteilung von Aufgaben
zB in Java Spring-Framework benutzt
Was sind die Aufgaben eines Sourcecode Management Systems (SCM)? Beschreiben Sie den Arbeitsablauf, wie bei verteilten SCM Systemen mit Konflikten umgegangen wird!
- parallele Projektentwicklung auf mehreren Zweigen
- transparente Änderungen
- nachvollziehbare Entwicklungsgeschichte
- Zugriff auf ältere Versionen
Arbeitsablauf Git
- Kopie des Haupt-Repository (klonen) → nur 1x im gesamten Arbeitsablauf
- Lokale Änderungen
- Lokale Commits → keine konflikte, deshalb lokal commiten oft möglich
-
Merge → konflikte lösen
Push
Pull Request (requesting main branch to pull)
Arbeitsablauf Subversion SVN
- Update
- Lokale Änderungen
-
Update → Man kann hier stecken bleiben und ständig updaten müssen
Änderungen remote und lokal
Merge → konflikte lokal lösen
- Commit
Was sind typische Herausforderungen bei global verteilten Entwicklungsteams? Welche Art von Kommunikation kommt hier hauptsächlich zum Einsatz? Nennen Sie hierfür vier verschiedene Beispiele.
- Große geographische distanzen → Kein Face-2-Face, Austauschen von Handzeichnungen erschwert
- Verschiedene Arbeitszeiten
- Verschiedene Zeitzonen
=> asynchrone Kommunikation
- Wiki, CMS
- Mailingliste/Forum
- Issue-Tracker