Kontinuierliche Integration

Kontinuierliche Integration

Kontinuierliche Integration (auch: fortlaufende oder permanente Integration, en. Continuous Integration) ist ein Begriff aus der Software-Entwicklung, der den Prozess des regelmäßigen, vollständigen Neubildens und Testens einer Anwendung beschreibt. Obwohl dieses Konzept älter ist, wird es häufig mit Extreme Programming in Verbindung gebracht.

Die Idee der fortlaufenden Integration ist einfach: [1]

  1. Jeder Entwickler soll frühzeitig und oft Änderungen in die Versionsverwaltung einchecken d. h. er sollte versuchen, eine große Änderung inkrementell durch funktionsfähige kleine Änderungen einzubringen. Normalerweise sollte jeder Entwickler mindestens täglich seine Änderungen einchecken.
  2. Sobald ein Entwickler Änderungen in die Versionsverwaltung eincheckt, wird das Gesamtsystem neu gebaut und automatisch getestet. Es wird versucht, den Entwickler so schnell wie möglich auf Integrationsprobleme seiner Änderung hinzuweisen.

Spätestens seit das Konzept der permanenten Integration von Kent Beck im Rahmen von Extreme Programming populär gemacht wurde, ist der Begriff an sich bekannt, die Voraussetzungen sind allerdings oft nicht so klar.

Permanente Integration basiert auf der impliziten Annahme, dass das Projekt seine Quellen in einem zentralen Versionsverwaltungssystem verwaltet und diese auch zeitnah nach Bearbeitung wieder dort einstellt.

Auch wenn Systeme wie CruiseControl, Jenkins (ehemals Hudson) oder Anthill es sehr viel leichter machen, eine permanente Integration umzusetzen, so ist doch in vielen Unternehmen und Projekten keine Umgebung vorhanden, die ein solches Arbeiten unterstützt.

Die einfachere Alternative – und häufig die Vorstufe zur permanenten Integration – ist der Nightly Build (nächtlicher Erstellungsprozess), bei dem jede Nacht die aktuellen Versionen aus dem Versionsverwaltungssystem geholt werden und auf diesem Stand ein Gesamtsystem gebaut wird. Sofern möglich, wird auch noch eine Installation in der Zielumgebung vorgenommen (Deployment) und ein Minimaltest (Anschalttest, vgl. Smoke testing) durchgeführt.

Die Einführung permanenter Integration oder ersatzweise eines täglichen Builds ist ein geeigneter Weg, die Qualität zu steigern.

Inhaltsverzeichnis

Vorteile

  • Integrations-Probleme werden laufend entdeckt und behoben (gefixt) – nicht erst kurz vor einem Meilenstein
  • frühe Warnungen bei nicht zusammenpassenden Bestandteilen
  • sofortige Unit-Tests entdecken Fehler schnell
  • konstante Verfügbarkeit eines lauffähigen Standes für Demo-, Test- oder Vertriebszwecke
  • Die sofortige Reaktion des Systems auf das Einchecken fehlerhaften oder unvollständigen Codes „erzieht“ die Entwickler im positiven Sinne zu einem verantwortlicheren Umgang und kürzeren Checkin-Intervallen.

Bedingungen

Die folgenden Bedingungen entstammen einem Artikel[1] von Martin Fowler.

Gemeinsame Codebasis

Um innerhalb eines Teams sinnvoll integrieren zu können, muss eine Versionsverwaltung existieren, in die alle Entwickler ihre Änderungen kontinuierlich integrieren können.

Automatisierte Übersetzung

Jede Integration muss einheitlich definierte Tests durchlaufen, bevor die Änderungen integriert werden. Dafür ist automatisierte Übersetzung notwendig.

Beispiele:

  • Compilierung eines Produkts
  • Statische Code-Überprüfungen
  • Compilierung von Test-Systemen
  • Ausführung von Test-Systemen
  • Generierung von Dokumentation

Um Testergebnisse von den Arbeitsumgebungen unabhängig zu machen, empfiehlt sich der Einsatz von dedizierten Test-Rechnern. Damit können auf diesen Rechnern auch gezielt Verfahren implementiert werden, um die Testlaufzeit zu minimieren.

