Was ist eine Softwarearchitektur?

Im Rahmen des Softwarearchitekturprozesses werden die Kundenanforderungen erfasst und analysiert. Anschließend wird ein Entwurf für eine Software erstellt, die diesen Anforderungen entspricht. Erfolgreiche Softwareentwürfe müssen die unvermeidbaren Kompromisse, die sich aus widersprüchlichen Anforderungen ergeben, ausgleichen, die im Laufe der Zeit entwickelten Entwurfsgrundsätze und bewährten Verfahren einhalten und moderne Hardware-, Netzwerk- und Management-Systeme ergänzen. Eine stabile Softwarearchitektur erfordert fundierte Erfahrungen, sowohl in theoretischen als auch in praktischen Bereichen, sowie die Visionsfähigkeit, um augenscheinlich vage Geschäftsszenarien und -anforderungen in solide und praktikable Entwürfe umzusetzen.

Eine Softwarearchitektur umfasst das Definieren einer strukturierten Lösung, die alle technischen und betrieblichen Anforderungen erfüllt und gleichzeitig allgemeine Qualitätsattribute wie Leistung, Sicherheit und Verwaltbarkeit optimiert. Sie beinhaltet eine Reihe von Entscheidungen basierend auf den verschiedensten Faktoren. Dabei kann sich jede einzelne Entscheidung erheblich auf die Qualität, Leistung, Verwaltbarkeit und den Gesamterfolg der Software auswirken.

Moderne Software ist selten eigenständig. In den meisten Fällen interagiert sie zumindest mit einer Datenquelle. Dies kann zum Beispiel eine Unternehmensdatenbank sein, die die Informationen, mit denen die Benutzer der Software arbeiten, zur Verfügung stellt. Moderne Software muss in der Regel auch mit anderen Services und Netzwerkfunktionen interagieren, um eine Authentifizierung durchzuführen, Informationen abzurufen und zu veröffentlichen und eine integrierte Benutzererfahrung zur Verfügung zu stellen. Ohne eine geeignete Architektur kann es schwierig oder sogar unmöglich sein, die Software bereitzustellen, zu betreiben, zu warten oder erfolgreich in andere Systeme zu integrieren, sodass sie die Benutzeranforderungen nicht erfüllen würde.

Eine Softwarearchitektur lässt sich als eine Art Zuordnung zwischen dem, was eine Softwarekomponente erreichen muss, und den Details der Implementierung als Code vorstellen. Durch den richtigen Aufbau der Architektur wird eine optimale Übereinstimmung zwischen den Anforderungen und den Ergebnissen sichergestellt. Software mit einer gelungenen Architektur führt die festgelegten Aufgaben innerhalb der Parameter der ursprünglichen Anforderungen aus, und zwar in einer Weise, die Leistung, Sicherheit, Zuverlässigkeit und viele andere Faktoren maximiert.

Auf höchster Ebene sollte der Architekturentwurf die Struktur des Systems offenlegen, die Implementierungsdetails jedoch verbergen. Er sollte alle Anwendungsfälle und Szenarien erfassen, versuchen, die Anforderungen aller Beteiligten zu berücksichtigen, und soweit wie möglich alle funktionalen und qualitätsbezogenen Anforderungen erfüllen.

Warum ist eine Softwarearchitektur wichtig?

Die Anforderungen an moderne Software sind zunehmend komplex, da Benutzer mehr von ihren Anwendungen erwarten. Einfache eigenständige Desktop-Anwendungen reichen in den meisten Geschäftsszenarien und kommerziellen Szenarien nicht mehr aus. In unserer vernetzten Welt muss eine Anwendung mit anderen Anwendungen und Services interagieren und in verschiedenen Umgebungen wie der Cloud und auf mobilen Geräten ausgeführt werden können. Die in der Vergangenheit üblichen monolithischen Entwürfe wurden durch komponentisierte serviceorientierte Software ersetzt, die anhand von Frameworks, Betriebssystemen, Laufzeithosts und Netzwerken Features implementiert, die noch vor wenigen Jahren völlig unbekannt waren.

