Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Kontinuierliche Integration

Das Ziel der kontinuierlichen Integration ist die Steigerung der Softwarequalität. Typische Aktionen sind das Übersetzen und Linken der Anwendungsteile, …

Inhalt5 Abschnitte
  1. 1. Definition und Ablauf
  2. 2. Technische und organisatorische Grundlagen
  3. 3. Tests, Umgebung und Bereitstellung
  4. 4. Nutzen und Einschränkung
  5. 5. Werkzeuge

Definition und Ablauf

Kontinuierliche Integration, kurz CI (englisch continuous integration), bezeichnet in der Softwareentwicklung das fortlaufende Zusammenfügen von Komponenten zu einer Anwendung. Ihr Ziel ist eine höhere Softwarequalität. Sobald jemand Änderungen in die Versionsverwaltung eincheckt, wird der Integrationsvorgang automatisch ausgelöst.

Typischerweise übersetzt und verknüpft das System die Anwendungsteile und baut das Gesamtsystem neu. Zusätzlich führt es automatisierte Tests aus und erstellt Softwaremetriken, also messbare Kennzahlen zur Softwarequalität. Grundsätzlich können auch andere Operationen durchgeführt werden, die aus dem Quellcode abgeleitete Informationen erzeugen.

Eine Vorstufe ist der Nightly Build, bei dem die Software nachts automatisch erstellt wird. CI und Nightly Build können kombiniert werden. In DevOps heißt die Automatisierung auch Pipeline, weil ihre einzelnen Schritte nacheinander abgearbeitet werden. Entwickler erhalten dadurch schon nach wenigen Minuten eine Rückmeldung darüber, ob die festgelegten Qualitätsanforderungen erfüllt sind.

Eine Weiterentwicklung ist Continuous Delivery (CD): Dabei wird in bestimmten Zeitabständen oder nach Erreichen einer bestimmten Qualitätsmetrik eine neue Softwareversion ausgeliefert.

Technische und organisatorische Grundlagen

Für eine erfolgreiche kontinuierliche Integration gelten mehrere Grundsätze:

• Gemeinsame Codebasis: Alle Entwickler integrieren ihre Änderungen fortlaufend in eine gemeinsame Versionsverwaltung.

• Automatisierte Übersetzung: Jede Integration durchläuft einheitlich festgelegte Prüfungen, beispielsweise statische Code-Überprüfungen. Dafür muss der Übersetzungs- und Build-Prozess automatisiert sein. Separate Testumgebungen machen die Ergebnisse von den Arbeitsumgebungen der Entwickler unabhängig und können gezielt für kurze Testlaufzeiten eingerichtet werden.

• Kontinuierliche Testentwicklung: Zu jeder Änderung sollte möglichst gleichzeitig ein passender Test entstehen, etwa durch testgetriebene Entwicklung. Kontrollflussorientierte Testverfahren und die Code Coverage Analysis messen, welche Teile des Codes durch Tests abgedeckt werden.

• Häufige Integration: Entwickler sollen Änderungen möglichst oft in die gemeinsame Codebasis übernehmen. Kurze Abstände senken das Risiko fehlgeschlagener Integrationen und sichern den Arbeitsfortschritt in der gemeinsamen Codebasis.

• Integration in den Hauptbranch: Änderungen werden in den Hauptzweig des Produkts übernommen. Dort startet automatisch ein Build- und Testzyklus, der kontinuierliche Integrationsbuild.

Tests, Umgebung und Bereitstellung

Die Testzyklen vor einer Integration sollen kurz bleiben, damit häufige Integrationen möglich sind. Höhere Qualitätsanforderungen verlängern jedoch die Tests. Deshalb muss sorgfältig entschieden werden, welche Prüfungen vor der Integration notwendig sind; weniger wichtige Tests können erst danach ausgeführt werden.

Änderungen sollten in einem Abbild der tatsächlichen Produktionsumgebung getestet werden. CI kann auf jedem Rechner mit Zugriff auf den Quellcode stattfinden und gleichzeitig auf verschiedenen Systemen, beispielsweise unterschiedlichen Betriebssystemen, ausgeführt werden.

Die Ergebnisse müssen auch für Nicht-Entwickler einfach zugänglich sein. Tester können etwa auf das im Testsystem bereitgestellte Produkt zugreifen, Qualitätsverantwortliche auf Qualitätskennzahlen, Release Manager auf ein fertig paketiertes Abbild. Auch Dokumentationen können bereitgestellt werden.

Ein automatisiertes Reporting informiert leicht zugänglich darüber, wann die letzte erfolgreiche Integration stattfand, welche Änderungen seit der letzten Auslieferung hinzugekommen sind und welche Qualität die aktuelle Version besitzt. Eine automatisierte Softwareverteilung soll außerdem ermöglichen, jede Version einfach in die Produktionsumgebung oder deren Abbild zu übertragen.

