Konzept: Abstraktionsgrad erhöhen
Dieses Prinzip beschreibt, wie Sie Komplexität durch Erhöhen des Abstraktionsgrads reduzieren.
Hauptbeschreibung

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
  1. Wiederverwendung vorhandener Assets
  2. Verwendung von Tools und Sprachen auf höherer Ebene, um den Umfang der erzeugten Dokumentation zu reduzieren
  3. Vorrangiger Schwerpunkt auf der Architektur
  4. 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.

Diagramm, das die Wiederverwendung vorhandener Assets durch serviceorientierte Architektur veranschaulicht
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.