Die Digitalisierung des Software Engineering

Automatisierung beschleunigt die Entwicklung von Individual-Software

Ohne Software geht heute fast gar nichts mehr. Die Anforderungen an Verfügbarkeit, Stabilität und Flexibilität steigen laufend, effizientere Produktionsmethoden sind gefragt. Die Software-Industrie steht vor dem Schritt, den die meisten Branchen längst hinter sich haben – sie muss ihre Prozesse digitalisieren.

Schneller, weiter, höher. Wie Sportler werden auch Unternehmen zunehmend auf Höchstleistung getrimmt. Effizienz und Produktivität sollen steigen, die Kosten sinken, Produktänderungen und -neuerungen rasch umgesetzt und eingeführt werden. Hierfür müssen Abläufe und Prozesse auf allen Ebenen optimiert werden, indem die Übergabe von Zwischenprodukten zwischen den Produktionsstufen harmonisiert wird.

 

Ein Lösungsweg liegt nahe: diese Ziele mit Hilfe von IT zu erreichen. In vielen Branchen ändert sich die Beziehung zur IT fundamental. IT-Beschaffungen sind längst nicht mehr fixe Beschaffungen analog zu Wasser und Strom. Ganz im Gegenteil, die IT entwickelt sich zum integralen Bestandteil eines Unternehmens. Als solcher entwickelt sie sich mit dem Unternehmen zusammen ständig und rasch weiter.

 

Durch ihre neue Beziehung zur IT orientieren sich Branchen zunehmend an erfolgreichen IT-Konzepten wie Mobile Apps und dem Internet of Things (IoT). Dies eröffnet neue Möglichkeiten. Unternehmen können Produkte zur Plattform ausbauen, indem sie deren Schnittstellen für Endkunden und Drittfirmen verfügbar machen. Dies ermöglicht Innovation von aussen, was zu einem exponentiellen Wachstum und Erfolg führen kann.

 

Kurz: Es wird viel Software benötigt. Das stellt IT-Unternehmen vor diverse Herausforderungen: Sie müssen die Entwicklung der Software vom Design bis zum Betrieb verbinden, die Produktion verbessern und beschleunigen, Medienbrüche eliminieren und einen raschen Informationsaustausch ermöglichen, um die Anforderungen des Markts zu erfüllen.

Vom Projekt zur Lösung

notitia30_hintergrund
Stefan Ott und Remo Meier

Aus dem vermehrten Einsatz und der höheren Prominenz von IT ergeben sich der Wunsch nach und eine neue Form der Zusammenarbeit zwischen dem Anwender/Kunden und seinem IT-Dienstleister. Im Vordergrund steht dabei ein enger und effizienter Kontakt, der von der Analyse und Konzeption bis zum produktiven Betrieb und zur Weiterentwicklung reicht. Auch der Auftraggeber ist heute oft ein anderer. War vor einigen Jahren noch die interne IT des Kunden der typische Auftraggeber, ist es heute in der Regel der Fachbereich selbst, der beispielsweise eine Applikation bestellt. Der Kunde hat viele Ideen und möchte diese einbringen. Um sie zu evaluieren und zu kommentieren, sind schnelle Lösungen gefordert. Dasselbe gilt für Änderungen. Sie sollen möglichst rasch berücksichtigt werden, damit der IT-Anbieter auch das entwickelt, was der Kunde sich wünscht. In einem solchen Kontext wandelt sich ein Projekt mit begrenzter Laufzeit zu einer Lösung mit der Laufzeit des ganzen Software-Lebenszyklus, also typischerweise Jahren. Software als Service im besten Sinne. Die Folge: Der Anspruch an Integration und Güte der Software steigt.

Innovation von aussen kann zu einem exponentiellen Wachstum und Erfolg führen.

Von der digitalen Produktionsinsel zum digitalen Förderband

