Continuous Integration, Continuous Delivery und Deployment Flashcards
(70 cards)
Was sind die Herausforderungen bei CI?
- Anfangs oftmals unterschiedliche(s) Sprache, Verständnis, Zielbilder
- Kunden/Anwender wissen nicht, was sie eigentlich wollen
- Anforderungen und Prioritäten können widersprüchlich sein
- Änderungen im zeitlichen Verlauf
- Anforderungen und Erwartungen änder sich
- Rahmenbedingungen ändern sich
- Zusammensetzung der Beteiligten (Stakeholder) änder sich
Was ist das Problem, wenn man Anwender fragt, was sie benötigen?
Siehe Abbildung.

Was ist der Unterschied zwischen Agiler Software Entwicklung und Plan Driven Entwicklung, bezogen auf die Produktsichtbarkeit und die Entwicklungsdauer?
- Agile Software Entwicklung
- man sieht recht früh das Produkt
- man kann in regelmäßigen Abständen den Fortschritt erkennen
- man kann, falls notwendig, Änderungen mit einbringen
- Plan Driven Entwicklung
- bei Projektbeginn werden Punkte geklärt und dann versucht alles umzusetzen
- man sieht das Produkt erst am Ende der Entwicklung wieder
- Änderungen dann nur noch schwer durchzuführen
Beschreiben Sie ein Inkrementelles Vorgehen bei der Software Entwicklung
- beschreibt Vorgehen der kontinuierlichen Verbesserung
- häufig kleine oder kleinse Schritte
- Agile SWE basiert darauf
- Endzustand steht nicht gleich fest
- Projekt wächst organisch
Beschreiben Sie ein Iteratives Vorgehen bei Software Entwicklung
- Strategie zur Überarbeitungsplanung
- Zeit für laufende Revision und Verbesserung
- Ergebnis der Iteration wird auf notwendige Änderungen untersucht
- Überarbeitung soll System schrittweise entwickeln
- Entwickler sollen Erfahrungen unmittelbar nutzen können
Was ist ein MVP
- MVP ist Minimum Viable Product
- MVP ist ein das Minimum eines Produktes, welches die Grundvoraussetzung erfüllt und nicht mehr
- Darauf aufbauend kann das nächste Inkrement aufbauen
Was bedeutet Minimum vialbe
und welche Stufen gibt es?
- Earliest testable/usable/lovable Product
- Earliest Testable Product
- Earliest Usable Product
- Earliest Lovable Product
- Aim for the Clouds, but deliver in Small Steps
Welche Countinuous Phasen gibt es?
- Continuous Adaption
- Continuous Deployment
- Continuous Delivery
- Continuous Testing
- Continuous Integration
Was sind die Treiber für die Continuous Initiativen?
- Qualität und Effizienz der Prozesse und Werkzeuge
- (Das beste Software Engineering, die beste Software-Architektur und die beste Code-Qualität nützen am Ende nichts, wenn beim Deployment Artefakte fehlen oder aufgrund inkonsistenter Quellen nicht zusammenpassen und aufgrund dessen das entwickelte System fehlerhaft bis schlimmstenfalls gar nicht lauffähig ist.)
- Frühe und regelmäßige Lieferungen als Erfolgsfaktor
- (Ergänzend zu den eigentlich schon immer bestehenden, klassischen Herausforderungen bei Softwareentwicklungsprojekten ändern sich in der heutigen Zeit immer schneller die Rahmenbedingungen wie Technologie, Märkte und Wettbewerber.)
Warum ist Qualität und Effizienz der Prozesse und Werkzeuge so wichtig??
- Entwickler melden “done” in ihrer eigenen, isolierten Entwicklungsumgebung
- Release besteht aber aus Änderungen mehrerer Entwickler
- Änderungen vielleicht lokal compilier- oder buildbar
- im Gesamtsystem können Probleme auftreten
Welche Probleme können auf dem Weg zum Release auftreten?
- die bereitgestellten Änderungen eines Entwicklers führen in einer anderen Umgebung
- zu Compile-/Build-Fehlern
- zu Laufzeitfehlern
z. B., weil neue oder aktualisierte Dateien nicht zur Verfügung gestellt wurden, falsche Versionsstände verwendet wurden, bereits neuere Artefakte bereitgestellt wurden.
- die Summe der Änderungen mehrerer Entwickler führen in einer anderen Umgebung
- zu Compile-/Build-Fehlern
- zu Laufzeitfehlern
weil die Kombination der Änderungen zu einem inkonsistenten Stand führt.
Was wird erreicht, wenn Prozessschritte automatisiert werden?
- robuste Prozesse mit geringerer Fehleranfälligkeit
- Reduktion von lokalen Wissensinseln/Spezialwissen
- frühes Feedback und schnelle Erkenntnisgewinne.
Was bedeutet Lean?
Und wie lauten die Prinzipien von Lean?
Lean bedeutet, Kunden den größtmöglichen Wert zu schaffen und dabei Verschwendung zu vermeiden und die Fähigkeiten der Mitarbeiter zu nutzen.
- Definiere Wert aus Kundensicht
- Identifiziere den Wertstrom
- Bringe die Arbeit in Fluss (Flow)
- Erzeuge den Sog der Arbeit (Pull)
- Strebe stets nach Perfektion
Was bedeutet Agile?
Und was sind die Prinzipien von Agile?
Agilität bietet schnelle Reaktionsfähigkeit in einer komplexen Welt.
- Ermächtigung und Selbstorganisation
- Frühe und regelmäßige Lieferungen
- Überprüfung und Anpassung
- Transparenz
- Nutzung eines Takts
Was sind die Gemeinsamkeiten der Ansätze von Lean-Management und der Agilen Bewegung?
- Stelle deinen Kunden in den Vordergrund, denn er ist ausschlaggebend für die Definition des Wertes des Produkts.
- Liefere früh und regelmäßig, damit der Kunde stets zeitnah darüber Feedback geben kann,
- ob die Annahmen stimmen,
- ob die Anfoderungen stimmen,
- ob die Prioritäten stimmen,
- ob wirklich mehr Wert entsteht
und damit ein kontinuierlicher Fluss entsteht.
- Lerne und verbessere dich kontinuierlich, denn die Geschwindigkeit (und damit verbunden die Reaktionsfähigkeit) bei hoher Qualität sind ein entscheidender Wettbewerbsfaktor.
Welche Werkzeuge und Systeme gibt es bei der Unterstützung von Continuous Integration?
- Zentrales Source-Code Repository
- Alle Entwickler bringen ihre Änderungen regelmäßig und zeitnah ein (Check-In, commit)
- Jede Integration wird durch einen automatisierten Build und Test auf unabhängigen Build-/Test-Maschinen verifiziert, um schnelles Feedback zum integrierten Gesamtstand zu ermöglichen
- Nach dem Bereitstellen des Verifizierungsergebnisses wird bei Problemen unmittelbar reagiert und diese durch den Entwickler/das Team behoben
Was ist das Resultat von Continuous Integration?
- keine Entwicklung über längeren Zeitraum
- sondern alle Änderungen unmittelbar integrieren
- regelmäßig Kontext vom Gesamtsystem und angelaufenen Änderungen überprüfen
Welche Fragen können durch das frühe und kontinuierliche Integrieren, das automatisierte Bauen und das automatisierte Testen frühzeitig beantwortet werden?
- Ist mein Code, der ggf. mit Weiterentwicklungen von anderen Entwicklern zusammengeführt wurde, in einer „sauberen“ Umgebung überhaupt noch übersetzbar?
- Wie hat sich die Code-Qualität entwickelt und werden die Coding-Standards eingehalten (statische Quellcode-Analyse)?
- Wie hat sich die Testabdeckung durch automatisierte Tests entwickelt?
- Laufen noch alle automatisierten Tests fehlerfrei durch?
- Wirken sich die Änderungen negativ auf das Gesamtsystem aus?
- Werden die nicht-funktionalen Anforderungen noch erfüllt (bspw. Performance)?
Continuous Integration.
Je früher das entsprechende Feedback kommt, desto
- schneller lässt es sich der eigentlichen Änderung/Ursache zuordnen,
- schneller und aufwandsärmer lässt sich die Ursache beheben und damit das Verdecken weiterer sich einschleichender Probleme vermeiden,
- schneller kann man aus dem Feedback lernen und bei der weiteren Entwicklung berücksichtigen.
Welchen typischen Risiken können mit Continuous Integration begegnet werden?
- Nicht auslieferungsfähig (bzw. deploybare) Software
- Spätes Auffinden von Problemen und Fehlern
- Geringe Software-Qualität
- Unklarer, intransparenter Projektstatus
Was ist der Mehrwert von Continuous Integration?
- Senken von Risiken
- Senken von manuellen Aufwänden
- Erhöhen von Software-Qualität
- Jederzeitige Verfügbarkeit von lauffähiger Software
- Jederzeitige Transparenz über Projektstatus
- Höheres Vertrauen im Entwicklungsteam und daraus resultierend:
Mut und höhere Entwicklungsgeschwindigkeit
Was sind die Ziele von Konfigurationsmanagement?
- Änderungen kontrollieren
- Qualität sicherstellen
- Transparenz verbessern
- Produktivität sicherstellen
Was sind die Ziele der Nutzung eines Quellcodeverwaltungssystems?
- Jede Version jeder Datei, die hinzugefügt wurde mit historischen Daten abzuspeichern und auch zugänglich zu machen. Pro Änderung wird die Information hinterlegt, welche Dateien durch wen hinzugefügt, geändert oder gelöscht wurden und aus welchem Grund dies erfolgte.
- Solche Systeme erlauben die Zusammenarbeit von mehreren Entwicklern, auch über verteilete Standorte hinweg.
Je nach System werden unterschiedliche Funktionalitäten und Workflows bspw. zum Stempeln von bestimmten Ereignissen, für die Parallelentwicklung via Branches oder Reviews zur Verfügung gestellt.
Neben den Quellcodes gibt es noch viele Artefakte, die relevant für die Erstellung und Lauffähigkeit einer Software sind, die oftmals aber nicht mit versioniert werden.
Nennen Sie Beispiele hierfür.
- Anforderungen (bspw. Use-Case-Diagramme, Dokumente)
- Architektur- und Designdokumente/-modelle
- Build-, Datenbank-, Deployment-Skripte
- Konfigurationsdateien
- Schnittstellen und Bibliotheken
- Testspezifikationen, Test-Code und Testdaten
- Tools
- Konfigurationen für die Test- und Produktionsumgebung (bspw. DNS, Firewall, …)