Témoignage
 

Rubrique « Info »

 



Écrivez à AILES !



Retour vers les blagues



Retour vers les questions UML
 


B. Meyer critique UML
(et c'est pas triste !)


    Ce qui suit est la traduction d'un texte trouvé sur eiffel.com et qui contient un article publié par Ed Yourdon dans son journal "American Programmer" en 1997. Il avait demandé à Bertrand Meyer (le concepteur du langage "pleinement" orienté-objet Eiffel) de trouver au moins un avantage à UML.
    Mais attention, replaçons les choses dans leur contexte.
    1997 : UML 1.0 n'est adopté que le 25 septembre 1997. Avant, seuls 2 documents faisaient référence :
    - UML 0.8, une version préliminaire de 1995 publiée dans OOPSLA ;
    - UML 0.9 et 0.91 reconnues par l'OMG en juin 1996.
    Et le moins que l'on puisse dire, si l'on en croit les remarques acerbes de notre ami Meyer, c'est que les 2 premiers documents n'étaient pas encore très bien rédigé.
    Pour information, seul UML 1.3 de juin 1999 est reconnue comme la première version mature de UML et aujourd'hui nous en sommes, depuis février 2001, à UML1.4. Vous trouverez par ailleurs sur ce site quelques
question tordues concernant UML.

    Ce qui suit est donc une satire, un pamphlet, sous la forme d'une lettre d'un étudiant à son professeur, se plaignant de sa mauvaise note due à une incapacité à trouver un seul avantage à UML (alors que tous le monde encense cette méthodologie).
    Il ne faut pas prendre tout cela au premier degré, d'autant que beaucoup de choses ont évoluées (le contexte historique et la méthodologie).
    ...
    Et pourtant, ... certaine des critiques de 1997 peuvent encore faire mouche ! Sacré Bertrand !
    Mes commentaires sont en
[italique rouge entre crochet], comme d'habitude, la plus-value de cette traduction réside dans les commentaires et surtout les renvois vers les autres articles de ce site.


De
Pour
Sujet
Naïf Dupond, Étudiant dans le cours de base OO.
Professeur Sévère.
ma requête pour une modification de note.

Cher Professeur Sévère :

     Votre assistant pour le cours de base OO m'a redirigé vers vous pour ce qui concerne mon D- [(6/20 ?)] que j'ai reçu pour ma rédaction sur "Une évaluation de la proposition de Langage de Modélisation Unifié (LMU)" [enfin... "Unified Modeling Language (UML) en anglais, quoi !]. J'espère que vous considérerez la possibilité de changer cette note en mieux (un D peut-être), surtout que cela serait un vrai coup porté à ma moyenne, déjà pas très brillante après ce "0" que vous m'aviez donné lors de votre dernière session. (Vous vous souvenez peut-être que dans l'examen final, j'avais écris : "Il y a peut-être autre chose dans la vie que les tranches de jambons et Java". Je réalise maintenant à quel point ce commentaire était déplacé et je m'excuse sincèrement si j'ai heurté quelqu'un).

    Je comprends bien sûr les raisons de ce D- et j'apprécie votre clémence à mon égard. Comme l'assistant me l'a fait remarqué, il n'y avait rien de positif sur UML dans mon papier ! Cela ne peut sûrement pas être correct. Tout le monde dit que UML est une réelle avancée dans l'univers de la conception de logiciel, et qui suis-je pour mettre en doute cela ? C'est pourquoi je ne vous demanderai pas de modifier ma note simplement pour améliorer ma moyenne, même si j'espère que vous prendrez en considération combien cela est désagréable de perdre sa bourse d'élève méritoire (LIEN) , sans compter ses petites amies et compagnie. Non. Je reconnais que j'étais dans l'erreur et je veux me racheter. Il doit y avoir quelque chose de bien à dire sur UML.

    Et je vous assure que je retiendrai ma leçon : positiver. Quelque soit le sujet, il est toujours possible de lui donner un éclairage favorable. Le journal de ce matin a même publié un qualificatif qui pourrait être interprété comme non désagréable concernant Newt Gingrich ! [et c'est vrai qu'il règne quelques allégations sulfureuses autours de cette homme de l'année 1995 selon le Times et un influent Speaker of the House of Representative de 1995 à 1999] Pourquoi pas UML ?

 

Positiver !

    J'ai donc suivi les conseils de votre assistant. Par exemple, il se pourrait qu'il y ait des choses sympathiques à dire au sujet de la notation elle-même. Et il existe en effet une telle notation pour l'analyse et la conception, dont l'ensemble complet de symboles tient sur une page et couvre pourtant toutes les bases des techniques de description des systèmes Orientés-Objet (OO) et qui est particulièrement efficace pour couvrir la description d'important système : la notion "Business Object" (BON : Business Object Notation) de Waldén et Nerson, comme elle est décrite dans leur bouquin [3]. Bien sûr, UML ne possède aucune de ces propriétés. Dans sa tentative de montrer qu'il inclut bien les petites idées de tout le monde, il affiche des tonnes de symboles les plus bizarres les uns après les autres. Rien que le "Résumé de Notation" prend 60 page et a sa propre table des matières ! [rq : bôôaaa, aujourd'hui, avec la version UML1.4, la même notation prend.. heu... 185 pages, index non-compris. Gloups] ! UML est en réalité aussi complexe qu'un gros langage cryptique [c'est-à-dire "secret" ou "codé"], avec une utilisation abondante de "$" et "#" et "-" et "*" et "triangle rempli sans queue" et rectangles et losanges et lignes pleines et lignes pointillées et ellipses remplies et ellipses pointillées [enfin, l'ellipse pointillée est, hélas, trop peu utilisée] et flèches de toutes sortes et mots-clés comme "const" et "sorted" (qui ne doit pas être confondu avec "ordered") et différent sens sémantiques pour une classe si son nom apparaît ou non en roman ou en italique [italique => classe abstraite !] ; Mais au moins un langage de programmation, même le pire des langages, est exécutable ! Là, vous devez vous apprendre cette complexité monstrueuse pour établir des diagrammes un possible futur système.
    Ce qui amène la question du développement d'un seul tenant [pour "seamless development"]. Une fois que vous avez vos jolis (ou pas si jolis) diagrammes, vous voudrez construire un système, sauf si le budget a déjà été engouffré par les outils d'AGL (un destin courant pour les entreprises qui prennent trop sérieusement la tendance "méthodologie", et qui se retrouve sans argent pour le vrai développement). Mais alors vous devrez tout recommencer avec un langage de programmation pour réaliser votre vrai métier. Et comment maintenez-vous la cohérence entre le programme et les diagrammes ? [d'où l'importance, depuis 1997, de la génération automatique de code multi-shot - c'est-à-dire qui n'écrase pas le code précédemment généré - et en cohérence avec le modèle, ou alors , depuis 2000, l'importance de la rétro-conception, maintenant bien au point surtout avec des langages comme Java]. Waldén et Nerson ont fait des propositions convaincantes concernant les aspects "d'un seul tenant" ( un process unique et continu) et réversible (capable de faire des aller-retours entre l'analyse, la conception et l'implémentation.[et cela n'est pas encore possible, même en 2002. J'en avais fait la remarque dès novembre 2000 dans l'article AGL : les grands écarts]. Des outils comme EiffelBench et EiffelCase répondent à ces besoins, mais cela ne semble pas poser le moindre problème à UML. Mais bien sûr, tous ceux qui utilisent UML doivent être très intelligent (ne serait-ce que pour apprendre les symboles), les analystes le deviendront également dès la première utilisation, ainsi que les concepteurs, et en conséquence nous n'aurons rien à modifier dans les 10 prochaines années de la vie du projet. A moins que peut-être UML ne s'adresse que au projets dont les spécifications ne changent jamais. Ma grand-mère me disait qu'elle avait entendu parler d'un tel projet dans sa jeunesse. Je pense que ce qu'elle évoquait avait quelque chose à voir avec la calcul du 6ème nombre de Fibbonacci.

Orienté Objet ?

    Il m'a donc fallu aller voir ailleurs pour trouver un point positif à UML. Je m'y emploie avec acharnement et j'espère que vous prendrez en compte tous ces efforts avant de rendre à l'administration vos notes finalisées (rappelez-vous que je ne demande que un D, bien sûr un C- serait très apprécié avec toute ma gratitude). Par exemple, j'ai essayé de voir si je pouvais caractérisé UML comme "orienté objet" ; ce qui est, comme nous le savons tous, un grand compliment. Pas de chance. Bien sûr, les auteurs ont fait un usage approprié des termes "objet" et "héritage" et etc. Mais un simple coup d'œil sur les diagrammes révélaient UML sous son vrai jour : une extension de la modélisation entité-relation. Les exemples de bases illustrent des associations binaires et ternaires, comme les associations de [1], page 16, entre "vol d'avion", "siège" et "personne". C'est à l'exact opposé de la modélisation orientée objet où, comme nous le savons tous, le monde est structuré en classe, construit à partir de type d'objet et toutes opération ou propriété n'appartient qu'à une classe. A l'évidence, dans une conception orientée-objet, vous ne pourriez pas avoir une relation "passager" qui concerne de façon symétrique " vol d'avion", "siège" et "personne" ! Dans un système orienté-objet, un "passager" appartiendrait à une des classes. C'est ainsi que vous obtenez consistance, simplicité, modularité et réutilisabilité des architectures orientées-objet ; considérez BON ou Eiffel pour en apprécier les avantages. Les auteurs d'UML savent cela, bien sûr ; pour bien comprendre pourquoi ils ont qualifié UML d'orienté objet, il faut apprécier leur fameux sens de l'humour. De toute évidence, ils entendaient cela comme une bonne blague. Est-ce suffisamment positif ?
    Des preuves supplémentaires de cette blague m'ont été fournies par les références répétées aux "Cas d'Utilisation" [Use Cases] comme étant un élément central de la méthode. A l'époque où "Cas d'utilisation" est le mot à la mode de l'année Web, j'avais essayé de comprendre de quoi il en retournait, et j'avais eu du mal jusqu'à ce que je demanda à mon grand-père qui m'expliqua tout : c'était le nouveau nom donné à la conception fonctionnelle descendante de son adolescence. Vous considérez ce que le système "doit faire" ("cas d'utilisation"), et en déduisez de cette analyse l'architecture du système. C'est à l'exact opposé de la conception orientée-objet qui refuse consciencieusement de payer trop d'attention, pendant les premières phases, aux principales fonctions du système parce que :
- elles sont encore sujettes à changement ;
- elles reproduisent le comportement d'anciens systèmes (ceux que l'on essaye de remplacer par un nouveau système) ;
- elles conduisent à des décisions prématurées quant à l'ordre des opérations (une des données les plus volatiles qui soient dans le monde du software) ;
- elles se concentrent trop sur les propriétés superficielles du systèmes (son interface avec le reste du monde) au dépend de ses propriétés fondamentales.
    Au lieu de tout cela, la conception orienté-objet se concentre sur les types d'objet manipulés par le système et définit chacun de ces types au travers de leurs opérations applicables et de leurs propriétés abstraites - les contrats - quelques soient leur ordre d'opérations.
[différences entre Type, Classe et Objet ? c'est par là]
    Mon grand-père est content que les cas d'utilisation soient présent dans UML parce que cela lui rappelle le bon vieux temps et qu'il n'a jamais aimé ces trucs objets [tiens, comme notre programmeur de 30 ans ? ], de toutes façons (je pense que cela est un commentaire positif).
[sacré Bertrand, il appuie la où cela fait mal, c'est-à-dire sur l'aspect le plus fonctionnel de cette notation objet. A noter qu'un lien est peut-être prévu par UML, cf. notre questionnaire UML]

Trouver une utilité à UML

    Manifestement UML ne sera d'aucune utilité à un développeur de logiciel. Peut-être serait-il utile à quelqu'un d'autre ? Des chefs de projets, peut-être ? Des dirigeants de compagnie ? La compagnie elle-même ? Bien sûr que non. En effet, les documents n'affichent aucune prétention à une telle utilité, et ce pour de bonnes raisons. Il est difficile d'imaginer quel bénéfice un business pourrait retirer de pages de diagrammes cryptiques [la structure d'intérêt peut s'avérer
cryptique, c'est à dire indétectable à partir de caractères visibles]
aux propriétés hasardeuses d'un système mal compris.
     Donc je regarde plus loin. Parfois, une proposition offre une solution erronée, mais à le mérite de poser le bon problème. Peux-t-on dire cela à propos d'UML ? Je l'espère, ne serait-ce que parce que cela aiderait ma moyenne, et aider ma moyenne me permettrait de regagner ma amour-propre, sans parler de ma petite amie et du reste, mais je digresse. Au fait, de quel problème, s'il en existe un, UML est censé traité ? J'ai vraiment essayé avec la meilleure volonté du monde, parmi l'interminable liste des documents du site de Rational, de trouver une description du problème (qui aurait dû se trouver, comme on nous l'a appris dans nos cours d'ingeneering, en début de tout document technique); je crains de ne pouvoir rendre compte d'aucune trouvaille.

Amanda à la rescousse

    Afin de voir quels objectifs auraient pu avoir été poursuivi, je me suis référé à la rédaction de mon amie Amanda-La-Chance, celle qui a eu 20/20 : "Les challenges qui attendent l'industrie du logiciel" (au fait, professeur, je ne veux pas avoir l'air de me plaindre, mais pourquoi Amanda obtient toujours les bons sujets ?). Ce rapport, très agréable, je dois l'avouer, est très efficace dans la description des obstacles que doivent surmonter les développeurs. 
- Les bons logiciels doivent être corrects. Oubliez une assertion dans une routine, et vous obtenez un désastre de 500 millions de $, dans le cas de la récente explosion d'Ariane 5 , résultat d'une tentative de réutilisation d'une routine Ada sans un mécanisme d'assertion tel que proposé par Eiffel (cf. le n° de janvier de IEEE Computer). Je ne vois rien dans UML qui permette l'exactitude [correctness]; quelques verbiages sont adressés au sujet de la notion de contrat, mais les auteurs démontrent qu'ils ne comprennent rien à l'idée de conception par contrat (par exemple, ils confondent les spécifications sémantiques et une simple déclaration de type!).
- Les bons logiciels doivent être robuste; comment UML y concourre-t-il ? 
- Les bons logiciels doivent être facile à modifier (Amanda qualifie cela "d'extensibilité"); mais la lourde machinerie d'UML ne garantie en rien qu'un développeur qui aura réussi une description d'un système ne sera pas trop terrorisé à l'idée de changer quoique ce soit. 
- Les bons logiciels doivent être réutilisables; rien dans UML ne répond aux challenges posés par la réutilisation, comme la standardisation des conventions d'interface, la séparation des opérandes optionnels, la séparation des commande de type requête, etc. [est-ce toujours aussi vrai ? l'interface a une vraie représentation, et la notion de composant se renforce et aura - enfin - une vraie légitimité et autonomie dans UML2.0!]
- Les bons logiciels doivent être performant - oh, pardon, c'est trop lié à l'implémentation, et l'on ne parle pas d'implémentation en compagnie policée. [marrant, ça... dès que l'on utilise UML dans un AGL, on se retrouve confronté, surtout en phase de conception, à devoir répondre justement au problème de la représentation logique d'une classe et de la façon d'y "cacher" des choix d'implémentation ! Cf. AGL : les grands écarts] (Si UML traitait de l'implémentation, cela aurait concerner des problèmes liés au logiciel; l'avantage des ronds et des flèches, à l'opposé des programmes, c'est qu'ils ne plantent jamais.).
    Au lieu de tout cela, UML ne semble avoir qu'un seul objectif : s'assurer encore et encore qu'il n'omet aucun mot technique à la mode, comme le montre cet extrait de la page 31 de [2] qui essaie d'explique que les patterns sont intéressants, mais couverts les concepts propres aux auteurs de "diagrammes d'interaction", quoique cela puisse être (je n'ai pas réussi à le comprendre).

L'aspect intéressant de la plupart des pattern réside dans leur comportement dynamique. On peut certainement illustrer cela avec des diagrammes d'interaction, mais seulement dans le contexte d'un modèle spécifique. Il est plus dur de rendre compte de l'aspect générique des patterns. En définitive, les patterns sont des templates en un sens, dans lequel les classes, associations, attributs et opérations pourraient tous être renommés ce qui (je me demande s'il ne s'agit pas plutôt de "tout en") conservant l'essence du pattern; nous avons besoin d'un moyen de paramétriser clairement les patterns. Toutefois, nous trouvons que nous avons suffisamment de moyens pour représenter les patterns via UML en les exprimant en terme d'interactions.

    Franchement, qui est intéressé par un tel méli-mélo ? Comment quiconque peut croire que cela ait un rapport (même "en un sens") avec l'industrie du logiciel ? Et je n'ai même pas cité l'extrait sur le "méta-modèle". Peut-être devriez-vous demander à Amanda de consacrer sa prochaine rédaction au "côté générique des patterns". Ca c'est un challenge! [et il a fallu attendre UML 1.3 puis 1.4, avec ses "profiles", pour en voir un dédié aux framework, ce qui permet déjà de se rapprocher de ce challenge : les points de paramétrisation des frameworks sont clairement représentés. Même si un pattern n'est pas un framework - en particulier, l'inversion du contrôle de l'exécution n'est pas toujours présente dans le pattern - cela peut donner une représentation convaincante de "l'aspect générique des patterns" via UML]
   
Un ami qui avait assisté récemment à une conférence sur l'Orienté-Objet m'a parlé de toutes les blagues que les experts OO - parmi les plus respectés dans leur domaine - s'échangeaient pendant les pauses et dans le fond des salles de conférence. Il ne pouvait croire au contraste entre l'enthousiasme public et les critiques privées. Mais les dirigeants et autres preneurs de décisions n'entendaient que l'enthousiasme public. On leur dit que ULM est orienté objet, ou plus souvent encore que orienté objet signifie UML. Lorsque cela échouera à aider le développement de logiciel, cela ternira le domaine de l'orienté objet. Si l'on tient compte de tout l'excitation commerciale autours de lui, UML, en ne tenant pas ses promesses, a le pouvoir de retarder les progrès de la technologie objet de 10 ans [et 5 ans après, que constatons-nous ? 2 tendances : modélisation avec génération de code ou reverse engineering, les 2 contribuant à améliorer le développement des logiciel. Les design patterns en particulier sont devenu incroyablement populaires alors qu'ils bénéficiaient d'une représentation facile à partager, voire même à appliquer automatiquement sur un modèle.]

 

Enfin, la réponse ?

    Alors professeur, que puis-je dire, qu'est-ce que je peux dire ? Je suis aller voir votre assistante et lui ai demandé si "la page principale du site de Rational a vraiment de jolie couleur" pouvait passer pour un compliment acceptable. Mais elle a dit que non, je devrai trouver quelque chose de plus substantiel. J'ai essayé : "au moins, dans leur dernière révision, ils ont cessé d'appeler leur truc une méthode, ce qui montre qu'ils ont un certain sens du ridicule.". Ca ne l'a pas fait non plus. Alors j'ai cherché et cherché et finalement, j'en suis tout excité, j'ai trouvé! Oui, UML a un but, en fin de compte.
    La raison pour laquelle je ne l'ai pas découvert plus tôt et qu'il n'apparaît seulement que dans la conclusion. Une place étrange pour mentionner le sujet de ce que l'on rédigeait durant tout le document, mais mieux vaut là que nulle part. Bien sûr, ce que j'ai trouvé :
- n'est pas un objectif technique (UML, comme je l'ai déjà dit, ne sert aucun but relié au logiciel, et cela me va ; certaines personnes ont d'autres choses à faire de mieux dans leur vie que d'essayer d'améliorer la technologie du logiciel).
- n'est pas un objectif de management, ou tout du moins pas pour des managers de projets logiciels.
- n'est pas un objectif métier, du moins pas pour des métier utilisant UML. 
Mais c'est un objectif.
    Lorsque j'ai finalement découvert cet objectif, l'esprit généreux et noble des auteurs m'a presque tiré quelques larmes. Il serait injuste d'affirmer que les piles de documentation UML sont vides de toute substance, alors qu'en fait elles contiennent une authentique idée. Je l'ai trouvée dans le tout dernier paragraphe du tout dernier rapport décrivant la révision 0.91 [2]. Elle était là, dans toute sa simplicité, expliquant tout ce que j'avais mal compris dans ma jeune naïveté. Comment avais-je pu accuser la méthode de ne pas aider les développeurs ou managers alors qu'elle ne s'intéresse nullement au développement logiciel, mais uniquement au développement d'un marché pour les consultants et les formateurs ? Tout prenait un sens : la complexité et l'étrangeté de la notation, que j'avais imprudemment pris pour une tare, sont en fait ses qualités les plus attirantes, puisqu'elles favorisent des opportunités infinies de business pour Rational et peut-être même aussi pour les autres; il en va de même pour son adoption tiède des idées "orientées-objet", puisque cela signifie que les consultant n'auront même pas à aimer ou connaître la technologie objet pour enseigner UML.
    Ma longue recherche n'aura pas été vaine. Cela m'a conduis à une complète compréhension d'UML, de cette admirable machine se nourrissant elle-même, dévoué de A à Z à la création d'un nouveau marché, libre de toutes les difficultés associes au déplaisant business du développement logiciel : les livres UML ! les cours UML ! les cours sur les livres ! les livres sur les cours ! les livres sur les livres ! des cours d'introduction pour préparer aux cours avancés ! Les cours destinés à ceux qui enseignent les cours ! les révisions ! les journaux UML ! Les conférences ! les Workshops ! Tutoriaux ! Standards ! Comités ! Tee-shirt ! [là, je voudrais pouvoir dire que notre ami B. Meyer a pété une durite... le problème, c'est que tous les éléments qui viennent d'être cités existent sans doute! surtout les tee-shirt!]. Plus vous pensez aux possibilités, plus elles vous semblent éblouissantes. Et pour le lecteur suffisamment courageux ou ennuyé pour tout lire jusqu'à la fin, voici le grand projet, exposé dans le dernier paragraphe.
    Tout prenait un sens. Avec cet aspect inévitable qui est la marques des authentiques chef-d'œuvres,  dans toute la gloire de l'inimitable style de ce document, les six dernières lignes donnent soudainement un sens aux centaines de pages creuses avant elles : 

Il existe plusieurs cours publics et nous connaissons plusieurs livres traitant différents aspects d'UML, tous basés sur nos précédentes publications. Nous espérons une large diffusion d'outils de support, des cours de formations et du consulting. Nous encourageons fortement ce type de support [comme cela est aimable d'encourager le support de vos propres produits ! Quels désintéressement !] et nous travaillerons avec les auteurs, formateurs et consultants pour à s'assurer que leurs questions soient traitées de façon à être largement diffusées et en accord avec le support UML.

J'espère que ma requête retiendra favorablement votre attention,

Sincèrement votre,

Naïf Dupond

 

Références


[1] Kim Waldén and Jean-Marc Nerson: Seamless Object-Oriented Software Architecture: Analysis and Design of Reliable Systems, Prentice Hall, 1995. (retour à l'article)

[2] Rational Software Corporation: 0.91 Addendum to the Unified Modeling Language, at http://www.rational.com [a priori, le document n'est plus en ligne... dommage!] (retour à l'article)

[3] Kim Waldén and Jean-Marc Nerson: Seamless Object-Oriented Software Architecture: Analysis and Design of Reliable Systems, Prentice Hall, 1995. (retour à l'article)




               
 
Avertissement !
 
Décollage !  |  Présentation du site web "AILES"  | 
Infos générales  |  articles "Informatique"