Warum wird UML in den meisten kostenlosen Programmen (z. B. unter Linux) nicht verwendet?

29

Ich versuche zu verstehen, warum UML in den meisten Projekten mit freier Software nicht verwendet wird . Zum Beispiel hat mein Debian / Linux-System wahrscheinlich mehr als zehntausend freie Software-Pakete, und ich kann nicht einmal eines nennen, das unter Verwendung eines expliziten UML-Frameworks und einer expliziten UML-Methodik entwickelt wurde. Beispielsweise sind Qt , GCC , Linux-Kernel , Bash , GNU make , Ocaml , Gnome , Unison , Lighttpd , Libonion und Docker freie Softwareprojekte, bei denen (AFAIK) UML überhaupt nicht erwähnt.

(Ich vermute, dass UML sehr gut für die formelle Vergabe von Unteraufträgen für Entwicklungsaufgaben geeignet ist, und auf diese Weise wird keine freie Software entwickelt.)

Beachten Sie, dass ich, obwohl ich Material über UML gelesen habe, nicht behaupte, ein gutes Verständnis dafür zu haben.

Tatsächlich kann ich eine freie Software, in der UML verwendet wurde, nicht einfach benennen (außer vielleicht einigen UML-Tools, die als freie Software implementiert sind). Vielleicht ist Openstack eine Ausnahme (etwas dort erwähnt UML).

(Selbst alte freie Software-Projekte haben möglicherweise UML übernommen, nachdem sie gestartet wurden, haben dies jedoch nicht getan.)


Einige Kollegen, die an Papyrus arbeiteten, erwähnten, dass die meisten Projekte mit freier Software zu Beginn kein explizit (und tief genug) formalisiertes Modell hatten. Außerdem scheint UML viel mehr mit Java zu tun zu haben, als es behauptet (ich bin mir nicht ganz sicher, ob es für Ocaml oder Common Lisp oder Haskell oder Javascript Sinn macht, und vielleicht auch nicht für C ++ 11 ...). Vielleicht ist agile Softwareentwicklung nicht sehr UML-freundlich.

Siehe auch diese Antwort auf eine irgendwie verwandte Frage. M.Fowlers Blog Ist Design tot? ist aufschlussreich.

PS. Ich denke nicht, dass es hauptsächlich eine Ansichtssache ist. Es sollte einen objektiven Grund und ein wesentliches Merkmal freier Software geben, der den Grund dafür erklärt. Ich neige zu der Annahme, dass UML nur für die formalisierte Vergabe von Unteraufträgen nützlich ist und nur dann, wenn ein Teil der entwickelten Software verborgen ist, wie bei proprietären Projekten. In diesem Fall wäre UML nicht mit der Entwicklung freier Software kompatibel .

NB: Ich bin selbst kein UML-Fan. Ich definiere UML nicht nur als Papierdokumentation, sondern auch als [Meta-] Datenformat für Software-Tools

Basile Starynkevitch
quelle
30
Vielleicht, weil UML Mist ist? Oder liegt es daran, dass die meisten kostenlosen Programme keine gute Dokumentation haben?
Freitag,
19
Sie haben es anders herum. Es muss einen objektiven Grund für die Verwendung von UML geben, nicht umgekehrt. FOSS verwendet keine UML, es gibt entweder keinen objektiven Grund oder alle Gründe werden von der FOSS-Community nicht akzeptiert.
Euphorischer
18
Für einige der von Ihnen aufgelisteten Projekte liegen die Gründe auf der Hand: Zeitreisen wurden noch nicht erfunden. UML wurde 1997 zum ersten Mal standardisiert. Das GNU-Projekt ist von 1983, GCC 1987, Bash 1988, GNU make 1989, Qt 1991, OCaml 196, Gnome 1997. Nur lighttpd und Unison sind noch jung genug, um mit UML entwickelt zu werden, aber lighttpd wird in C und Unison in OCaml geschrieben. Beides sind Sprachen, die in UML nicht gut beschrieben werden können. Außerdem glauben Entwickler Freier Software im Allgemeinen, Code so zu schreiben, dass er ohne die Hilfe externer Tools verstanden werden kann.
Jörg W Mittag
26
UML wird in der Open- oder Closed-Source-Softwareentwicklung nicht sehr häufig verwendet . Es wird hauptsächlich von Leuten verwendet, die über Softwareentwicklung sprechen .
Karl Bielefeldt
16
Aus dem gleichen Grund wird UML in der unfreien Softwareentwicklung nicht häufig verwendet. Auf dem Papier klingt es gut, aber in der Praxis scheint es keine wirklichen Vorteile zu bieten.
JohnB