Kontinuierliche Test-Entwicklung

Jede Änderung sollte möglichst zeitgleich mit einem dazugehörigen Test entwickelt werden (Testgetriebene Entwicklung). Ist das nicht möglich, sollte zumindest eine zeitnahe Entwicklung von entsprechenden Tests angestrebt werden.

Neu entwickelte Tests sollten Bestandteil der automatisierten Test-Suite werden.

Mit Hilfe von kontrollflussorientierten Testverfahren (Code Coverage Analysis) kann diese Vorgehensweise dokumentiert und kontrolliert werden.

Häufige Integration

Jeder Entwickler sollte seine Änderungen so oft wie möglich in die gemeinsame Code-Basis integrieren. Mit kurzen Integrations-Intervallen erreicht man

  • Risiko von fehlschlagenden Integrationen wird mit kleinen Inkrementen minimiert
  • die Arbeit der Entwickler wird häufig in die gemeinsame Code-Basis gesichert (Backup)

Kurze Testzyklen

Der Test-Zyklus vor der Integration sollte kurz gehalten sein, um häufige Integrationen zu fördern. Mit steigenden Qualitätsanforderungen für die einzelnen Integrationen steigt auch die benötigte Zeit dieser Test-Zyklen. Hierbei muss immer sorgfältig abgewogen werden. Weniger relevante Tests werden dann verschoben und erst nach einzelnen Integrationen durchgeführt.

Gespiegelte Produktionsumgebung

Die Änderungen sollten in einem Abbild der realen Produktionsumgebung getestet werden.

Einfacher Zugriff

Auch Nicht-Entwickler brauchen einfachen Zugriff auf die Ergebnisse der Software-Entwicklung. Dies müssen nicht notwendigerweise Quellen sein. Sinnvoll sind hierbei

  • fertig compiliertes Produkt für Tester
  • Qualitäts-Zahlen für Qualitäts-Verantwortliche
  • Dokumentation
  • fertig paketiertes Abbild für Release Manager

Automatisiertes Reporting

Die Ergebnisse der Integrationen müssen leicht zugreifbar sein. Sowohl Entwickler als auch andere Beteiligte müssen leicht Informationen bekommen können

  • wann wurde die letzte erfolgreiche Integration ausgeführt?
  • welche Änderungen wurden seit der letzten Lieferung eingebracht?
  • welche Qualität hat die Version?

Automatisierte Verteilung

Jede Version sollte leicht in eine Produktionsumgebung (oder ein Abbild derselbigen) überführt werden können. Hierfür sollte die Softwareverteilung automatisiert sein.

Software

Eine Liste verfügbarer Werkzeuge zur Unterstützung dieses Prozesses:

  • AnthillPro – ein kommerzielles Werkzeug von Urbancode.
  • Anthill ist die frei verfügbare Variante.
  • LuntBuild – ein Werkzeug für Build und Management.
  • Bamboo – ein kommerzieller Server für fortlaufende Integration von Atlassian
  • Bitten – ein Plugin zur fortlaufenden Integration für Trac
  • BuildBot – ein in Python/Twisted implementiertes System für kontinuierliche Erstellungsprozesse
  • Build Forge – ein Framework der IBM-Tochtergesellschaft Rational Software, das die Build- und Release-Prozesse automatisieren soll
  • CABIE – eine in Perl geschriebene Open-Source-Erstellungs- und Integrationsumgebung, die mit CVS, Subversion and Perforce ein Server für fortlaufende Integration, der Apache Maven und Apache Ant unterstützt
  • Continuum - ein Subprojekt des Apache Maven Projekts. Unterstützt Maven 1, Maven 2, Ant und Shell-Skripte.
  • CruiseControl – ein Java-basiertes Framework für kontinuierliche Erstellungsprozesse, Derivate auch für .NET und Ruby
  • DamageControl – ein weiterer Continuous-Integration-Server für Ruby
  • Apache Gump – ein Werkzeug für fortlaufende Integration der Apache Software Foundation
  • Railsonfire - ein Webservice für automatische Integration von Ruby Programmen
  • Jenkins – mit MIT-Lizenz, geschrieben in Java, läuft in Servlet-Container, unterstützt CVS, Subversion, Ant, Maven, und Shell-Skripte
  • Team Foundation Server - eine Plattform für kollaborative Softwareprojekte auf Basis von Microsoft SQL Server und Windows SharePoint Services
  • Tinderbox – ein auf Mozilla basierendes Produkt
  • Teamcity – ein Werkzeug von JetBrains, Web-basiert, verträglich mit den integrierten Entwicklungsumgebungen IntelliJ IDEA, Eclipse und Microsoft Visual Studio
  • Xinc – Continuous-Integration-Server für PHP-Anwendungen
  • NabiCI - Lightweight Continuous Integration Framework für PHP-Projekte

