UML-Einführung und -Tools

  1. =========================
  2. Stefan Schwarzer
  3. 2010-09-21
  4. Einführung
    1. bin kein UML-Experte!
      1. eher Einäugiger unter Blinden
        1. oder Einäugiger unter Einäugigen? :-)
      2. aber Erfahrung mit UML in Projekten, hauptsächlich
        1. Klassendiagramme
        2. Zustandsdiagramme
    2. standardisierte grafische Notation für SW-Design
      1. primär für OOA/OOD/OOP
      2. existiert seit 1997
      3. aktuelle Version: 2.3
      4. Dokumentation
        1. flüchtig
          1. zum Beispiel Design-Diskussionen am Whiteboard
        2. persistent
          1. aufgehoben als SW-Dokomentation
          2. kann wie jede Dokumentation leicht veralten
      5. 13 Diagrammtypen
        1. Anwendungsfalldiagramm (use case diagram)
        2. Klassendiagramm (class diagram)
        3. Zustandsdiagramm (state machine diagram)
        4. Aktivitätsdiagramm (activity diagram)
          1. auch für andere Abläufe als in Programmen
        5. Sequenzdiagramm (sequence diagram)
        6. ...
    3. Beispiel Klassendiagramm
      1. Klassen
        1. Name
        2. Attribute
        3. Methoden
      2. Vererbung
      3. Schnittstellen
        1. Implementierung
        2. Nutzung
      4. Assoziationen
        1. Aggregation
        2. Komposition
        3. Multiplizität
    4. viele Bücher, zum Beispiel
      1. "UML konzentriert" von Martin Fowler und Kendall Scott
      2. "UML 2 kompakt" von Heide Balzert
      3. "Analyse und Design mit UML 2.3: Objektorientierte Softwareentwicklung" von Bernd Oestereich und Stefan Bremer
    5. viele Websites
      1. engl. und deutsche Wikipedia-Artikel
      2. Einführungen
        1. http://www.highscore.de/uml/
        2. http://www.sparxsystems.com/uml-tutorial.html
        3. http://www.sparxsystems.com/resources/tutorial/uml_tutorial2.html
        4. http://www.sparxsystems.com/resources/uml2_tutorial/
      3. Referenzen
        1. http://www.holub.com/goodies/uml/
        2. http://www.oose.de/downloads/uml-2-Notationsuebersicht-oose.de.pdf
      4. Kritik
        1. http://queue.acm.org/detail.cfm?id=984495
        2. http://archive.eiffel.com/doc/manuals/technology/bmarticles/uml/page.html
  5. Anwendung
    1. Am nützlichsten sind die oben genannten Diagramme
      1. Anwendungsfalldiagramm (use case diagram)
      2. Klassendiagramm (class diagram)
      3. Zustandsdiagramm (state machine diagram)
      4. Aktivitätsdiagramm (activity diagram)
      5. Sequenzdiagramm (sequence diagram)
    2. nur so viel verwenden wie nötig - Diagramme nicht überladen
      1. es müssen nicht alle Attribute/Methoden gelistet werden
        1. insbes. nicht die internen
    3. Mapping UML <-> Programmiersprache nicht perfekt, insbes. bzgl. Python
      1. dynamisch erzeugte Attribute (Regelfall) in Klassendiagramm angeben
      2. Datentypen angeben, auch wenn sie in Python prinzipiell flexibel sind
      3. Datentypen mit dem nötigen Detaillierungsgrad angeben
        1. "Liste" vs. "Liste von ..."
        2. oder wie in C++ "list"
      4. durch Duck Typing gegebene gemeinsame Schnittstellen evtl. mit modellieren, um Semantik im Diagramm wiederzufinden
        1. als Interfaces
        2. als Klasse mit eigenem "Stereotyp", bzpw. «model»
  6. Tools
    1. Auswahlkriterien
      1. Betriebssystem-Unterstützung
        1. viele Tools sind in Java entwickelt und laufen auch unter Linux
          1. normalerweise mit "java -jar " starten
        2. beste Tool-Unterstützung unter Windows
      2. einfache Bedienbarkeit
        1. Komplexität führt dazu, dass das Tool nicht genutzt wird
        2. Ausfüllen eines Dialogs für jedes Attribut/Methode bremst aus
          1. besser: Eingabe von Freitext, ggf. geparst
      3. UML-Standard (1.x oder 2.x?)
        1. abhängig von Projektanforderungen
        2. Tipp: UML 2, aber nur nötige Notation nutzen
        3. Tools in einer bestimmten Version unterstützen normalerweise nur 1.x oder 2.x, nicht beides gleichzeitig
      4. Daten-Export
        1. theoretisch gibt es Tool-übergreifende Standards
          1. XMI XML Metadata Interchange
          2. UXF UML eXchange Format
        2. XMI-Support ist weiter verbreitet, ist aber oft nicht so portabel wie erwartet
        3. UXF ist das später eingeführte aber einfachere Format
      5. Code in Modell konvertieren oder aus Modell erzeugen
        1. oft nur Java-Support
        2. evtl. noch C++ und/oder C#
        3. Wenn ein Tool beides kann, heißt das nicht automatisch, dass es Roundtrip-fähig ist!
    2. Zur Bedienung
      1. üblicherweise mehrere Bildschirmbereiche
        1. logische Struktur (Klassen etc.)
          1. gibt es nur einmal je Projekt
          2. normalerweise ein Baum
        2. Diagramme
          1. optional mehrere je Projekt
          2. angezeigte Objekte aus der logischen Struktur
        3. ggf. weitere Bildschirmbereiche
          1. Eigenschaften des gerade ausgewählten Objekts
          2. Design-Kritiken
          3. TODO-Liste
    3. Open Source
      1. ArgoUML
        1. http://argouml.tigris.org/
        2. gibt es schon lange
        3. überladenes UI
        4. kein Undo :-(
      2. VioletUML
        1. http://alexdp.free.fr/violetumleditor/page.php
        2. maximaler Schnuckelfaktor :-)
        3. leicht zu bedienen
        4. aber auch keine riesige Funktionalität
        5. für Gelegenheitsnutzer wahrscheinlich die beste Wahl
      3. UMLet
        1. http://www.umlet.com/
        2. zweitgrößter Schnuckelfaktor
        3. Diagrammknoten lassen sich in Wiki-Syntax beschreiben
          1. interessantes Bedienkonzept
        4. lästig: beim Vertauschen zweier Kästchen laufen Verbindungen durch beide hindurch
      4. Umbrello
        1. http://uml.sourceforge.net/
        2. gibt es schon länger
        3. ansprechende GUI
        4. aber Extra-Dialoge für Attribute/Methoden
        5. kann Python-Code sowohl einlesen als auch erzeugen
          1. aber kein Roundtrip!
      5. Bouml
        1. http://bouml.free.fr/
        2. viele Funktionen
        3. unübersichtliches UI
        4. zahlreiche Einstellungen
          1. Extra-Dialoge für Attribute/Methoden anzuzeigen
        5. kann Python-Code erzeugen
      6. Topcased
        1. http://www.topcased.org/
        2. Eclipse-basiert
        3. umfangreich - Download ca. 280 MB
      7. und andere
      8. Pyreverse
        1. http://pypi.python.org/pypi/pyreverse/
        2. Bestandteil von PyLint
        3. erzeugt Paket- und Klassendiagramme
          1. als Dot (GraphViz), PNG, ...
          2. leider nicht als XMI oder UXF
        4. hat noch Bugs
          1. scheitert zum Beispiel an Websourcebrowser (19 Module)
      9. evtl. (notfalls?) Vektor-Grafik-Programme
        1. Dia
        2. Inkscape
    4. kommerziell, kostenlos
      1. Artisan Studio Uno
        1. http://www.artisansoftwaretools.com/studiouno
        2. nur für Windows + .NET
      2. Modelio Free Edition
        1. http://www.modeliosoft.com/en/products/modelio-free-edition.html
        2. Ubuntu-Linux-Paket für jahrealte Version 8.04
          1. erfordert händische Installation von libstdc++5
        3. Usability ist problematisch, zumindest unter Ubuntu-Linux
        4. mit Jython zu scripten
      3. und evtl. andere
    5. kommerziell, kostenpflichtig
      1. _Manche_ als kostenlos angegepriesene Versionen haben Haken
        1. begrenzte Laufzeit
        2. kommerzielle Verwendung untersagt
        3. essenzielle Funktionen (Speichern, Drucken) fehlen
      2. Poseidon
        1. http://www.gentleware.com/
        2. Version 8.0 mit neuem (einfacherem) Bedienkonzept
        3. interessante Community-Lizenz
          1. Miete 6 Euro/Monat, 48 Euro/Jahr
      3. MagicDraw
        1. http://www.magicdraw.com/
        2. toll, aber umfangreich
        3. nichts für Gelegenheitsnutzer
      4. und _viele_ andere
        1. oft nur für Windows
      5. verschiedene Lizenztypen
        1. von ca. 100 bis über 1000 Euro pro Lizenz
        2. zum Beispiel Poseidon Professional Shared License >1200 Euro
  7. Fazit
    1. Die UML ist ein wichtiges Hilfsmittel für Diskussionen und zur Dokumentation.
    2. UML pragmatisch anwenden
      1. nur nötige Diagramme nutzen
      2. nur so detailliert wie nötig
    3. Es gibt kein Tool, dass kostenlos, Open Source, flexibel und leicht bedienbar ist.
    4. Kommerzielle Tools sind im Allgemeinen flexibler und "runder", aber kosten (u. U. viel) Geld.
  8. Fragen/Diskussion?