Die Devisen „Software is eating the world” und „Business must innovate faster” begleiten die Wirtschaft seit mehr als zehn Jahren. Um weiterhin konstant qualitative Software an die sich hier ständig ändernden Anforderungen anzupassen und zuverlässig auszuliefern, bedarf es guter Software-Architekturen. Interne Qualitäten – zum Beispiel die hohe Wartbarkeit -, auf welche zuerst die Entwickler der Software treffen, haben einen erheblichen Einfluss auf ein schnelles Time-to-Market. Die interne Qualität der Software-Architektur stellt also den Schlüssel dar, damit Unternehmen mit dem Wandel Schritt halten und langfristig erfolgreich agieren.
Was ist eine Software-Architektur?
Es gibt verschiedene Definitionen des Begriffs „Software-Architektur“. Als Standardisierungsorganisation fasst die ISO darunter die „fundamentalen Konzepte oder Eigenschaften eines Systems in seiner Umgebung, verkörpert durch seine Elemente, Beziehungen und den Prinzipien seines Designs und seiner Evolution“ zusammen. Bei einer Software-Architektur handelt es sich folglich um eine abstrakte Sicht auf ein System. Je nach Informationsbedürfnis sind unterschiedliche Sichten denkbar, beispielsweise zur Sicherheit, zu den Prozessen oder zur Verteilung. Die ISO lässt allerdings einige wesentliche Konzepte offen, zum Beispiel hinsichtlich der fundamentalen Bestandteile.
Martin Fowler erachtet es als bessere Definition von Architektur, dass es um die „wichtigen Dinge“ ginge, die „schwer zu ändern“ wären. Für die Entwickler bestehe die Herausforderung darin, eben jene wichtigen Elemente der Architektur festzulegen und zu identifizieren. Durch seinen Vergleich von Architektur und Optionsscheinen aus der Finanzwelt stellt Gregor Hohpe den Business-Wert einer Architektur in den Vordergrund. Architektur schaffe und verkaufe Optionen. Optionen gäben den Menschen die Möglichkeit, die wichtigen Entscheidungen in die Zukunft zu verschieben, wenn sie mehr Informationen besäßen, um die richtigen Entscheidungen zu treffen. Je mehr Unsicherheit bezüglich der Entscheidungen herrsche, desto wertvoller könne deren Verschiebung, und damit die Architekturoptionen, sein.
Fortwährende Anpassung
Im Sinne der vorgenannten Definitionen von Software-Architektur bedeutet eine schlechte Architektur, falsche Entscheidungen gefällt oder wesentliche Aspekte des Gesamtsystems nicht gut genug berücksichtigt zu haben. Einige der Qualitätsmerkmale des Systems sind somit mangelhaft. Ein System, das nicht den erwarteten Qualitätsstandards entspricht, gefährdet den geschäftlichen Erfolg.
Vom Benutzer direkt wahrnehmbare Qualitäten des Systems werden als externe Qualitäten bezeichnet. Entscheidungen, die etwa zu einer schlechten Performanz geführt haben, können den Nutzer dazu bewegen, sich nach anderen Lösungen umzusehen, sofern er die Möglichkeit dazu hat. Qualitäten des Systems, die zuerst dessen Entwicklern auffallen, heißen interne Qualitäten. Entscheidungen, die beispielsweise in einer schlechten Wartbarkeit des Systems resultieren, können die Weiterentwicklung, den Release neuer Features sowie das Beheben von Defekten und Fehlern in der bestehenden Software verlangsamen.
Eine gute Architektur besagt, die richtigen Entscheidungen in der Vergangenheit getroffen zu haben. Bei stetig wechselnden Anforderungen ist das keine einfache Aufgabe. Denn die passenden Entscheidungen für die Anforderungen der Vergangenheit können die falschen für die aktuellen Herausforderungen sein. Das bedeutet aber nicht, auf Architekturüberlegungen zu verzichten, nur weil sich die Anforderungen an das Software-System ständig ändern. Ganz im Gegenteil: Es erfordert von der Architektur, dass sich das Software-System fortwährend an die neuen Rahmenbedingungen adaptieren lässt. Neue Features kommen hinzu, vorhandene müssen aktualisiert und obsolet gewordene entfernt werden. Diese Änderungen agil durchzuführen und qualitativ, zuverlässig und schnell auszuliefern, stellt hohe Ansprüche an die interne Qualität des Software-Systems und folglich an dessen Architektur.
Eine gute Architektur
Der Fokus bei der Entwicklung einer Architektur liegt auf der Unterstützung der Entwickleraufgaben im gesamten Lebenszyklus der Software. Das heißt: Die internen Qualitäten der Architektur haben einen positiven Einfluss auf die Entwicklung neuer Features, deren Qualitätskontrolle, Veröffentlichung, anschließenden Betrieb und das Finden und Ausbessern von Fehlern. Dazu muss die Architektur eine einfache Test-, Ausliefer- und Wartbarkeit der Software, also Prozesse rund um die kontinuierliche Integration und Auslieferung, ermöglichen. Ein modulares Design und eine lose Kopplung zwischen den Komponenten und Diensten hilft dem Entwickler, Änderungen in der Software autonom auszuführen und damit nicht nur schneller, sondern auch weniger fehleranfällig zu agieren. Das meint jedoch nicht, die externen Qualitäten zu vernachlässigen. Letztendlich fördert eine hohe interne Qualität der Software eine konstant hohe externe Qualität.
Bei der technischen Umsetzung unterstützt das Wissen um anwendbare Architekturprinzipien und -stile. Dies sind allgemeine Lösungsmuster für immer wieder auftretende Probleme. Oft kommt nicht nur ein Architekturstil zum Einsatz, sondern eine Kombination aus vielen. Ergänzt wird die Realisierung um die Einhaltung von Prinzipien, wie dem modularen Design oder der losen Kopplung zwischen den einzelnen Bestandteilen. Gestützt durch statische Code-Analyse lässt sich die Beachtung der Prinzipien fortwährend analysieren und verbessern. Die ständige Verminderung der sich in der Entwicklung auftürmenden technischen Schuld sorgt für eine hohe interne Qualität des Software-Systems über die Zeit.
Beispiel einer IIoT-Plattform
Bei Proficloud.io handelt es sich um die Industrial-Internet-of-Things-Plattform von Phoenix Contact. Mit Proficloud.io führt das Unternehmen seine Strategie fort, das traditionelle Hardware-Geschäft um Software-seitige Lösungen und Mehrwertdienste für seine Kunden zu ergänzen und auszubauen. Proficloud.io deckt mit Funktionen aus der Fernüberwachung und -administration von Komponenten, der Visualisierung von erfassten Prozessdaten bis zur Unterstützung von Energiemanagementprozessen ein breites Spektrum an Anwendungsfällen ab.
Eine Event-basierte Microservice-Architektur mit lose gekoppelten, sich asynchron über Nachrichten austauschenden Services erlaubt es, sich schnell an die sich verändernden Märkte anzupassen. Dazu fokussiert sich die Architektur vorrangig auf die Wart-, Test- und Änderbarkeit der Software und hilft auf diese Weise, schnell neue Features auszurollen. Eine hohe Anzahl an Komponenten, Systemen und Geräten muss jederzeit zuverlässig und sicher an Proficloud.io angebunden werden. Daraus ergeben sich hohe Ansprüche an die Portier- und Adaptierbarkeit der entsprechenden Software, die sich auf den Geräten um die Ankopplung an Proficloud.io kümmert. Auf der Cloud-Seite ermöglicht die Nutzung von Container-Orchestrierungssystemen, wie Kubernetes, die notwendige Skalier-, Zuverlässig- und Verteilbarkeit der selbst entwickelten Microservices.
Neue Features
Eine gute Software-Architektur zeichnet sich durch eine hohe interne Qualität aus, welche die Entwickler unterstützt, das Gesamtsystem fortwährend an sich ändernde Anforderungen anpassen zu können. Dadurch werden eine kontinuierlich hohe, für Benutzer und Kunden erfahrbare externe Qualität sowie ein schnellen Time-to-Market von neuen Features erreicht. Die Verwendung geeigneter Techniken aus dem Software-Engineering sowie das Minimieren der technischen Schuld der Software bilden den Schlüssel zum Erzielen und Beibehalten einer hohen intern sichtbaren Qualität.