Antworten:

37

Es gibt verschiedene Möglichkeiten, UML zu verwenden. Martin Fowler nennt diese UML-Modi und identifiziert vier: UML als Notes , UML als Sketch , UML als Blueprint und UML als Programmiersprache .

UML als Programmiersprache hat sich nie wirklich durchgesetzt. In diesem Bereich wurde unter verschiedenen Namen gearbeitet, z. B. Model Driven Architecture oder Model Based Software Engineering. Bei diesem Ansatz erstellen Sie sehr detaillierte Modelle Ihres Softwaresystems und generieren den Code aus diesen Modellen. Es kann einige Anwendungsfälle geben, in denen dieser Ansatz nützlich ist, jedoch nicht für allgemeine Software und insbesondere nicht außerhalb großer Unternehmen, die sich die Tools leisten können, die diesen Ansatz unterstützen. Es ist auch ein zeitaufwändiger Prozess - ich kann den Code für eine Klasse schneller eingeben, als ich alle zur Implementierung erforderlichen grafischen Modelle erstellen kann.

UML als Blueprint ist oft ein Hinweis auf ein "Big Design Up Front" -Projekt. Das muss natürlich nicht sein. Das Modell kann auch für ein bestimmtes Inkrement vollständig beschrieben werden. Die Idee ist jedoch, dass die Zeit für die Erstellung eines Designs in Form von UML-Modellen aufgewendet wird, die dann an jemanden übergeben werden, der sie in Code umwandelt. Alle Details sind präzisiert und die Konvertierung in Code ist in der Regel mechanischer.

UML als Skizze und UML als Notizen haben ähnliche Eigenschaften, unterscheiden sich jedoch je nach Verwendungszweck. Die Verwendung von UML als Skizze bedeutet, dass Sie Entwürfe mit UML-Notationen skizzieren. Die Diagramme sind jedoch wahrscheinlich nicht vollständig, konzentrieren sich jedoch auf bestimmte Aspekte des Entwurfs, die Sie für die Kommunikation mit anderen benötigen. UML als Notes ist ähnlich, aber die Modelle werden nach dem Code erstellt, um das Verständnis der Codebasis zu erleichtern.

Wenn Sie darüber nachdenken, denke ich, dass alles, was oben steht, für jede Art von Modellnotation zutrifft. Sie können es auf Entity-Relationship-Diagramme, IDEF- Diagramme, Geschäftsprozessmodellierungsnotationen usw. anwenden . Unabhängig von der Modellierungsnotation können Sie auswählen, wann Sie sie anwenden (davor als Spezifikation, danach als alternative Darstellung) und wie viele Details (vollständige Details zu Schlüsselaspekten).


Die andere Seite davon ist Open-Source-Kultur.

Oft beginnen Open Source-Projekte damit, ein Problem zu lösen, das eine Person (oder heute ein Unternehmen) hat. Wenn es von einer Einzelperson gestartet wird, beträgt die Anzahl der Entwickler 1. In diesem Fall ist der Kommunikationsaufwand extrem gering und es besteht wenig Bedarf, über die Anforderungen und das Design zu kommunizieren. In einem Unternehmen wird es wahrscheinlich ein kleines Team geben. In diesem Fall müssen Sie wahrscheinlich die Entwurfsmöglichkeiten kommunizieren und die Kompromisse besprechen. Sobald Sie jedoch Ihre Entwurfsentscheidungen getroffen haben, müssen Sie Ihre Modelle entweder warten, da sich die Codebasis im Laufe der Zeit ändert, oder sie wegwerfen. In Agile Modeling- Begriffen sollten Sie "kontinuierlich dokumentieren" und eine "einzige Informationsquelle" verwalten .

Abgesehen davon gibt es die Idee, dass Code Design ist und dass Modelle nur alternative Ansichten des Designs sind. Jack Reeves hat drei Essays über Code als Design geschrieben , und es gibt auch Diskussionen im C2-Wiki, in denen die Ideen diskutiert werden, dass der Quellcode das Design ist , das Design der Quellcode und der Quellcode und die Modellierung . Wenn Sie sich dieser Überzeugung anschließen (was ich auch tue), dann ist der Quellcode die Realität und alle Diagramme sollten existieren, um das Verständnis des Codes und vor allem die Gründe dafür, warum der Code so ist, wie er ist, zu verbessern.