Literatur

  • Manfred Lange: Fortlaufende Integration. XP Exchange, 14. Januar 2002 (online, abgerufen am 13. April 2007).

Weblinks

Einzelnachweise

  1. a b FOWLER, Martin. Continuous Integration (Englisch)

Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Kontinuierliche Simulation — ist das Experimentieren mit kontinuierlichen Modellen. Im Unterschied zur diskreten Simulation werden bei der kontinuierlichen Simulation pro Zeitintervall unendlich viele Zustandsveränderungen betrachtet. Die Kombination aus kontinuierlicher und …   Deutsch Wikipedia

  • Continous integration — Kontinuierliche Integration (auch: fortlaufende oder permanente Integration, en. Continuous Integration) ist ein Begriff aus der Software Entwicklung, der den Prozess des regelmäßigen, vollständigen Neubildens und Testens einer Anwendung… …   Deutsch Wikipedia

  • Continuous Integration — Kontinuierliche Integration (auch: fortlaufende oder permanente Integration, en. Continuous Integration) ist ein Begriff aus der Software Entwicklung, der den Prozess des regelmäßigen, vollständigen Neubildens und Testens einer Anwendung… …   Deutsch Wikipedia

  • Capability Maturity Model Integration — Das Capability Maturity Model Integration (kurz CMMI) ist eine Familie von Referenzmodellen für unterschiedliche Anwendungsgebiete – derzeit für die Produktentwicklung, den Produkteinkauf und die Serviceerbringung. Ein CMMI Modell ist eine… …   Deutsch Wikipedia

  • Arbeitskreis Europäische Integration — Der Arbeitskreis Europäische Integration e.V. (AEI) ist eine interdisziplinäre wissenschaftliche Vereinigung, die sich die Beschäftigung mit Fragen der europäischen Integration und der EU Entwicklung zum Ziel gesetzt hat. Zu den gegenwärtig rund… …   Deutsch Wikipedia

  • Extreme programming — (XP), auch Extremprogrammierung, ist eine agile Methode, die das Lösen einer Programmieraufgabe in den Vordergrund der Softwareentwicklung stellt und dabei einem formalisierten Vorgehen geringere Bedeutung zumisst. Die Extremprogrammierung… …   Deutsch Wikipedia

  • Extremprogrammierung — Extreme Programming (XP), auch Extremprogrammierung, ist eine agile Methode, die das Lösen einer Programmieraufgabe in den Vordergrund der Softwareentwicklung stellt und dabei einem formalisierten Vorgehen geringere Bedeutung zumisst. Die… …   Deutsch Wikipedia

  • Xtreme Programming — Extreme Programming (XP), auch Extremprogrammierung, ist eine agile Methode, die das Lösen einer Programmieraufgabe in den Vordergrund der Softwareentwicklung stellt und dabei einem formalisierten Vorgehen geringere Bedeutung zumisst. Die… …   Deutsch Wikipedia

  • Extreme Programming — (XP), auch Extremprogrammierung, ist eine Methode, die das Lösen einer Programmieraufgabe in den Vordergrund der Softwareentwicklung stellt und dabei einem formalisierten Vorgehen geringere Bedeutung zumisst. Diese Vorgehensweise definiert ein… …   Deutsch Wikipedia

  • Hudson (Software) — Entwickler: Kohsuke Kawaguchi Betriebssystem: GNU/Linux, Mac OS X, Windows u. a. Kategorie: Kontinuierliche Integration Lizenz …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”