München, 07.09.2011: Florian Schinagl über Continuous Integration mit C++

Continuous Integration, also das kontinuierliche Neubilden und automatisierte Testen einer Softwareanwendung, wird heutzutage in Java und C# Projekten immer üblicher. Die Durchführung einer permanenten Integration hat den Vorteil, dass etwaige Probleme frühzeitig erkannt und behoben werden können.

Auch in C++ Projekten ist Continuous Integration eine gute Lösung, um die Softwarequalität zu steigern! Visual C++ Entwickler müssen z.B. immer parallel eine Debug- und eine Release-Version eines Projekts pflegen. Hierbei kann es schnell passieren, dass die beiden Versionen inkonsistent werden. Außerdem kann im Alltagsstress das regelmäßige Ausführen von Unit Tests schnell vergessen werden. Das zeitnahe Auffinden von Fehlern ist aber wichtig, um zu jederzeit ein buildfähiges und damit testbares Produkt zur Verfügung zu haben.

In einem Pilotprojekt haben wir deshalb nach einem geeigneten System gesucht, was es uns ermöglicht, sowohl die Buildfähigkeit der C++ Projekte zeitnah sicherzustellen, als auch Unit Tests regelmäßig automatisiert auszuführen. Entschieden haben wir uns für den Continuous Integration Server Jenkins in Kombination mit unserem Versionsverwaltungssystem Subversion. Eigentlich ist Jenkins auf Java spezialisiert. Er lässt sich aber mit Plugins auch für C++ Projekte nutzen. Wir betreiben Jenkins auf einem Windows Server. Außerdem nutzen wir u.A. diese Plugins:

  • Subversion Plugin
    – Zugriff auf das Versionsverwaltungssystem
  • MSBuild Plugin
    – Visual C++ Compiler
  • Jenkins Doxygen Plug-in
    – Erzeugung der Entwicklerdokumentation
  • xUnit Plugin
    – Auswertung der Unit Tests

Jenkins erkennt automatisch, wenn ein Entwickler eine neue Version in das Repository eincheckt und beginnt den Buildprozess. Tritt hierbei ein Fehler auf, bekommen die betroffenen Entwickler eine e-Mail mit einer Fehlerbeschreibung. Damit können wir schnell auf Fehler reagieren und sorgen für einen immer stabilen Zustand des Softwareprodukts. In einem Nightly Build baut der Buildserver einmal pro Tag ein komplettes Software Release. Dabei führt er auch die Unit Tests aus. Am nächsten Morgen erhalten wir das Ergebnis und behalten so den Zustand der Software im Blick.

Bei der Unit Test Ausführung setzen wir auf cppunit. Dies ist eine C++ Portierung des bekannten JUnit. Die Testausführung erzeugt XML Dateien, welche durch das xUnit Plugin von Jenkins ausgewertet werden.

Die Einführung des Continuous Integration Systems lief erfolgreich, weshalb wir das System jetzt auch produktiv in Kundenprojekten einsetzen. Die automatische Ausführung und zeitnahe Rückmeldung von Fehlern an die Entwickler ermöglicht uns nun, schnell und effektiv auf Fehler zu reagieren. Wir und damit auch unsere Kunden profitieren davon.

IMG_8864_frei
Florian Schinagl
Senior bei der Art of Quality GmbH