Diese Komplexität wirkt sich nicht nur auf den Entwurf aus, sondern auch auf die Bereitstellung, Wartung und Verwaltung der Software. Die Gesamtbetriebskosten (TCO) der Software bestehen nun vor allem aus Kosten, die nach der Bereitstellung anfallen. Eine Anwendung mit einer gelungenen Architektur minimiert die TCO durch Reduzieren des finanziellen und zeitlichen Aufwands, der zur Bereitstellung der Anwendung, zu ihrem kontinuierlichen Betrieb, zu ihrer Aktualisierung aufgrund geänderter Anforderungen und zur Behebung von Problemen erforderlich ist. Außerdem vereinfacht sie den User Support und die Administration.

Die Software muss außerdem bestimmte unerlässliche Kriterien erfüllen, um erfolgreich zu sein. Sie muss Sicherheit bieten, sodass die Anwendung und ihre Daten sowohl vor böswilligen Angriffen als auch vor versehentlichen Fehlern geschützt ist. Sie muss robust und zuverlässig sein, sodass Ausfälle und die damit verbundenen Kosten minimiert werden. Die Software muss innerhalb der erforderlichen Parameter zur Erfüllung der Kundenanforderungen, wie maximale Reaktionszeit oder eine bestimmte Arbeitslastkapazität, funktionieren. Einerseits muss sie wartbar sein, um die Verwaltungs- und Supportkosten zu minimieren, und andererseits erweiterbar, um die unvermeidlichen Änderungen und Upgrades, die im Laufe der Zeit erforderlich werden, zu ermöglichen.

Mit diesen Faktoren gehen einige Kompromisse einher. Das Implementieren der sichersten Mechanismen durch komplexe Verschlüsselung geht beispielsweise auf Kosten der Leistung. Durch Implementieren umfassender Konfigurations- und Upgrade-Optionen kann die Bereitstellung und Verwaltung komplizierter ausfallen. Darüber hinaus steigen die Kosten der Implementierung mit zunehmender Komplexität des Entwurfs. Eine gelungene Architektur zielt darauf ab, diese Faktoren auszugleichen, um das optimale Ergebnis für das spezifische Szenario zu erhalten.

Was ist die Aufgabe einer Softwarearchitektur?

Am Anfang der Softwarearchitektur stehen eine Reihe von Anforderungen. Diese können in Form von Diagrammen, Prozessablaufdiagrammen, Modellen oder dokumentierten Listen mit Betriebsaufgaben vorliegen, die die Software ausführen muss. In der Regel äußert der Kunde oder Partner weniger präzise Anforderungen, wie das Erscheinungsbild oder die Art und Weise, wie bestimmte Benutzeroberflächen für allgemeine Aufgaben funktionieren sollen. Die Anforderungen müssen außerdem Informationen über vorhandene Software, Systeme, Hardware und Netzwerke umfassen, mit der die neue Software eine Schnittstelle bildet. Außerdem sind andere Faktoren wie der Bereitstellungs- und Wartungsplan und natürlich das für das Projekt verfügbare Budget zu nennen.

Der Softwarearchitekt muss die Anforderungen des Kunden berücksichtigen. Der allgemeine Begriff "Kunde" umfasst in der Regel drei sich entgegenstehende Verantwortungsbereiche: die Geschäftsanforderungen, die Anforderungen des Benutzers und die Systemanforderungen. Die Geschäftsanforderungen definieren im Normalfall eine Reihe von Faktoren wie die Geschäftsprozesse, die Leistungsfaktoren (z.B. Sicherheit, Zuverlässigkeit und Durchsatz) sowie die Budget- und Kostenbeschränkungen. Zu den Benutzeranforderungen gehören der Entwurf der Benutzeroberfläche, Betriebsfunktionen und die Benutzerfreundlichkeit der Software. Die Systemanforderungen umfassen Hardware, Netzwerke sowie Laufzeitumgebungsfunktionen und -beschränkungen. Abbildung 1 zeigt, inwieweit diese verschiedenen Anforderungen variieren können. Der Architekt muss daher versuchen, einen Entwurf zu erzielen, der in den überlappenden Bereich passt.