Ein erfolgreiches Open Source-Projekt, wie Sie es bereits erwähnt haben, hat Mitwirkende auf der ganzen Welt. Diese Mitwirkenden sind in der Regel technisch kompetent in den Technologien, die die Software antreiben, und sind wahrscheinlich auch Benutzer der Software. Mitwirkende sind Personen, die den Quellcode genauso einfach lesen können wie Modelle. Sie können Tools (IDEs und Reverse Engineering-Tools) verwenden, um den Code zu verstehen (einschließlich der Generierung von Modellen, wenn sie dies für erforderlich halten). Sie können auch selbst Skizzen des Flusses erstellen.


Von den vier Modi, die Fowler beschreibt, werden Sie meines Erachtens kein Open-Source-Projekt oder nur sehr viele Projekte finden, die Modellierungssprachen als Programmiersprachen oder Blaupausen verwenden. So bleiben Notizen und Skizzen als mögliche Verwendungszwecke für UML. Notizen werden vom Mitwirkenden für den Mitwirkenden erstellt, sodass Sie sie wahrscheinlich nirgendwo hochgeladen finden. Skizzen verlieren an Wert, wenn der Code vollständiger wird und wahrscheinlich nicht mehr gepflegt wird, da dies nur Anstrengungen der Autoren erfordert.

Bei vielen Open Source-Projekten werden keine Modelle zur Verfügung gestellt, da sie keinen Mehrwert bieten. Dies bedeutet jedoch nicht, dass Modelle nicht von jemandem zu Beginn des Projekts erstellt wurden oder dass Einzelpersonen keine eigenen Modelle des Systems erstellt haben. Es ist nur zeiteffektiver, eine Quelle von Designinformationen zu verwalten: den Quellcode.

Wenn Sie Leute finden möchten, die Designinformationen austauschen, sollten Sie sich Foren oder Mailinglisten ansehen, die von Mitwirkenden verwendet werden. Häufig dienen diese Foren und Mailinglisten als Designdokumentation für Projekte. Sie finden möglicherweise keine formale UML, aber möglicherweise eine grafische Darstellung von Konstruktionsinformationen und -modellen. Sie können auch Chatrooms oder andere Kommunikationskanäle für das Projekt aufrufen. Wenn Personen über Entwurfsentscheidungen sprechen, kommunizieren sie möglicherweise mit den grafischen Modellen. Aber sie werden wahrscheinlich nicht Teil eines Repositorys, da sie nicht mehr wertvoll sind, sobald sie ihren Zweck in der Kommunikation erfüllt haben.

Thomas Owens
quelle
1
Viel Text, aber nur der vorletzte Absatz beantwortet die Frage. Haben Sie die Frage erneut geöffnet, damit Sie sie beantworten können?
Euphorischer
6
@Euphoric Obwohl der letzte Absatz die Frage beantwortet, ist der Rest erforderlich, um den Hintergrund festzulegen und Begriffe und Konzepte zu normalisieren. Und nein, es hatte bereits 4 Wiedereröffnungsstimmen - ich habe die 5. abgegeben und geantwortet.
Thomas Owens
3
+1 Sehr umfassende Antwort. Meiner Meinung nach erklären die vorstehenden Absätze die Schlussfolgerung. Gut gemacht!
Andres F.
8