Was ist nun der nächste Schritt? Im Vordergrund steht die Automatisierung der Prozesse. Ein entscheidender Vorteil und mit Potenzial verbunden ist die Tatsache, dass die Software-Industrie ihre Herausforderungen mit eigenen Mitteln angehen kann. Methodiken und Fachwissen sind vorhanden. Nun ist die Branche gefordert, dieses Wissen auf ihre eigenen Prozesse anzuwenden mit dem Ziel, sie neu zu gestalten und zu automatisieren.

 

Bedeutend dabei ist, dass der Lebenszyklus einer Software weit mehr als Entwicklung umfasst. Es geht darum, Einheitlichkeit und Durchgängigkeit zu schaffen, und zwar vom Design über die Entwicklung und das Testing bis hin zur Produktion und wieder zurück. So helfen zum Beispiel die folgenden Massnahmen, die Durchlaufzeit zu verkürzen: Deployments automatisieren, technische und organisatorische Massnahmen für Zero Downtime etablieren und abstimmen, Risk Management betreiben, Service Availability und Performance sicherstellen, Performance tracken und nicht zuletzt Qualität gewährleisten. Enge Zusammenarbeit mit dem Betrieb und präventive Massnahmen sollen dazu beitragen, dass ein System möglichst wartungsfrei wird. Kollaborationsplattformen beispielsweise beseitigen Barrieren zwischen beteiligten Organisationen, erleichtern den Austausch und machen Informationen jederzeit zugänglich.

Der Code auf Expansionskurs

Dabei müssen wir nicht bei null beginnen. Die Automatisierung von Software-Engineering-Leistungen ist seit Jahren im Gang. Das zeigt ein Blick auf den Code. Dieser umfasst heute weit mehr als bloss den eigentlichen Applikations-Code und Code für das «System». Dokumentation wird als Code mit Markup-Sprachen abgelegt. Grosse Teile der Infrastruktur von Servern, Netzwerken und Storage werden per Code definiert sowie automatisiert erstellt und unterhalten («Infrastructure as Code», DevOps). Auch Teile der Integration und des Testings werden automatisiert und zu Code. Hinzu kommt das vollautomatische Deployment von Software, ohne Downtime und unter Einbezug und vollautomatischer Steuerung von Load Balancern, oder die elastische Skalierung von Systemen wie Servern, Applikationen und Nodes aufgrund des Lastverhaltens, das in Monitoring-Systemen ersichtlich ist (automatisierte Rückkopplung).

Code umfasst heute weit mehr
als bloss den eigentlichen
Applikations- und System-Code.

Mit Code zur Reproduzierbarkeit

Mit ganzen IT-Systemen «in the Code» eröffnet sich eine Vielzahl neuer Möglichkeiten. So wird Code seit Jahren in Versionsverwaltungssystemen abgelegt. Dies ermöglicht unter anderem die Archivierung, die Einsicht in und den Vergleich von Versionen sowie die Rückführung zu früheren Zuständen. Von ganzen Systemen kann eine Kopie erstellt, weiterentwickelt und dann zurück in den Hauptentwicklungszweig integriert werden. Der Entwicklungszweig bleibt dabei voll funktionsfähig und weitere Änderungen lassen sich jederzeit schnell bis in die Produktion ausbreiten.

 

Für die Durchgängigkeit und die Automatisierung von der Entwicklung bis in die Produktion ist es von Vorteil, alle weiteren Einflüsse zu eliminieren. Prozesse und der Zustand der Systeme sollen in allen Umgebungen möglichst gleich sein. Dies ermöglicht es, Probleme frühzeitig zu erkennen oder sogar ganz zu vermeiden. Ansätze wie Immutable Infrastructures nehmen sich dieser Konzepte an: So werden Server nicht mehr im klassischen Sinne installiert, sondern aus dem Code fertige Images erstellt, die keine weiteren Änderungen an sich selbst erlauben. Diese Images werden automatisiert an die Server ausgeliefert, installiert und gestartet. Der Prozess ist für die Test- und die produktive Umgebung identisch. Die Konfiguration erhalten die Images aus ihrer Umgebung. Die Datenablage von Business Records bis Auditing und das Logging erfolgen in zentralen Datenbanken. Die statische Natur der Images erlaubt vielfältige Vereinfachungen an der Infrastruktur. Aspekte wie Firewalls, Fernzugriff, Benutzerkontrollen und File-System-Berechtigungen werden in vielen Bereichen irrelevant. Das genau gleiche System lässt sich jederzeit wieder aus dem Code erstellen und starten, genauso wie sich eine Software immer wieder neu bauen lässt. Jeder Schritt im System wird reproduzierbar. Es sind keine manuellen Schritte mehr nötig. All dies steigert die Effizienz, die Qualität und die Verfügbarkeit. Ein System ist stets exakt durch seinen Code definiert. Und eine einzelne Versionsnummer genügt, um den Code zu identifizieren.