Nutzen und Einschränkung

Kontinuierliche Integration entdeckt und behebt Integrationsprobleme fortlaufend, statt sie erst kurz vor einem Meilenstein sichtbar werden zu lassen. Nicht zusammenpassende Komponenten werden früh erkannt. Sofort ausgeführte Unittests, also Tests einzelner Programmeinheiten, können zeitnah zeigen, ob beispielsweise ein bestimmter Commit einen Fehler eingeführt hat.

Ein lauffähiger Stand bleibt ständig für Demonstrationen, Tests oder Vertriebszwecke verfügbar. Die unmittelbare Reaktion auf fehlerhaften oder unvollständigen Code fördert einen verantwortungsvolleren Umgang mit Änderungen und kürzere Check-in-Abstände. Das ist wichtig, weil der Aufwand für das Zusammenführen von Änderungen wächst, je länger die Integration aufgeschoben wird.

Als Nachteil nennt der Artikel, dass traditionelle Meilensteine im herkömmlichen Sinne entfallen.

Werkzeuge

Für kontinuierliche Integration gibt es verschiedene Server, Frameworks und Plattformen. Beispiele sind:

• Bamboo, ein kommerzieller CI-Server von Atlassian. • Rational Build Forge, ein Framework der IBM-Tochter Rational Software zur Automatisierung von Build- und Release-Prozessen. • Continuum, ein Subprojekt von Apache Maven mit Unterstützung für Maven 1, Maven 2, Ant und Shell-Skripte. • CruiseControl, ein Java-basiertes Framework für kontinuierliche Erstellungsprozesse, mit Varianten für das .Net-Framework und Ruby. • GitLab mit MIT-Lizenz und Unterstützung für Git und Shell-Skripte. • Hudson mit MIT-Lizenz, in Java geschrieben und in Servlet-Containern ausführbar; es unterstützt CVS, Subversion, Ant, Maven und Shell-Skripte. • Jenkins, ein Fork von Hudson mit MIT-Lizenz. Es ist in Java geschrieben, läuft eigenständig oder in Servlet-Containern und unterstützt unter anderem CVS, Apache Subversion, Git, ClearCase, Ant, Maven, Perforce und Shell-Skripte. • Team Foundation Server, eine Plattform für gemeinsame Softwareprojekte auf Basis von Microsoft SQL Server und Windows SharePoint Services. • Teamcity von JetBrains, ein webbasiertes Werkzeug, das mit IntelliJ IDEA, Eclipse und Microsoft Visual Studio zusammenarbeitet. • Travis CI, ein gehostetes und verteiltes Werkzeug für GitHub-Projekte.

Lernvideos zu Kontinuierliche Integration

Weiterlesen

Softwaretechnik ... Agile Softwareentwicklung. Die Softwaretechnik umfasst den gesamten Prozess von der Identifizierung des Bedarfs bis hin zur Inbetriebnahme einer konkreten … Softwarequalität „Unter Softwarequalität versteht man die Gesamtheit der Merkmale und Merkmalswerte eines Softwareprodukts, die sich auf dessen Eignung beziehen, … Compiler Ein Übersetzer zur Übertragung von Assembler-Quellprogrammen in Maschinensprache wird als Assembler oder Assemblierer bezeichnet. Geschichte. Bearbeiten. Versionsverwaltung Eine Versionsverwaltung ist ein System, das zur Erfassung von Änderungen an Dokumenten oder Dateien verwendet wird. Alle Versionen werden in einem Archiv … Statische Code-Analyse Statische Code-Analyse oder kurz statische Analyse ist ein statisches Software-Testverfahren, das zur Übersetzungszeit durchgeführt wird. Testgetriebene Entwicklung Das Refactoring, also das Aufräumen im Code, führt zu weniger Fehlern; weil man dabei in kleinen Schritten vorgeht und stets entlang bestandener Tests … Modultest Ein Modultest (auch von englisch unit test als Unittest oder als Komponententest bezeichnet) ist ein Softwaretest, mit dem einzelne, abgrenzbare Teile von … Java (Programmiersprache) Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems, welches 2010 von Oracle übernommen wurde. Git Git [ɡɪt] ist eine freie Software zur verteilten Versionsverwaltung von Dateien, die durch Linus Torvalds initiiert wurde. Concurrent Versions System Concurrent Versions System (CVS) ist ein Software-System zur Versionsverwaltung von Dateien, das hauptsächlich im Zusammenhang mit Software-Quelltext verwendet … Apache Subversion Apache Subversion (SVN) ist eine freie Software zur zentralen Versionsverwaltung von Dateien und Verzeichnissen. Apache Subversion. Subversion-Logo. Integrierte Entwicklungsumgebung Eine integrierte Entwicklungsumgebung (IDE, von englisch integrated development environment) ist eine Sammlung von Computerprogrammen, mit denen die …