Eine virtuelle Maschine als Entwicklungsumgebung nutzen

10. Oktober 2011 von Michael Frankl

Windows und Linux auf Mac OS X dank VirtualBox

Vielen Programmierern im Internet-Umfeld stellt sich häufig die Frage, in welcher Umgebung sie ihre Anwendungen entwickeln sollen. Zur Auswahl stehen die eigene Workstation, ein zentraler Entwicklungsserver oder aber virtuelle Maschinen. Jede Lösung hat eigene Vor- und Nachteile, wodurch einem die richtige Wahl nicht immer leicht gemacht wird. In diesem Artikel wollen wir die virtuelle Maschine als Entwicklungsumgebung näher beleuchten und auf Basis eigener Erfahrungen zeigen, wann sie eine gute Wahl ist.

Wahl der passenden Entwicklungsumgebung

Wer sich zwischen den verschiedenen Lösungsansätzen für den richtigen entscheiden will, sollte bei der Auswahl den folgenden Kriterien besondere Beachtung schenken:

  • Performance: Eine gute Performance ist für eine Entwicklungsumgebung von großer Bedeutung. Viele Änderungen der Entwickler müssen kompiliert und durch Tests validiert werden. Längere Pausen würden die Arbeit zu stark ausbremsen.
  • Ressourcenbedarf: Verschiedene Entwicklungsumgebungen zehren an den Maschinen, auf denen sie laufen, unterschiedlich stark. Um unnötige Pausen zu vermeiden, muss das System fit genug sein.
  • Konflikte zwischen verschiedenen Projekten: Sollen auf einem System mehrere Projekte gleichzeitig entwickelt werden, kann das – je nach Programmiersprache – leider zu Konflikten führen. Bei Sprachen wie Java, die die Existenz verschiedener Modul-Versionen auf derselben Maschine erlauben, fällt dieser Aspekt nicht so stark ins Gewicht. Anders verhält es sich mit Sprachen wie Perl, bei denen schon zwei Projekte schnell zu Problemen mit unterschiedlichen Abhängigkeiten führen können.
  • Abweichungen vom Zielsystem: Ein häufiges Ärgernis stellt das Debuggen von Problemen dar, die durch das Betriebssystem bzw. die Laufzeitumgebung beeinflusst werden. Lässt sich ein solches Problem nicht schnell nachvollziehen, führt dies manchmal zu einer aufwändigen und teuren Fehlersuche. Um solche Hindernisse aus dem Weg zu räumen, sollte sich die Entwicklungsumgebung möglichst nahe an der produktiven Umgebung befinden.
  • Datenbankanbindung: Der Einsatz von Datenbanken kann immer dann zu Problemen führen, wenn mehrere Projekte nebeneinander entwickelt werden sollen. Benötigen etwa zwei Projekte zwei unterschiedliche Versionen derselben Datenbank, kann der parallele Betrieb auf nur einem System recht schwierig werden.
  • Portabilität: Dieses Kriterium spielt meist dann eine entscheidende Rolle, wenn der Entwickler auch von zu Hause oder auf Reisen an einem Projekt arbeiten will oder muss.
  • Einrichtungsaufwand: Ein nicht zu unterschätzender Aspekt ist der Aufwand, den es braucht, um die Entwicklungsumgebung erstmals lauffähig zu bekommen. Für große Projekte kann dabei tendenziell mehr Zeit investiert werden als für kleinere.
  • Einrichtungsaufwand für weitere Entwickler: Arbeiten mehrere Personen gemeinsam an einem Projekt, kommt dieser Punkt zum Tragen. Je schneller und unkomplizierter sich eine bereits eingerichtete Entwicklungsumgebung an weitere Personen übergeben lässt, desto mehr Zeit und Aufwand lassen sich auf lange Sicht einsparen.
  • Zentralisierte Pflege: Virtuelle Maschinen müssen wie jede herkömmliche Workstation mit Systemupdates und Sicherheitspatches versorgt werden. Die Frage ist, ob dies zentral geregelt wird oder jede Maschine von einem Nutzer lokal gepflegt werden muss. Letzteres kann mit zunehmender Anzahl an Clients sehr aufwändig werden.
  • IDE-Anbindung: Läuft die IDE (Integrated Development Environment) weiterhin auf dem Rechner des Entwicklers, muss es unkompliziert möglich sein, für eine entsprechende Anbindung an das Entwicklungssystem zu sorgen.
  • Abhängigkeiten von anderen Einflüssen: Ist die Entwicklungsumgebung Einflüssen von außen ausgesetzt, kann das zu unerwarteten Störungen im Entwicklungsfluss führen. Gerade beim Einsatz des eigenen Rechners führen automatische Systemupdates immer wieder zu Problemen, weil für die Entwicklung notwendige Abhängigkeiten von diesen ebenfalls betroffen sind.
  • Projektgröße: Gemeinsam mit dem Einrichtungsaufwand hat die Größe des Projekts Einfluss auf die Wahl der Entwicklungsumgebung. Bei vielen sehr kleinen Projekten ist es nicht ratsam, stets eine neue virtuelle Maschine einzurichten. Bei großen Projekten kann durch die einfache Weitergabe der einmal eingerichteten Entwicklungsumgebung viel Zeit gespart werden.