Von Servern zu Events

Wieso hier stoppen? Der Unterhalt einer Server-Landschaft ist mit erheblichem Aufwand verbunden. Ist das System erst einmal im Code definiert und sind weitere Einflüsse eliminiert, lässt sich die Automatisierung einen bedeutenden Schritt weiterbringen. Inwieweit ist ein Server, den man installiert, startet und unterhält, noch notwendig, wenn sich dieser Server jederzeit aus dem Code neu erstellen lässt, in der extremsten Form gar für jede neue Anfrage oder jede Batch-Verarbeitung? Anstatt von Servern spricht man hier deshalb von Events. Die Vorteile des Event-Ansatzes liegen auf der Hand:

  • Installation und Starten von Servern entfallen.
  • Infrastruktur wird nur beansprucht, wenn sie verwendet wird, und skaliert mit der Verwendung.
  • Redundanz und Fehlertoleranz sind automatisch und transparent verfügbar. Events werden auf der Basis aktueller Last, geografischer Verteilung, verfügbarer Hardware und Anforderungen an die Code Performance dynamisch auf Maschinen verteilt.
  • Housekeeping von Servern entfällt.
  • Es gibt keine Server-Prozesse, die über Monate und Jahre aufrechterhalten werden müssen.

Verschiedene Faktoren beeinflussen eine erfolgreiche Anwendung des Event-Ansatzes. Im Alltag unerlässlich und technisch gut zu realisieren ist beispielsweise ein durchgängiges und in vielen Bereichen automatisiertes Monitoring. Die Skalierung von der Produktion bis in die Entwicklung und das Testing sind zentral, einerseits für eine effiziente Entwicklung und anderseits für eine lokale Nachvollziehbarkeit des Systems durch den Entwickler. Zusammen mit Unveränderbarkeit und Reproduzierbarkeit erlauben diese Faktoren nicht nur, die Kontrolle und die Übersichtlichkeit zu wahren, sondern – verglichen mit traditionellen Lösungen – auch viele Probleme zu vermeiden.

Durchgängigkeit

Erfolgreicher Code ist einfacher Code: Textdateien, die sowohl Mensch als auch Maschine lesen und verarbeiten können. Code lässt sich nicht nur für Implementation und Deployment verwenden, er kann auch in die Analyse und die Konzeption einfliessen. Dies schafft eine Durchgängigkeit über den ganzen Produkt-Lebenszyklus.

 

Aus diesem Grund ist der Business-Analyst heute aus grösseren IT-Projekten nicht mehr wegzudenken. Er weiss, was es schon gibt, er erhebt die (neuen) Anforderungen, konzipiert und dokumentiert eine Lösung. Diese Aufgaben bleiben grundsätzlich gleich. Die Vorgehensweise und die Art des Outputs ändern sich jedoch wesentlich, denn «klassische» Ansätze sind mit Medienbrüchen verbunden. Diese Medienbrüche verhindern das schnelle und korrekte Informationsmanagement, das unerlässlich ist, um die heutigen Ansprüche an Effizienz und Automation zu erfüllen.

Erfolgreicher Code ist einfacher Code: Textdateien, die sowohl Mensch als auch Maschine lesen können.

