Donnerstag, 10. Juni 2010

Komponentenorientierung – CCD vs. UML

Komponentenorientierte Architekturen sind ja nichts Neues. Die Ge-sellschaft für Informatik (GI e.V.) selbst schreibt in ihrem Informatik-lexikon über Software-Architektur:

Definition (Software-Architektur)

Die grundlegende Organisation eines Systems, dargestellt durch dessen Komponenten, deren Beziehungen zueinander und zur Umgebung sowie den Prinzipien, die den Entwurf und die Evolution des Systems bestimmen.

Komponenten gehören also in die Standardwerkzeugkiste eines guten Architekten und Designers. Wie aber diese Komponentendotnetpro ccd stempel2 almost half size banner (1) darstellen? Ich habe den recht pragmatischen An-satz von Ralf Westphal und Stefan Lieser aus dem Clean Code Developer Camp mit der UML 2 ver-glichen und an praktischen Beispielen ausprobiert.

EInfach vs. standardisiert

Eine Notation sollte vor allem klar verständlich und eindeutig sein. Und einfach zu zeichnen vor allem bei schnellen Architekturzeichnungen am Whiteboard oder auf dem Skizzenblatt. Und genau da liegt sicherlich der Vorteil eines einfachen Ansatzes. Hier kann man schnell grobe Designs entwerfen, weglöschen verschieben usw. Wichtig ist aber, dass die Strukturen klar definiert werden. Stefan und Ralf verwenden hierbei zum Beispiel Kreise für Funktionseinheiten und einfache Pfeile für Abhängigkeiten, sowie doppelte Pfeile für Datenflüsse. Wie aber würde dies in UML aussehen? Es gibt Komponentendiagramme. Diese sind aber sehr überfrachtet mit Informationen, die ich vor allem im ersten Ansatz nicht benötige. Der Überblick auf die wichtigen Dinge geht verloren. Was aber tun, wenn der Kunde nun mal UML versteht? Warum ihm dann eine neue Notation verkaufen?

Toolunterstützung

Bei dem einfachen Ansatz gibt es bisher keine oder nur rudimentäre Unterstützung beim Entwerfen. Hier muss man auf Werkzeuge wie zum Beispiel Visio oder das Online-Tool TODO verwenden. Diese Werkzeuge haben aber den Nachteil, dass man schlecht in die Designs “hineinzoomen” kann. Aber dies ist für den schnellen Ansatz auf dem Whiteboard ja auch gar nicht nötig. Es soll einfach, schnell und nicht überfrachtet sein. Für die späteren Architekturbilder kann man dann ja immer noch auf UML zurückgreifen und zum Beispiel mit dem Enterprise Architect die Designs entwerfen. Dann bekommt man alle Vorteile der Werkzeugunterstützung.

Fazit

Ich verwende bei meinen ersten Entwürfen auf dem Skizzenblock oder Whiteboard eine einfache aber klar definierte Notation und für weitergehende Architekturdokumentation, die auch für den Kunden gedacht ist die UML 2 und die passenden Werkzeuge. Was ist eure Meinung dazu? Wie findet Ihr eine einfache Notation im Vergleich zur UML oder anderen? Über Kommentare würde ich mich freuen.


