Parallele Softwareentwicklung spielend meistern

Architektur/Methoden  –  9 Kommentare

Releasezyklen von Softwareprodukten werden kürzer und kürzer – vor allem durch agile Vorgehensweisen während des Entwicklungsprozesses. Doch insbesondere bei industriellen Produkten, die nicht ausschließlich aus Software bestehen, steht das im Widerspruch zu langen Produktlebenszyklen. Hier greift die parallele Entwicklung von Produktversionen.

Verkürzte Releasezyklen sind allgegenwärtig. So hatte sich Microsoft dazu entschieden, eine neue Version von Windows (Windows 8.1) bereits am 18. Oktober 2013 zu veröffentlichen – etwa ein Jahr nach dem Release von Windows 8. Die Cloud-Variante des Team Foundation Servers, der Team Foundation Service, erhält in monatlichen Zyklen neue Features und Verbesserungen [1].

Microsoft steht mit solchen Entscheidungen nicht allein. Die Mozilla Foundation entschied sich bereits vor mehr als zwei Jahren zu einem sechswöchigen Releasezyklus ihres Browsers Firefox. In der Halbleiterindustrie ist Intel seit Jahren für sein Tick-Tock-Modell bekannt. Dabei erfolgt alle 12 bis 18 Monate abwechselnd die Verkleinerung der CPU-Fläche (Tick) und darauf aufbauend die Entwicklung einer neuen Mikroarchitektur mit verbesserter Energieeffizienz, erhöhter Geschwindigkeit und neuen Hardware-Features (Tock). Fernab der IT-Industrie werden nicht zuletzt in der Automobilbranche in zunehmend kürzeren Zeitabständen neue Modelle vorgestellt, die neue Softwarekomponenten benötigen.

Neben den endgültigen sind mitunter Zwischenreleases der verschiedenen Softwareversionen an Lieferanten, Kunden oder interne Qualitätssicherung während der Entwicklung bereitzustellen. Darüber hinaus verpflichten langfristige Wartungsverträge dazu, bereits ausgelieferte Versionen bei Bedarf zu pflegen. Um die genannten Anforderungen realisieren zu können, bedarf es weniger einer technischen als vielmehr einer organisatorischen Erweiterung im Softwareentwicklungsprozess.

Die Motivation zu paralleler Softwareentwicklung kann grundverschieden sein. Wie erwähnt nehmen Entwicklungs- und Releasezyklen besonders großen Einfluss auf die Softwareentwicklung. Ebenso ist unabhängig von Teamgröße und Umfang der Software der Entwicklungsprozess zu koordinieren. Selbst wenn für ein Produkt nur eine Version gleichzeitig entwickelt wird, kann es mitunter sinnvoll sein, in Teams oder Features zu untergliedern. Letztlich bleiben die Probleme die gleichen: Wie gewährleistet man das gleichzeitige Arbeiten aller beteiligten Softwareentwickler eines Softwareprodukts? Und wie lässt sich jederzeit ein (Zwischen-)Release oder ein Service Pack erstellen?

Ziel jedes Entwicklungsteams sollte es sein, zu jeder Zeit eine lauffähige Version des Produkts zur Verfügung stellen zu können. Damit beispielsweise die interne Test- und Qualitätssicherungsabteilung während der laufenden Entwicklung erste Tests ausführen oder externe Teams, die Teilkomponenten liefern, mit aktuellen Versionsständen arbeiten können. Anhand dieser beiden Beispiele wird klar, dass der Quellcode mehrfach vorhanden sein muss. Denn eine lauffähige Version lässt sich während der Entwicklung nicht immer garantieren.