Entgegenstehende Anforderungen eines typischen Kunden
Abbildung 1: Entgegenstehende Anforderungen eines typischen Kunden

Softwarearchitekten verfolgen jeweils eigene Ansätze, um Anforderungen zu erfassen und zu analysieren und die Architektur zu definieren. Die Fragen, die sie gemeinhin beantworten müssen, sind z.B. "Wie arbeiten die Benutzer mit der Anwendung?", "Wie wird die Anwendung in der Produktion bereitgestellt und verwaltet?", "Welche Anforderungen an Qualitätsattribute, wie Sicherheit, Leistung, Parallelität, Internationalisierung und Konfiguration, sind für die Anforderung zu berücksichtigen?", "Wie kann der Entwurf der Anforderung Flexibilität und Wartbarkeit im Laufe der Zeit sicherstellen?" und "Welche architekturbezogenen Trends können die Anwendung jetzt oder nach der Bereitstellung beeinflussen?".

Die letzte Frage ist nicht nur interessant, sondern auch wichtig. Ein guter Softwareentwurf erfüllt nicht nur die jetzigen Kundenanforderungen, sondern auch die künftigen Anforderungen. Diese Tatsache wirkt sich auf die Entscheidungen des Architekten in Bezug auf die Hardware, Komponenten, Frameworks, Laufzeitplattformen, Managementsoftwaresysteme und viele andere Features aus, die in die Software integriert sind oder in die die Software integriert werden muss.

Wie die meisten Aufgaben in den Bereichen Softwareentwurf und -entwicklung ist der Entwurf der Architektur sowohl ein vorausplanender als auch ein iterativer Prozess. Viele anfängliche Aufgaben wie die Anforderungsanalyse, technische Recherchen und die Ermittlung der Ziele finden in der Regel am Anfang des Prozesses statt. Der nächste Schritt besteht darin, wichtige Szenarien für den Entwurf zu ermitteln. Dieses sind die primären Anforderungen, die die Software erfüllen muss, und die Beschränkungen, innerhalb derer sie betrieben werden muss. Ausgehend von diesen Informationen kann der Architekt eine Übersicht über die Anwendung erstellen. Diese Übersicht umfasst ausführliche Details wie der Anwendungstyp (Web, Telefon, Desktop oder Cloud), die Bereitstellungsarchitektur (in der Regel ein geschichteter Entwurf mit Komponenten, die über Hardware- und Netzwerkgrenzen hinweg kommunizieren), die geeigneten Architekturstile, die eingehalten werden (z.B. n-Tier, Client-Server oder serviceorientiert), sowie die Implementierungstechnologien, die für das Szenario am besten geeignet sind.

Von diesem Punkt ausgehend kann der Architekt potenzielle Entwürfe erstellen, die die wichtigsten der zuvor ermittelten Anforderungen auf hoher Ebene erfüllen. Dieser Entwurf wird dann überprüft und mit den Schlüsselszenarien getestet. Häufig erfolgt dies in Verbindung mit Feedback vom Kunden und Testversionen, um sicherzustellen, dass die Lösung optimal ist. Dieser Fall ist in der ersten Iteration zwar unwahrscheinlich, doch mit Wiederholung des Zyklus nähert sich der Entwurf den Anforderungen und Schlüsselszenarien an. Abbildung 2 zeigt diesen iterativen Ansatz.

Iterativer Prozess des Architekturentwurfs
Abbildung 2: Iterativer Prozess des Architekturentwurfs

