Softwarearchitektur
Wie gut eine Unternehmenssoftware mit den Anforderungen und dem Unternehmen wächst, hängt entscheidend von ihrer internen Struktur ab.
- Lassen sich neue Funktionen und geänderte Geschäftsprozesse schnell umsetzen?
- Sind Anbindungen an andere Systeme Ihres Unternehmens und Ihrer Geschäftspartner leicht zu realisieren?
- Skaliert Ihre Anwendung, also funktioniert sie weiterhin schnell und zuverlässig, auch wenn die Nutzerzahlen steigen?
- Passt die Struktur Ihrer Software zu Ihrem Vorgehensmodell bei der Entwicklung?
Die Antworten auf diese Fragen sind wesentlich durch die Architektur Ihrer Software bestimmt. Bei der Gestaltung einer zukunftsfähigen Softwarearchitektur halte ich folgende Aspekte für besonders wichtig:
Basistechnologie
Welche Plattform und welche Frameworks werden eingesetzt? Die Java Enterprise Edition (JEE) ist hier eine solide Basis – aber es kann durchaus Gründe dafür geben, auch Client/Server-Systeme ausschließlich auf der Java Standard Edition und Open Source Frameworks wie Spring und Hibernate aufzubauen.
Neben verwendeten Frameworks und Tools externer Anbieter entwickelt sich zudem im Laufe der Entwicklung einer Anwendung fast zwangsläufig ein eigenes Framework. Solche eigenen Frameworks sind nötig, um allgemeine Funktionen der Anwendung nur einmal zu implementieren (DRY-Prinzip). Sie sollten aber so leichtgewichtig wie möglich sein, um den Wartungsaufwand im Rahmen zu halten und den Umstieg auf neuere Versionen der Basisplattform und der verwendeten externen Frameworks nicht unnötig zu erschweren.
Modularisierung und Schnittstellen
Eigentlich ein ganz alter Hut, aber ein nach wie vor aktuelles Thema: Meine Erfahrung zeigt, dass in der Praxis oft große monolithische und damit kaum noch wartbare Systeme anzutreffen sind (und das gilt auch für wenige Jahre alte Java-Anwendungen). Die Aufteilung eines Softwaresystems in Module und die Definition der Schnittstellen zwischen diesen bestimmen entscheidend die Wartbarkeit des Systems.
Modellgetriebene Verfahren
Was ist der richtige Abstraktionsgrad zur Beschreibung der Funktionalität Ihrer Software? Oft unterscheiden sich hier die meist saubere und gut verständliche (aber häufig auch oberflächliche) fachliche Beschreibung erheblich von der tatsächlichen Implementierung, die sich in Sourcecode und Datenbankschema manifestiert. Modellgetriebene Ansätze versuchen, diese beiden Welten wieder näher zusammenzurücken. UML bietet hier eine etablierte Notation für Datenstrukturen und Abläufe. Ziel beim modellgetriebenen Entwurf und der modellgetriebenen Entwicklung ist, diese Spezifikation auch als Teil der Implementierung zu verwenden und damit beides synchron zu halten (insbesondere auch bei nachträglichen Änderungen).
Testbarkeit
Zur Qualitätssicherung sind systematische und ausführliche Tests der entwickelten Software unabdingbar. Neben den inzwischen üblichen automatisierten Modultests (z. B. mit JUnit) werden Integrations- und Systemtests noch weitgehend manuell durchgeführt. Um den Testaufwand bei häufigen Änderungen der Software gering zu halten, ist es entscheidend, die Software so zu gestalten, dass diese schnell in einer Umgebung für manuelle Tests verfügbar ist und dass insbesondere die Kernfunktionen auch durch automatische Regressionstests geprüft werden können.
Der Einsatz agiler Methoden im Entwicklungsprozess stellt besonders hohe Anforderungen an die Softwarearchitektur, weil diese die schon im Prozess vorgesehenen häufigen Änderungen gut unterstützen muss. Insbesondere modellgetriebene Verfahren und automatisierte Integrationstests bringen hier große Vorteile.
Als erfahrener Softwarearchitekt biete ich Beratung und Unterstützung zu allen Themen rund um die Softwarearchitektur.