Verwenden wir Linux als Beispiel,

  • Es handelt sich nicht um ein objektorientiertes Projekt. Einige Teile wie das VFS können in UML modelliert werden, andere können nicht oder nicht sehr effektiv sein, dh im Grunde genommen nur eine direkte Übersetzung von structin ein Klassendiagramm ohne Beziehungen.
  • UML ist gut für die Dokumentation, um jemanden für ein Projekt zu begeistern. Das ist etwas, das Linux nicht wirklich bietet, von den Leuten wird erwartet, dass sie es selbst lernen.
  • Sie sind sich nicht sicher, welches UML-Tool Sie verwenden sollen. Sie müssen sich auf etwas einigen, wenn es gewartet werden soll. Es gab eine kostenlose Java-Anwendung dafür, aber ich glaube nicht, dass viele es verwenden möchten.
  • In den 90er Jahren war GUI unter Linux noch eine Herausforderung. Stöbern Sie einfach im Mailinglisten-Archiv, ich wette, Sie werden keine anderen Grafiken als das Logo für Linux selbst im xpm-Format finden, die in der Startzeit angezeigt werden. Normaler Text ist das bevorzugte Format.
  • Ich glaube, niemand hat sich wirklich für Design interessiert. Die Leute interessieren sich für Features und wenn sie akzeptiert werden, wird der Code überprüft. Anwendungsfälle lassen sich immer noch am besten in Worten beschreiben, genau wie Standards wie POSIX und SUS geschrieben werden.
  • Viele Objekte im Bereich Betriebssysteme sind in der Community gut verstanden und standardisiert. ZB würden die Leute wissen, wie ein struct in_addrim Gedächtnis aussieht, keine Diagramme könnten es klarer machen.
  • UML hilft nicht viel beim Modellieren von Algorithmen wie dem Speicherzuweiser, dem Scheduler, den Interrupt-Handlern usw. Die Quelle ist wahrscheinlich leichter zu verstehen.

Das sind die Dinge, an die ich in den Linux-Projekteinstellungen denken kann. Es geht wohl eher um Praktikabilität. Merkwürdigerweise kann ich mich nicht erinnern, dass Tanenbaum in seinem Lehrbuch für Betriebssysteme eine UML zur Beschreibung von Minix verwendet hat.

Wahrscheinlich erwähnenswert, ich benutze UML auch nicht bei der Arbeit. Wahrscheinlich kennen 20% der Personen, mit denen ich zusammenarbeite, eine Untergruppe von UML.

imel96
quelle
4
Linux verwendet die Objektorientierung, es verwendet nur keine objektorientierte Sprache . Richtig, Linux enthält auch Teile, die in einem sehr prozeduralen Stil geschrieben sind, aber andere Teile, wie die Kernelmodulschnittstelle, sind entschieden objektorientiert.
cmaster
In UML gibt es mehr als Klassendiagramme.
Michael Dorner
Jedes große Softwareprojekt erfordert objektorientiertes Design.
Kais
Die Autoren müssen eine Standardmodellierungssprache verstehen, bevor sie an dem Projekt arbeiten können. Dies rechtfertigt die Notwendigkeit einer Dokumentation zur Softwaremodellierung in UML, SysML, IDEF0, ODL oder OCL.
Kais
2

UML ist eine Repräsentation, also eine Form der Sprache, und der Argumentation halber nehmen wir an, dass der Zweck darin besteht, ein mentales Modell von einer Person zur anderen zu kommunizieren.

Was ich in einer Sprache suche, ist ihre Effizienz bei der Erfassung von Veränderungen des eigenen mentalen Modells. Angenommen, nach dem Schreiben der Beschreibung des eigenen Modells muss eine kleine Änderung vorgenommen werden. Wie stark muss die Darstellung verändert werden? In einer Textsprache eine Methode zum Messen, bei der ein diffCode vor und nach dem Code ausgeführt und die Unterschiede gezählt werden. In einer grafischen Sprache sollte es eine ähnliche Möglichkeit geben, den Unterschied zu messen.

IMHO nenne ich eine Sprache "domänenspezifisch" (DSL) in dem Maße, dass sie die oben genannten Maßnahmen minimiert, was offensichtliche Vorteile bei der Reduzierung von Wartungskosten und Fehlern hat. Wie erstelle ich ein DSL? Es gibt verschiedene Möglichkeiten. Eine der einfachsten Möglichkeiten besteht darin, Datenstrukturen und -methoden in einer vorhandenen Programmiersprache zu definieren. Dies fügt der Basissprache Substantive und Verben hinzu, wodurch es einfacher wird zu sagen, was man will. (Hinweis: Ich suche kein DSL, um keine Lernkurve zu haben. Es kann sein, dass der Leser eines DSL die einmaligen Kosten für das Lernen investieren muss.)

Der wichtige Punkt ist: In jedem Fall muss die DSL die Begriffe enthalten, die das Ausdrücken des eigenen Modells und das Ändern des Modells bequem machen. Da es keine offensichtliche Grenze für den Bereich möglicher Domänen gibt, kann kein einzelnes DSL alle von ihnen bedienen.

Mein Eindruck von UML ist, dass es das ist, was es versucht hat.

Mike Dunlavey
quelle