Die folgende Tabelle soll einen schnellen Überblick über Für und Wider der verschiedenen Entwicklungsumgebungen liefern. Die Einschätzungen sind jedoch keinesfalls starr, sondern stark variabel und können durch individuelle Regeln positiv wie negativ beeinflusst werden.

Zentraler Entwicklungsserver Rechner des Entwicklers Virtuelle Maschine
Performance + + + +
Ressourcenbedarf + + + -
Konflikte zwischen verschiedenen Projekten - - - - + +
Abweichungen vom Zielsystem - - - + +
Datenbankanbindung - - + +
Portabilität - - + +
Einrichtungsaufwand + + - -
Einrichtungsaufwand für weitere Entwickler - - - + +
Zentralisierte Pflege + - - -
IDE-Anbindung - + + -
Abhängigkeiten von anderen Einflüssen - - - + +
Kleines Projekt + + - - -
Großes Projekt - - - + +

Einrichtung der virtuellen Maschine

Bei //SEIBERT/MEDIA kamen wir nach Abwägen der angeführten Merkmale bei einigen Projekten zu dem Schluss, dass der Einsatz von virtuellen Maschinen für die Entwicklung sinnvoll ist. Insbesondere bei großen Perl-Projekten bietet sich diese Lösung an. Immer wieder haben automatische Updates, die neue und inkompatible Versionen installieren, die Entwicklungsumgebung unbrauchbar gemacht. Der Aufwand zur Wiederherstellung ist in solchen Fällen zumeist hoch.

Um eine virtuelle Maschine als Entwicklungsumgebung zu nutzen, muss zunächst eine Software für die Virtualisierung installiert werden. Hier stehen mehrere Projekte zur Auswahl: Die populärsten sind VMware, Parallels und VirtualBox. Aus eigener Erfahrung mit allen drei Produkten lässt sich sagen, dass für das beschriebene Szenario generell alle geeignet sind, da sie sich nur minimal voneinander unterscheiden. Nachfolgend wollen wir VirtualBox exemplarisch näher betrachten.

Zum Betrieb einer solchen Entwicklungsumgebung muss das System des Entwicklers zunächst einige Anforderungen erfüllen. Am wichtigsten ist, dass der Rechner über genügend Arbeitsspeicher verfügt – mindestens 4 GB sind ein guter Richtwert. Steht zu wenig Arbeitsspeicher zur Verfügung, beginnt der Rechner die Festplatte als solchen zu nutzen (Swapping), was zu starken Performance-Einbußen führt. Eine weitere Notwendigkeit ist eine ausreichend große Festplatte. Virtuelle Maschinen benötigen jeweils mehrere Gigabyte an Platz und je mehr Projekte gleichzeitig installiert sind, desto rapider steigt der Bedarf an freiem Plattenplatz.

