Entwicklung, Auslieferung und Betrieb von Software durch Automatisierung optimieren

Gespart – ein Softwareleben lang

Enno Thieleke und Stefan M. Heldt

Waschen Sie Ihre Wäsche per Hand? Sicher ist die Investition in eine Waschmaschine nicht sehr interessant. Dennoch muss sie sein, um Ihnen aufwändige Handarbeit zu ersparen und damit Personalkosten zu reduzieren. Ganz nebenbei hebt es sicher Ihre Stimmung, nur noch die Maschine füllen und starten zu müssen. Ähnlich verhält es sich mit Software Configuration Management, Build Management, Release Management, Qualitätsmetriken und diversen Formen der Testabsicherung. Diese machen es IT-Abteilungen möglich, Software professionell zu entwickeln, auszuliefern und zu betreiben.

Die eingangs aufgezählten Aktivitäten werden von den Ausführenden größtenteils als stetig wiederkehrend und wenig kreativ betrachtet. Sie eignen sich damit perfekt, um automatisiert zu werden. Diese Bestrebung wird von den Geldgebern jedoch häufig als reiner Kostenblock interpretiert. Wir zeigen in diesem Beitrag auf, wie Sie mit der Automatisierung nicht nur Ihre Entwickler glücklich machen, sondern obendrein auch noch Geld sparen. Außerdem legen Sie den Grundstein, um die Qualität Ihres Softwareprodukts konsequent zu messen und zu verbessern. Die Wäsche wird einfach blütenrein.

Software Configuration Management (SCM)

In „Continuous Delivery“, einem der wahrscheinlich bekanntesten Werke zu diesem Thema [1], finden sich folgende Worte: „Configuration management refers to the process by which all artifacts relevant to your project, and the relationships between them, are stored, retrieved, uniquely identified, and modified.“ Dieser Definition schließen wir uns uneingeschränkt an. Eine schlechte Handhabung dieses Prozesses führt in den meisten Fällen zu einem enormen Fehlerpotenzial. Dabei kostet es viele Unternehmen immer wieder beträchtliche Summen, wenn beim Ausrollen einer Software etwas nicht funktioniert. Um die Fehlerquelle aufzuspüren und zu bereinigen, ist es teilweise notwendig, den gesamten Weg der Auslieferung zurückzugehen – bis hin zu den Entwicklern. Im schlimmsten Fall wird der Auslieferungsprozess abgebrochen und komplett neu angesetzt. Dabei war die Ursache vielleicht nur eine einzige Datei, die nicht richtig zusammengeführt wurde – ein alltägliches Szenario. Mit sauber umgesetztem SCM wird versucht, dieses Fehlerpotenzial praktisch zu eliminieren. Im besten Fall kann auf Knopfdruck eine Umgebung komplett reproduziert werden – das kann sogar die Betriebssysteminstallation einschließen. Gerade in der heutigen Welt, in der die meisten Systeme virtualisiert sind und die Cloud eine immer höhere Bedeutung bekommt, ist das wichtiger denn je. Wenn ein System ausfällt, gehen keine Umsätze durch lange Downtimes verloren und parallel kann die Ursache des Ausfalls ermittelt werden, um auch dieses Risiko in Zukunft zu vermeiden. Darüber hinaus können bei Lastspitzen zusätzliche Systeme einfach zur Verfügung gestellt werden.

Build Management

Echte Handarbeit – Made in USA, Austria oder Germany – steht in vielen Fällen für hohe Qualität. Gut Ding will Weile haben. Auch dieses Motto wird immer wieder gerne zitiert. Ein qualitativ hochwertiger Build ohne viele Fehler, an dessen Ende ein auszulieferndes Softwareartefakt steht, muss von einem Programmierer selbst erschaffen werden. Sie ahnen es bereits: Natürlich trifft das absolut nicht zu. Je weniger notwendig der manuelle Eingriff, desto besser ist das für den Geldbeutel und die Qualität. Gutes Build Management zeichnet sich vor allem durch seine zu 100 % reproduzierbaren Ergebnisse aus. Nicht das kleinste Detail darf bei gleichen Eingabeparametern vom vorherigen Ergebnis abweichen. Das lässt sich am besten durch entsprechende Automatisierung erreichen. Außerdem wird auch hier Geld gespart, denn ein Knopfdruck durch einen beliebigen Entwickler ist kostengünstiger, als einen darauf spezialisierten Entwickler für bis zu zwei Stunden pro Build zu bezahlen. Die Ironie bei dieser Sache ist, dass in nicht wenigen Fällen die Arbeit, die für einen Build-Vorgang notwendig ist, einfach direkt in eine Prozessautomatisierung investiert werden kann. Mit potenzieller Fehlerkorrektur sind vier Stunden großzügig geschätzt, und danach amortisiert sich diese Investition recht schnell. Doch hierzu mehr an späterer Stelle in diesem Beitrag.

Release Management

Ob Software im kleinen oder im großen Stil hergestellt wird, ob für den Eigenbedarf oder in großen Softwareschmieden: Strukturiertes Release Management ist ein Mittel, um schnell und gezielt neue Versionen an den Mann zu bringen. Es geht dabei nicht nur darum, zu planen, welche Features und Bugfixes mit dem nächsten Release ausgeliefert werden sollen, sondern auch darum, kontinuierlich einen hohen Qualitätsstandard zu gewährleisten. Das wird insbesondere durch entsprechende automatisierte Testabdeckung sichergestellt. Von hier aus kann auch ein Bogen zum Build Management gespannt werden, denn ein weiteres Ziel ist es, die Eingabeparameter für einen Build zu archivieren und damit die Reproduzierbarkeit von ganzen Versionen (nicht nur von Kompilaten) sicherzustellen. Es sollte automatisiert getaggt, das heißt, im Versionierungssystem ein Stand markiert werden, wann immer ein potenzielles Release in die nächste Phase des Stagings übergeht.

Eine unverzichtbare Anmerkung an dieser Stelle: Den Entwicklern muss vermittelt werden, dass Staging-Informationen kein Teil von Artefakten sein dürfen, da sie umgebungsspezifisch sind. Nur so können dieselben Artefakte in den unterschiedlichen Staging-Stufen verwendet werden. Leider ist das in der Java-Enterprise-Welt nicht immer einfach.

Geschrieben von
Enno Thieleke und Stefan M. Heldt
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.