Mit zunehmender Differenziertheit des Entwurfs und mit der Identifizierung einzelner Aufgaben und Komponenten kann der Architekt den Entwurf in jeder Phase verfeinern und Details hinzufügen. Beispielsweise lassen sich nach der Festlegung des Architekturstils und des Bereitstellungsansatzes Entscheidungen hinsichtlich der Kommunikation zwischen den Ebenen und Komponenten treffen. Dazu gehört beispielsweise die Auswahl eines Protokolls basierend auf gegenwärtigen und künftigen Anforderungen unter Berücksichtigung der Vorankündigung neuer Technologien und Funktionen, die in den nächsten Standards definiert sind.

Das Endprodukt des Architekten besteht in der Regel aus einer Reihe von Schemata, Modellen und Dokumenten, die die Anwendung aus verschiedenen Perspektiven definieren. Kombiniert geben sie Entwicklern, Testteams, Administratoren und dem Management alle zum Implementieren des Entwurfs erforderlichen Informationen an die Hand. Diese Informationen beschreiben die Struktur und das Layout der Komponenten und Anwendungsebenen, die Art und Weise, wie anforderungsübergreifende Aspekte wie Protokollierung und Validierung verarbeitet werden, den Test- und Bereitstellungsplan und die Dokumentation zur Unterstützung von Entwicklern, Administratoren und Support-Mitarbeitern.

Der endgültige Entwurf muss außerdem die Qualitätsattribute festlegen, die die Anwendung erfüllen muss. Diese Attribute sind das Ergebnis der vom Architekten unter Absprache mit dem Kunden berücksichtigten Entscheidungen und Kompromisse. Sie umfassen Definitionen der Sicherheitsanforderungen und den Sicherheitsimplementierungsplan, die erforderliche Skalierbarkeit und Leistung bei Bereitstellung auf der Zielplattform, die Möglichkeiten zur Implementierung von Wartbarkeit und Erweiterbarkeit sowie die Features, die die Interoperabilität mit anderen Systemen ermöglichen.

Welche Fähigkeit benötigt ein Softwarearchitekt?

Es ist offensichtlich, dass ein Softwarearchitekt breit gefächerte soziale sowie fachliche Kompetenzen benötigt. Während der Phasen der Anforderungsanalyse und Überprüfung muss der Architekt mit dem Kunden zusammenarbeiten, sich mit Partnern und anderen Teammitgliedern beraten und als Vermittler für Manager, Benutzer und Systemadministratoren agieren. Ausgezeichnete soziale Kompetenzen können hier zu einem besseren Ausgangsplan und genaueren Anforderungen führen und so später Zeit und Aufwand sparen.

Ein Softwarearchitekt benötigt außerdem fachliche Kompetenzen, um zu verstehen, wie moderne Softwaresysteme, Frameworks und Hardware die Anforderungen unterstützen, wie Netzwerk- und Betriebssystemfaktoren die Entwurfsentscheidungen beeinflussen und wie sich Trends und Änderungen in diesen Bereich auf den Entwurf auswirken. Nach der anfänglichen Anforderungsanalyse muss ein Softwarearchitekt außerdem fachliche Kompetenzen in den Bereichen Entwurfsmuster, Kommunikations- und Messagingstandards, Codefunktionen, Sicherheitsaspekte und Leistungseinschränkungen anwenden. Alle diese Bereiche erfordern fundierte Kenntnisse der Technologien, die zum Implementieren der endgültigen Software eingesetzt werden.

Selbstverständlich benötigt der Softwarearchitekt auch Visionsfähigkeit. Es lässt sich häufig erst erkennen, wie die Systeme zusammenpassen und zusammenarbeiten, wie sie partitioniert und bereitgestellt werden und wie sie mit Benutzern interagieren, sobald der Architekt die Gesamtlösung vor seinem geistigen Auge sieht. Dazu ist ein strukturierter Ansatz und ausgesprochene Detailgenauigkeit erforderlich, um alle Anforderungen und Beschränkungen zu sortieren und zu verstehen und diese nach und nach in einen flüssigen und umfassenden technischen Entwurf zu verwandeln. Zur Visualisierung des Endergebnisses ist jedoch auch Spürsinn und Vorstellungskraft erforderlich, um sich anschließend methodisch der idealen Lösung zu nähern.