Pourquoi UML n'est-il pas utilisé dans la plupart des logiciels libres (par exemple sous Linux)?

29

J'essaie de comprendre pourquoi UML n'est pas utilisé dans la plupart des projets de logiciels libres . Par exemple, mon système Debian / Linux a probablement plus de dix mille packages de logiciels gratuits, et je ne peux même pas en nommer un qui a été développé en utilisant un cadre et une méthodologie UML explicites . Par exemple, Qt , GCC , noyau Linux , bash , GNU make , Ocaml , Gnome , Unison , lighttpd , libonion , docker sont des projets de logiciels libres qui (AFAIK) ne mentionnent pas du tout UML.

(Je suppose que UML est très bien adapté à la sous-traitance formelle des tâches de développement, et ce n'est pas ainsi que le logiciel libre est développé)

Notez que même si j'ai lu des informations sur UML, je ne prétends pas en avoir une bonne compréhension.

En fait, je ne peux pas facilement nommer un logiciel gratuit où UML a été utilisé (sauf peut-être certains outils UML mis en œuvre en tant que logiciel libre). Openstack est peut-être une exception (quelque chose y mentionne UML).

(même les anciens projets de logiciels libres auraient pu adopter UML après leur démarrage, mais ils ne l'ont pas fait)


Certains collègues travaillant sur Papyrus ont mentionné que la plupart des projets de logiciels libres n'avaient à leur début aucun modèle formalisé explicite (et suffisamment approfondi). En outre, UML semble beaucoup plus lié à Java qu'il ne le prétend (je ne suis pas entièrement sûr que cela aurait du sens pour Ocaml ou Common Lisp ou Haskell ou Javascript, et peut-être même pas pour C ++ 11 ....). Le développement logiciel agile n'est peut-être pas très convivial pour UML.

Voir aussi cette réponse à une question en quelque sorte liée. Le blog de M.Fowler Is Design Dead? est perspicace.

PS. Je ne pense pas que ce soit principalement une question d'opinion; il devrait y avoir une raison objective, et une caractéristique essentielle du logiciel libre, qui explique pourquoi. J'ai tendance à deviner que UML n'est utile que pour la sous-traitance formalisée, et n'est utile que lorsqu'une partie du logiciel développé est cachée, comme dans les projets propriétaires. Si cela est vrai, UML serait incompatible avec le développement de logiciels libres.

NB: Je ne suis pas moi-même un fan UML. Je ne définis pas UML uniquement comme documentation papier, mais aussi comme format de [méta] données pour les outils logiciels

Basile Starynkevitch
la source
30
Peut-être parce que UML est de la merde? Ou est-ce parce que la plupart des logiciels libres manquent d'une bonne documentation?
BЈовић
19
Vous l'avez dans l'autre sens. Il doit y avoir une raison objective d'utiliser UML, et non l'inverse. FOSS n'utilise pas UML, soit il n'y a pas de raison objective, soit toutes les raisons ne sont pas acceptées par la communauté FOSS.
Euphoric
18
Pour certains des projets que vous avez énumérés, les raisons sont assez évidentes: parce que le voyage dans le temps n'a pas encore été inventé. UML a été normalisé pour la première fois en 1997. Le projet GNU date de 1983, GCC 1987, Bash 1988, GNU make 1989, Qt 1991, OCaml 196, Gnome 1997. Seuls lighttpd et Unison sont même assez jeunes pour avoir été développés en utilisant UML, mais lighttpd est écrit en C et Unison dans OCaml, deux langues qui ne peuvent pas être bien décrites en UML. De plus, les développeurs de logiciels libres croient généralement à l'écriture de code de telle manière qu'il peut être compris sans l'aide d'outils externes.
Jörg W Mittag
26
UML n'est pas très utilisé dans le développement de logiciels open source ou fermé. Il est principalement utilisé par les personnes qui parlent de développement de logiciels.
Karl Bielefeldt
16
La même raison pour laquelle UML n'est pas beaucoup utilisé dans le développement de logiciels non libres. Cela sonne bien sur le papier, mais dans la pratique, cela ne semble pas offrir de réels avantages.
JohnB

Réponses:

37

Il existe différentes façons d'utiliser UML. Martin Fowler appelle ces modes UML et en identifie quatre: UML comme notes , UML comme croquis , UML comme Blueprint et UML comme langage de programmation .

UML en tant que langage de programmation n'a jamais vraiment décollé. Il y a eu des travaux dans ce domaine sous différents noms, comme l' architecture pilotée par les modèles ou l'ingénierie logicielle basée sur les modèles. Dans cette approche, vous créez des modèles très détaillés de votre système logiciel et générez le code à partir de ces modèles. Il peut y avoir des cas d'utilisation où cette approche est utile, mais pas pour les logiciels généraux et surtout pas en dehors des grandes entreprises qui peuvent se permettre les outils qui alimentent cette approche. C'est aussi un processus long - je peux taper le code d'une classe plus rapidement que je ne peux créer tous les modèles graphiques nécessaires pour l'implémenter.

UML en tant que Blueprint est souvent le signe d'un projet de "grande conception d'avance" . Cela ne doit pas l'être, bien sûr. Le modèle peut également être entièrement décrit pour un incrément particulier. Mais l'idée est que le temps est consacré à la création d'un design sous forme de modèles UML qui sont ensuite remis à quelqu'un pour les convertir en code. Tous les détails sont énoncés et la conversion en code a tendance à être plus mécanique.

UML en tant que croquis et UML en tant que notes sont de nature similaire, mais diffèrent selon le moment où ils sont utilisés. L'utilisation d'UML comme esquisse signifie que vous allez esquisser des conceptions à l'aide de notations UML, mais les diagrammes ne sont probablement pas complets, mais se concentreront sur des aspects particuliers de la conception dont vous avez besoin pour communiquer avec les autres. UML as Notes est similaire, mais les modèles sont créés après le code pour aider à comprendre la base de code.

Lorsque vous envisagez cela, je pense que tout ce qui précède est vrai pour tout type de notation de modélisation. Vous pouvez l'appliquer aux diagrammes d'entité-relation, aux diagrammes IDEF , à la notation de modélisation de processus métier, etc. Quelle que soit la notation de modélisation, vous pouvez choisir quand vous l'appliquez (avant en tant que spécification, après en tant que représentation alternative) et combien de détails (tous les détails sur les aspects clés).


L'autre côté de cela est la culture open source.

Souvent, les projets open source commencent par résoudre un problème rencontré par un individu (ou, aujourd'hui, une entreprise). S'il est lancé par un individu, le nombre de développeurs est de 1. Dans ce cas, la surcharge de communication est extrêmement faible et il n'est pas nécessaire de communiquer sur les exigences et la conception. Dans une entreprise, il y aura probablement une petite équipe. Dans ce cas, vous devrez probablement communiquer les possibilités de conception et discuter des compromis. Cependant, une fois que vous avez pris vos décisions de conception, vous devez soit maintenir vos modèles à mesure que votre base de code change avec le temps, soit les jeter. En termes de modélisation agile , "documenter en continu" et maintenir une "source unique d'informations" .

En bref, il y a l'idée que le code est la conception et que les modèles ne sont que des vues alternatives de la conception. Jack Reeves a écrit trois essais sur le code en tant que conception , et il y a aussi des discussions sur le wiki C2, discutant des idées que le code source est la conception , la conception est le code source , et le code source et la modélisation . Si vous souscrivez à cette croyance (ce que je fais), alors le code source est la réalité et tous les diagrammes devraient simplement exister pour faire comprendre le code et, plus important encore, la raison derrière laquelle le code est ce qu'il est.

Un projet open source réussi, comme ceux que vous mentionnez, a des contributeurs à travers le monde. Ces contributeurs ont tendance à être techniquement compétents dans les technologies qui alimentent le logiciel et sont également susceptibles d'être des utilisateurs du logiciel. Les contributeurs sont des personnes qui peuvent lire le code source aussi facilement que les modèles et peuvent utiliser des outils (IDE et outils de rétro-ingénierie) pour comprendre le code (y compris la génération de modèles, s'ils en ressentent le besoin). Ils peuvent également créer eux-mêmes des esquisses du flux.


Des quatre modes décrits par Fowler, je ne pense pas que vous trouverez un projet open source, ou de très nombreux projets n'importe où, qui utilisent des langages de modélisation comme langages de programmation ou plans directeurs. Cela laisse des notes et des croquis comme utilisations possibles pour UML. Les notes seraient créées par le contributeur pour le contributeur, donc vous ne les trouveriez probablement pas téléchargées n'importe où. Les croquis diminuent de valeur à mesure que le code devient plus complet et ne sera probablement pas maintenu car cela nécessiterait simplement des efforts de la part des contributeurs.

De nombreux projets open source n'ont pas de modèles mis à disposition car cela n'ajoute pas de valeur. Cependant, cela ne signifie pas que les modèles n'ont pas été créés par quelqu'un au début du projet ou que les individus n'ont pas créé leurs propres modèles du système. Il est juste plus efficace de gérer une seule source d'informations sur la conception: le code source.

Si vous souhaitez trouver des personnes échangeant des informations sur la conception, je vous recommande de consulter tout type de forums ou de listes de diffusion utilisés par les contributeurs. Souvent, ces forums et listes de diffusion servent de documentation de conception pour les projets. Vous ne trouverez peut-être pas d'UML formel, mais vous pouvez y trouver une sorte de représentation graphique des informations de conception et des modèles. Vous pouvez également accéder à des salles de discussion ou à d'autres canaux de communication pour le projet - si vous voyez des gens parler de décisions de conception, ils peuvent communiquer avec les modèles graphiques. Mais ils ne feront probablement pas partie d'un référentiel car ils ne sont pas utiles une fois qu'ils ont atteint leur objectif de communication.

Thomas Owens
la source
1
Beaucoup de texte, mais seulement le dernier mais un paragraphe, répond en fait à la question. De plus, avez-vous rouvert la question juste pour pouvoir y répondre?
Euphoric
6
@Euphoric Bien que le dernier paragraphe réponde à la question, le reste est nécessaire pour définir l'arrière-plan et normaliser les termes et les concepts. Et non, il avait déjà 4 votes de réouverture - j'ai jeté le 5 et répondu.
Thomas Owens
3
+1 Réponse très complète. À mon avis, les paragraphes précédents expliquent la conclusion. Bien joué!
Andres F.
8

Permet d'utiliser Linux comme exemple,

  • Ce n'est pas un projet orienté objet, certaines parties, comme le VFS peuvent être modélisées en UML, mais d'autres ne peuvent pas être ou pas très efficaces, c'est-à-dire simplement une simple traduction de structdans un diagramme de classes sans relations.
  • UML est bon pour la documentation, pour obtenir quelqu'un de nouveau à un projet se met à jour. Ce n'est pas quelque chose qui est vraiment pris en charge par Linux, les gens sont censés l'apprendre eux-mêmes.
  • Vous ne savez pas quel outil UML utiliser, les gens doivent se mettre d'accord sur quelque chose s'il allait être maintenu. Il y avait une application java gratuite pour cela, mais je ne pense pas que beaucoup voudraient l'utiliser.
  • Dans les années 90, l'interface graphique était toujours un défi sous Linux. Allez simplement fouiller les archives de la liste de diffusion, je parie que vous ne trouverez aucun autre type de graphisme que le logo pour Linux lui-même au format xpm à afficher au démarrage. Le texte brut est le format préféré.
  • Je ne pense pas que personne ne se soucie vraiment du design. Les gens se soucient des fonctionnalités et s'ils sont acceptés, le code sera examiné. Les cas d'utilisation sont toujours mieux décrits en mots, tout comme la façon dont les normes comme POSIX et SUS sont écrites.
  • Beaucoup d'objets dans le domaine des systèmes d'exploitation sont bien compris et standardisés au sein de la communauté. Par exemple, les gens sauraient à quoi struct in_addrressemble un en mémoire, aucun diagramme ne pourrait le rendre plus clair.
  • UML n'aide pas beaucoup dans l'algorithme de modélisation, comme l'allocateur de mémoire, le planificateur, les gestionnaires d'interruption, etc. La source est probablement plus facile à comprendre.

Ce sont les choses auxquelles je peux penser dans les paramètres d'un projet Linux. C'est plus une question pratique, je suppose. Curieusement, je ne me souviens pas que Tanenbaum ait utilisé un UML dans son manuel de système d'exploitation pour décrire Minix.

Il vaut probablement la peine de le mentionner, je n'utilise pas non plus UML au travail. Probablement 20% des personnes avec lesquelles je travaille connaissent un sous-ensemble d'UML.

imel96
la source
4
Linux utilise l' orientation objet, il n'utilise tout simplement pas un langage orienté objet . Certes, Linux contient également des parties écrites dans un style très procédural, mais d'autres parties, comme l'interface du module du noyau, sont décidément orientées objet.
cmaster
Il y a plus que des diagrammes de classes en UML.
Michael Dorner
Chaque grand projet logiciel nécessite une conception orientée objet.
Kais
Les contributeurs doivent comprendre un langage de modélisation standard avant de travailler sur le projet, et c'est ce qui justifie le besoin d'une documentation de modélisation logicielle que ce soit en UML, SysML, IDEF0, ODL ou OCL.
Kais
2

UML est une représentation, c'est donc une forme de langage, et pour les besoins de l'argument, supposons que son but est de communiquer un modèle mental d'une personne à une autre.

Ce que je recherche dans une langue, c'est son efficacité à capter les changements de son modèle mental. Supposons qu'après avoir écrit la description de son modèle, un petit changement doit être effectué. Quelle ampleur doit être apportée à la représentation? Dans un langage textuel, un moyen de mesurer cela est d'exécuter un diffentre le code avant et après, et de compter les différences. Dans un langage graphique, il devrait y avoir une manière similaire de mesurer la différence.

À mon humble avis, j'appelle un langage "spécifique au domaine" (DSL) dans la mesure où il minimise la mesure ci-dessus, ce qui présente des avantages évidents en termes de réduction des coûts de maintenance et des bogues. Comment faire une DSL? Il y a plusieurs façons. L'un des plus simples consiste à simplement définir les structures et les méthodes de données dans un langage de programmation existant. Cela ajoute des noms et des verbes à la langue de base, ce qui permet de dire plus facilement ce que l'on veut. (Remarque: je ne recherche pas qu'un DSL n'ait pas de courbe d'apprentissage. Il se peut que le lecteur d'un DSL doive investir le coût unique de son apprentissage.)

Le point important est: dans tous les cas, la DSL doit contenir les termes qui rendent l'expression de son modèle et les modifications du modèle commodes. Puisqu'il n'y a pas de limite évidente à la gamme de domaines possibles, aucun DSL unique ne peut les servir tous.

Mon impression d'UML est que c'est ce qu'il a essayé de faire.

Mike Dunlavey
la source