Einführung
Komplexität ist ein zentrales Thema in der Softwareentwicklung. Durch Erhöhen des Abstraktionsgrads
können Komplexität und Umfang der erforderlichen Dokumentation eines Projekts verringert werden. Dies
kann durch Wiederverwendung, die Verwendung von Modellierungstools auf hoher Ebene und Stabilisierung
der Architektur in einem frühen Stadium erreicht werden.
|
|
Vorteile
|
-
Produktivität
-
Verringerte Komplexität
|
Muster
|
-
Wiederverwendung vorhandener Assets
-
Verwendung von Tools und Sprachen auf höherer Ebene, um den Umfang der erzeugten
Dokumentation zu reduzieren
-
Vorrangiger Schwerpunkt auf der Architektur
-
Ausrichtung der Architektur auf Hochverfügbarkeit, Qualität, Verständlichkeit,
Komplexitätsverwaltung
|
Antimuster
|
-
Direkter Übergang von vagen Anforderungen der hohen Ebene zu handgefertigtem Code:
-
Da nur wenige Abstraktionen verwendet werden, werden viele Diskussionen auf
Codeebene und nicht auf konzeptioneller Ebene geführt, wobei unter anderem
viele Gelegenheiten für Wiederverwendung verpasst werden.
-
Formlos erfasste Anforderungen und andere Informationen erfordern, dass
Entscheidungen und Spezifikationen mehrfach überarbeitet werden müssen.
-
Die Vernachlässigung der Architektur führt später im Projekt zu umfassenden
Nacharbeiten.
|
|
Diskussion
Eines der Hauptprobleme in der Softwareentwicklung ist Komplexität. Die Erfahrung hat gezeigt, dass sich die
Verringerung der Komplexität wesentlich auf die Produktivität auswirkt. Auf einer höheren Abstraktionsebene zu
arbeiten, verringert die Komplexität und vereinfacht die Kommunikation.
Ein effektiver Ansatz für die Verringerung der Komplexität ist die Wiederverwendung vorhandener Assets, z. B.
wiederverwendbarer Komponenten, traditioneller Systeme, vorhandener Geschäftsprozesse, Muster oder
Open-Source-Software. Zwei anschauliche Beispiele für Wiederverwendung, die einen wesentlichen Einfluss auf die
Softwarebranche in den letzten zehn Jahren hatten, sind
-
die Wiederverwendung von Middleware wie Datenbanken, Webservern und Webportalen und in jüngerer Zeit
-
die Wiederverwendung von Open-Source-Software, die viele kleinere und größere Komponenten zur Verfügung stellt.
In der näheren Zukunft werden Web-Services einen nicht unerheblichen Einfluss auf Wiederverwendung haben, da sie
einfache Methoden sind, um größere Teile von Funktionalität auf separaten Plattformen und mit einer losen Kopplung
zwischen dem Verbraucher und dem Provider eines Service wiederzuverwenden. Dies bedeutet, dass unterschiedliche
Kombinationen von Services einfacher nutzbar sind, um Geschäftsanforderungen gerecht zu werden. Wiederverwendung wird
auch durch offene Standards wie RAS, UDDI, SOAP, WSDL, XML und UML vereinfacht.

Wiederverwendung vorhandener Assets durch serviceorientierte Architektur
Eines der Probleme bei der Wiederverwendung besteht darin, dass zwei Komponenten zur Entwicklungszeit über die
Existenz der jeweils anderen informiert sein müssen. Serviceorientierte Architekturen mindern das Problem durch so
genannte lose Kopplung. Ein Konsument eines Service kann dynamisch einen Provider eines Service finden. Somit können
wir vorhandene Komponenten oder traditionelle Systeme in Services packen und ermöglichen damit anderen Komponenten oder
Anwendungen, unabhängig von der Plattform und der Implementierungstechnologie über eine standardisierte Schnittstelle
dynamisch auf die Fähigkeiten der Services zuzugreifen.
Ein anderer Ansatz für die Verringerung der Komplexität und Verbesserung der Kommunikation ist die Verwendung von
Tools der höheren Ebene, Frameworks und Sprachen:
-
Standardsprachen wie Unified Modeling Language (UML) und so genannte Rapid Application Languages
wie EGL bieten die Möglichkeit, Konstrukte der hohen Ebene wie Geschäftsprozesse und Servicekomponenten zu
beschreiben, was die Kollaboration im Umfeld von Konstrukten der hohen Ebene vereinfacht und unnötige Details
verbirgt.
-
Design- und Konstruktionstools können den Übergang von Konstrukten der hohen Ebene zu
funktionierendem Code automatisieren:
-
-
Sie stellen Assistenten bereit, die Design-, Konstruktions- und Testaufgaben automatisieren, indem sie Code
generieren und die Verwendung von Code-Snippets ermöglichen.
-
Sie konvertieren Integrations- und Testaufgaben durch integrierte Entwicklungs-, Build- und Testumgebungen
in nahtlose Entwicklungsaufgaben.
-
Portfoliomanagementtools ermöglichen die Verwaltung finanzieller und anderer Aspekte mehrerer
Projekte als Entität (im Gegensatz zur Verwaltung der einzelnen Aspekte als Einzelentitäten).
Kurz gesagt, Tools der höheren Ebene erfassen Schlüsselmodellierungsinformationen in grafischer Form und bieten damit
eine leistungsstarke und attraktive Methode, diese Informationen zusammenzufassen und zu präsentieren. Die Vorteile der
visuellen Modellierung sind detaillierter in Unterstützendes Material: Visuelle Modellierung beschrieben.
Ein dritter Ansatz für die Verwaltung der Komplexität ist die Konzentration auf die Architektur, um ein
Geschäft zu definieren oder ein System oder eine Anwendung zu entwickeln. In der Softwareentwicklung ist das Ziel, die
Architektur bereits in einem frühen Stadium des Projekts zu entwerfen, zu implementieren und zu testen. Das bedeutet,
die Konzentration liegt in einem frühen Stadium des Projekts auf den folgenden Zielen:
-
Bausteine auf hoher Ebene und wichtigste Komponenten, ihre Zuständigkeiten und ihre Schnittstellen definieren.
-
Architekturmechanismen entwerfen und implementieren, d. h. gebrauchsfertige Lösungen für allgemeine Probleme,
die sich z. B. mit der Persistenz oder Garbage-Collection beschäftigen.
Wenn Sie bereits in einem frühem Stadium die richtige Architektur finden, haben Sie eine Entwurfsstruktur für Ihr
System, die die Verwaltung der Komplexität vereinfacht, wenn Sie dem Projekt weitere Personen, Komponenten, Fähigkeiten
und Code hinzufügen. Außerdem erkennen Sie die wiederverwendbaren Assets, die Sie nutzen können, und die Teile des
Systems, die von Hand erstellt werden müssen.
|