Das finale Aufsetzen der virtuellen Maschine verhält sich im Grunde genauso wie das Installieren eines realen Computersystems. Wichtig ist, dass die Einrichtung der Umgebung möglichst nahe an der Zielplattform erfolgt, auf der die abschließenden Tests stattfinden werden bzw. das Projekt zum Einsatz kommen soll. Auf diese Weise lassen sich Probleme minimieren, die durch unterschiedliche Software-Versionen auf Entwicklungs- und Produktivsystem entstehen können.

Auf Linux-Systemen kann oft die Paketverwaltung der Distribution eine große Hilfe sein. So ist es beispielsweise unter Debian möglich, alle installierten Pakete auszulesen, als Liste zu speichern und auf einem anderen System erneut zu installieren. Dies kann in beiden Richtungen nützlich sein: Ist das Produktivsystem schon vorhanden, kann der Entwickler sich an diesem orientieren. Gibt es ein solches System noch nicht, kann der Entwickler dem Administrator, der dieses später einrichten wird, die Arbeit deutlich erleichtern, indem er die auf dem Entwicklungssystem durchgeführten Installationen sauber dokumentiert und diese Informationen weiterreicht. Das spart nicht nur Zeit und Aufwand, sondern vermeidet auch unnötige Fehler.

Ist die Entwicklungsumgebung endlich aufgesetzt, benötigt der Entwickler noch Zugriff auf die Daten. Mit einer IDE, die auf seinem Rechner läuft, muss er auf Dateien und Ordner der virtuellen Maschine zugreifen und diese bearbeiten können. Vor allem Samba hat sich als besonders praktischer Weg etabliert, um diese Hürde zu meistern: Auf dem Zielsystem wird ein Samba-Server installiert und das benötigte Verzeichnis freigegeben. Auf dem Rechner des Entwicklers wird dieses dann mit einem geeigneten Samba-Client eingebunden.

Probleme und Schwierigkeiten

Beim Einsatz virtueller Maschinen kann es zu einigen Schwierigkeiten kommen, die hier nicht verschwiegen werden sollen. Allen voran ist das regelmäßige Einpflegen von Sicherheitspatches und Software-Updates eine Aufgabe, die nicht nur auf dem Produktiv- bzw. Testsystem erfolgen muss, sondern möglichst zeitnah auch auf dem Entwicklungssystem. Nur so lassen sich die Gleichheit der Systeme wahren und Konflikte aufgrund unterschiedlicher Software-Versionen vermeiden.

Im Zweifelsfall ist es stets die Aufgabe des jeweiligen Entwicklers, für diese Synchronisation zu sorgen. Alternativ können auch zentral gepflegte Master-Images eingeführt werden, die sich Entwickler dann von Zeit zu Zeit abholen müssen, um diese als ihre neue Entwicklungsumgebung einzusetzen.

Eine weitere bekannte Herausforderung beim Einsatz virtueller Maschinen ist die korrekte Konfiguration des Netzwerks, da jede Virtualisierungs-Software ein wenig anders funktioniert. Es ist häufig nicht trivial, diejenige Netzwerkeinstellung zu finden, die allen Anforderungen gerecht wird. Dazu kommen noch Probleme beim Wechsel des Netzwerks, wenn der Entwickler von zu Hause oder vor Ort beim Kunden arbeiten will. Mit einem Patentrezept zur Lösung des Problems ist in absehbarer Zeit leider nicht zu rechnen.

Vorteile und Möglichkeiten