Der entscheidende Schritt besteht nun darin, das Konzept und das Informationsmodell der Business-Analyse (mit Use Cases, User Interfaces usw.) als Datenmodell zu speichern. Ein solches Modell existiert bereits – zumindest in den Köpfen der Business-Analysten. Seine Vorteile sprechen für sich:

  • Die Eingabe der Informationen ist strukturiert: Jede Information gehört an einen bestimmten Ort und wird nicht redundant geführt.
  • Die erfasste Information ist aktuell und sofort im Modell verfügbar: Wer Zugriff auf gewisse Daten will, sei es der Kunde, das Software-Team oder der Betrieb, kann diese jederzeit in der gewünschten Form erhalten. Zusätzlich fliesst Information in Form von Kommentaren und Feedback sofort zurück.
  • Beziehungen/Verknüpfungen zwischen den Konzepten können erstellt und verfolgt werden, was zu einem stimmigen Gesamtbild des Outputs beiträgt.
  • Für Weiterentwicklungen kann auf vorhandene Informationen zurückgegriffen werden. Zudem ist es möglich, Änderungen an diesen Informationen zu erfassen und durch die Verknüpfungen Lücken und unerwünschte Auswirkungen zu vermeiden.

Das Informationsmodell bildet das Fundament für die Projektplanung und -methodik: Seine Konzepte lassen sich als Tasks definieren. Durch Verknüpfung können alle nötigen Informationen für einen Task eingeholt werden. Dies ermöglicht eine bessere Aufwandsschätzung und somit eine bessere Verfolgung des Vorhabens. Nützlich sind dabei etwa Cockpits, die eine Übersicht über den Fortschritt der Entwicklung geben. Diese  nformationen sind projekttechnisch. Die fachlichen Informationen sind reine Referenzen zum Informationsmodell.

 

Alternativ ist es möglich, zum Beispiel Domain-Specific Languages (DSL) einzusetzen, um Systeme in Code zu modellieren. Das Modell beschreibt Komponenten sowie deren Schnittstellen und Interaktionen. Es kann in Repositories abgelegt und online zugänglich gemacht werden. Modelle sind hier nicht auf die Beschreibung begrenzt, sondern dienen auch als Ausgangspunkt für die Erstellung von Software-Komponenten. Sie lassen sich aktualisieren oder in späteren Phasen eines Projekts in neuere Modelle überführen. Umgekehrt ermöglichen sie bei Problemen wertvolle Rückschlüsse auf betroffene Use Cases.

Die Erkenntnis

Die nächsten Schritte und Erfolge des Software Engineering liegen immer noch «in the Code», allerdings mit Schwerpunkt auf Digitalisierung und Automatisierung. Damit gehen neue Herausforderungen einher, insbesondere für Architektur und Design. Für all diese Aufgaben braucht es nach wie vor ausgewiesene Software-Ingenieure, die in der Lage sind, neue Wege zu beschreiten und im Team zu arbeiten.

 

 

Autoren

Remo Meier

Remo Meier, MSc. und Dr. sc. ETH Zürich, arbeitet seit 2013 im Application Engineering von AdNovum. Dieser Bereich beschäftigt sich mit der Bereitstellung von Mitteln für eine effiziente Software-Entwicklung. In diesem Zusammenhang sind Themen rund um Digital Evolution von grosser Bedeutung. Hat Remo Meier mal frei, ist er im Winter öfter in den Bergen anzutreffen.

 

Stefan Ott

Stefan Ott, MA in Information Management, ist seit 2007 als Expert Business Analyst und Head of Business Analysis bei AdNovum tätig. Innovation und Evolution stehen bei ihm nicht nur in den Projekten auf dem Programm. Er engagiert sich auch inhouse beim Ausbau der Dienstleistungen des Business-Analyse-Teams. Zu seinen Aufgaben gehören die Ausbildung der Mitarbeitenden sowie die Definition und die Weiterentwicklung von Business-Analyse-Prozessen und -Tools. Eines seiner Hobbys ist das Marathonlaufen, während dessen ihm viel Zeit für die Ideenentwicklung und für Optimierungsvarianten bleibt.