7 Kommentare:

  1. Cool, dass du eine Lanze für die Komponentenorientierung gebrochen hast.

    Hast du dich aber schon mit Event-Based Components befasst? Sie könnten deinen Blick auf graphische Notation nochmal ändern. Da gibt es nämlich keine Pfeilarten mehr :-)

    -Ralf

    AntwortenLöschen
  2. Hi Christian, wie im CCD Camp beschrieben hab ich mich auch daran versucht, Kunden eine nicht UML Notation als Dokumentation der Architektur/Design der Lösung zu "verkaufen". Ich hab dazu ein Zeichenprogramm und ein Wacom Tablet verwendet. Das geht schnell und effizient. Dieser fand diese Art der Dokumentation/Planung als Skizzen gut, nur das war es dann auch. Er möchte zusätzlich standardisierte Diagramme ala UML auf dem Tisch haben. Warum? Das kann jeder lesen der UML kann. Vor Bubbles, Pfeile und Doppelpfeile aus mehreren Perspektiven hätte er als nicht Programmierer/Architekt Angst vor Unverständlichkeit der anderen Softwareentwickler/Architekten so in 2-3 Jahren. Ich verwende Stefan und Ralfs Notation nur für mich selbst oder unter Entwicklern. Diese sind meist aufgeschlossen und fühlen sich wohl mit dieser einfachen, klaren und fokussierten Form der Dokumentation. Sie erkennen in aller Regel sofort den Vorteil der Leichtigkeit gegenüber UML. Für alles weitere (Kunde will UML irgendwo haben) gibt es dann eben EA oder die neuen Features des Visual Studios 2010.
    Im Übrigen finde das derzeitige Fehlen des Zommens in meinen Zeichenprogrammen auch als größtes Hindernis verständliche und schnelle Stefan/Ralf-Diagramme in digitaler Form zu erstellen. Hier wäre ein besseres Tooling nötig!

    AntwortenLöschen
  3. Hallo Ralf,

    Komponenten finde ich so wichtig, weil sie sinnvoll angewendet, viele der CCD Prinzipien quasi im vorübergehen mit erfüllt. Hierzu zählen vor allem Testbarkeit, Produktivität, Single Responsibilty Prinziple und Korrektheit (aber auch viele der anderen.)

    EBC habe ich leider noch nicht näher beleuchtet, werde das aber auf jeden Fall alsbald nachholen.

    Christian

    AntwortenLöschen
  4. Hallo Mike,

    genau die gleiche Erfahrung habe ich auch gemacht und deswegen diesen Artikel geschrieben. Die Frage die ich mir aber auch stelle ist, woher kommt diese Angst vor "nicht-UML"?

    Christian

    AntwortenLöschen
  5. Wer UML haben will, der soll UML bekommen - aber am besten dafür auch bezahlen.

    Die Begründung, dass nur UML universell verständlich sei, würde ich übrigens mit drei Argumenten kontern:

    1. UML wird einfach nicht breit verstanden jenseits eines Subsets ("pigeon UML" ;-)
    2. UML bietet jenseits von Klassendiagrammen keinen Hinweis darauf, wie eine Zeichnung in Code zu übertragen ist. Damit laufen Diagramme und Coderealität schnell auseinander.
    3. Die "Lieser/Westphal Notation" ;-) ist so schnell zu lernen, dass es bei dem Aufwand, der schon für UML nötig war, gar nicht auffällt. Wer sich wirklich durch UML gequält hat, der schafft auch noch das ;-)

    Aber vielleicht gehts ja auch anders: Benutzt doch einfach UML. Abhängigkeitsdiagramme sind drin für einfache Pfeile. Was da allerdings in Abhängigkeit gesetzt wird, ist egal. Ihr macht das mit Funktionseinheiten. Und Aktivitätsdiagramme sind für Doppelpfeile.

    Da kann dann einer nur noch stutzen, weil ihr nicht darauf besteht, dass da Klassen verbunden sind, sondern "nur" Funktionseinheiten.

    Ich würde allerdings sagen, dass die Diagrammprobleme weniger werden, sobald man mit EBC anfängt. Die haben nämlich den entscheidenden Vorteil, dass sich damit wirklich beliebig tiefe Abstraktionshierarchien sauber übersetzen lassen in Code.

    Das Zoomen ist allerdings noch ein tech. Problem. Leider.

    Warum eigentlich? Warum hat die Softwareentwicklung dafür noch kein Tool? Ich glaube, das ist ein Symptom des Problems der falschen Denke. Denn mit "Abhängigkeitsdenke" kann man nicht wirklich gut in unterschiedl Abstraktionsebenen planen. Abhängigkeitsdenke steckt aber in den typsichen Komponenten- oder Klassendiagrammen drin.

    Also war bisher kein Bedarf da. Im Maschbau usw. ist das aber immer schon anders gewesen. Also gibt es da Tools, die das können.

    Nun, wir stehen am Anfang... :-)

    -Ralf

    AntwortenLöschen
  6. Hallo Christian,
    leider muss ich Deinen Beitrag zum Thema Komponentenorientierung an einer Stelle immer noch widersprechen.
    Ich sehe keinen Grund, eine neue Notation für Komponenten, nur weil ich von der Vorhandenen nicht alles brauche. In meinem „Werkzeugkasten“ für ein Komponentendiagramm habe ich 9 Objekttypen. Die Komponente wird durch einen recheckigen Kasten dargestellt. Das ist ja zunächst nicht überfrachtet. Natürlich kann eine Komponente viele „UML“- Eigenschaften bekommen. Muss sie aber nicht. Nur, bei jeder Eigenschaft, die ich brauche, kann ich auf eine definierte Eigenschaft zurückgreifen. Ich denke, einfache Zusammenhänge werden nicht komplexer, nur will die Sprache in der ich spreche komplexere Zusammenhänge ausdrücken kann. Ich kann ein Bier formvollendet mit 3 deutschen Vokabeln bestellen. Da würde auch keiner drauf kommen, es mit einer neuen Sprache zu versuchen, nur weil Deutsch so eine komplizierte Sprache ist, oder?

    Bis denn,
    Uli

    AntwortenLöschen
  7. @Christian: Warum diese Angst des Kunden? :-), keine Ahnung. Vielleicht ist das so mit Ängsten? Sind manchmal unbegründet, aber dennoch verhanden.:-) Meine Vermutung in meinem Fall: Der Kunde Angst vor neuem, weil er dafür gerade stehen muss oder viel Geld bezahlen muss sobald mal was nicht so rund läuft. Bei UML ist er ein bisschen sicherer (Sicherheit lieben alle), dass zumindest er bei der Anforderungsdefinition "Erstellen sie die notwendigen Diagramme zur hinreichenden Dokumention der geplannten Systems in UML." keine Fehler gemacht hat.

    @Uli-se: Es geht mir nicht, um nicht alles aus dem Vorhandenen brauchen, sondern um schnelles Verständnis, schnelle Erstellung, schnelle Änderung. Am besten auf verschiedenen Medien(Papier, Whiteboard, Programme) aber gleicher Notation in unterschiedlichen Abstraktionensebenen.

    @Ralf: Stimmt, andere Ing. Disziplinen können das. Wir leider (noch) nicht!

    AntwortenLöschen