Neben den bereits genannten Vorteilen lassen sich noch weitere finden, die für den Einsatz von virtuellen Maschinen als Entwicklungsumgebung sprechen:

  • Es ist schnell und unkompliziert möglich, Veränderungen auszuprobieren und bei Bedarf wieder rückgängig zu machen. Mit einem sogenannten Snapshot, der per Knopfdruck erzeugt wird, kann ein Abbild des gesamten Systems zu einem bestimmten Zeitpunkt gespeichert werden. Vor einer größeren Änderung – wie etwa der Aktualisierung der Laufzeitumgebung – wird ein Snapshot erstellt, und sollte es anschließend zu Problemen kommen, kann alles einfach wieder per Knopfdruck rückgängig gemacht werden.
  • Der Entwickler hat seine Entwicklungsumgebung selbst in der Hand und kann dank voller Zugriffsrechte unabhängig und zielführend arbeiten. Benötigt er ein zusätzliches Tool, installiert er dieses einfach selbst. Andere werden von dieser Änderung genauso wenig beeinflusst wie die virtuelle Maschine des Entwicklers von anderen beeinflusst wird.
  • Ein Nicht-Entwickler mit wenig technischem Know-how kann ebenfalls mit der virtuellen Maschine arbeiten, um den aktuellen Stand der Projekte zu überprüfen oder auch dem Kunden zu präsentieren.
  • Verteilte Systeme können einfach und kostengünstig simuliert werden, um Software, die später auf mehreren Rechnern verteilt laufen soll, auf ihr Verhalten hin zu untersuchen – und bei Bedarf weiter zu optimieren.

Fazit

Die Entscheidung, ob eine virtuelle Maschine als Entwicklungsumgebung eingesetzt werden soll, ist bei jedem Projekt neu zu treffen. Eine pauschale, allgemeingültige Empfehlung gibt es leider nicht. Stimmen die Voraussetzungen, bietet eine virtuelle Maschine sehr viele Vorteile gegenüber anderen Umgebungen bei der Entwicklung. Die Erfahrungen bei //SEIBERT/MEDIA belegen es: Durch den Einsatz lassen sich nicht nur Zeit und Nerven sparen, auch die Effizienz kann signifikant gesteigert werden.

Weiterführende Informationen

Ihr neues Projekt soll mit neuesten Techniken entwickelt werden? Sie möchten ein bestehendes System erweitern oder eine Software-Plattform migrieren? Sie benötigen Schnittstellen zwischen Anwendungen im Unternehmen? Und bei all dem muss höchste Qualität jederzeit gewährleistet sein?

Dann ist //SEIBERT/MEDIA der richtige Partner für Sie. Wir legen größten Wert auf Erweiterbarkeit, Performanz, Skalierbarkeit, Plattformunabhängigkeit und Testbarkeit und schaffen so individuelle High-End-Software-Lösungen, die sich auch im Nachhinein flexibel ausbauen und verändern lassen. Bitte sprechen Sie uns unverbindlich an! Ausführliche Informationen finden Sie auch in unserem öffentlichen Wiki: Einstieg in die Software-Entwicklung mit //SEIBERT/MEDIA.


Bild: Screenshot von rafa espada unter CC-Lizenz


Eine Antwort hinterlassen





//SEIBERT/MEDIA besteht aus den vier Kompetenzfeldern Consulting, Design, Technologies und Systems und gehört zu den erfahrenen und professionellen Multimedia-Agenturen in Deutschland. Wir entwickeln seit 1996 mit heute über 65 Mitarbeitern Intranets, Extranet-Systeme, Web-Portale aber auch klassische Internet-Seiten. Seit 2005 konzipiert unsere Designabteilung hochwertige Unternehmensauftritte und kommunikative Konzepte. Beratungen im Bereich Online-Marketing und Usability runden das Leistungsportfolio ab.

Zu unseren teils weltweit agierenden Kunden gehören u.a. Accor, Allianz, Atlas MTT, BAD, Deutsche Klinik für Diagnostik, Deutsche Post, Hitachi, Honda Motor, Hotel InterContinental, Institut Fresenius, Kabel Deutschland, Lufthansa, SAP, SGS AG, STA Travel, StepStone sowie viele andere große und kleine interessante Unternehmen.