Donc, oui, les diagrammes peuvent parfois être inappropriés. Quand sont-ils inappropriés? Lorsque vous les créez sans code pour les valider, puis que vous souhaitez les suivre. Il n'y a rien de mal à dessiner un diagramme pour explorer une idée.
Développement de logiciels agiles: principes, modèles et pratiques - Robert C. Martin
Que veut-il dire exactement par là? L'UML n'est-il pas conçu pour vous aider à planifier la structure de votre code avant de vous lancer ? Quel est l'intérêt de l'utiliser si vous ne suivez pas les diagrammes que vous avez créés?
Contexte: Dans ce chapitre, Oncle Bob crée un diagramme UML pour le Score Keeper d'un jeu de bowling. Il développe ensuite le programme de manière pilotée par les tests, sans consulter le diagramme UML. Le programme résultant ne ressemble en rien au diagramme UML, et l'oncle Bob arrive à la conclusion citée ci-dessus.
la source
Réponses:
Pour bien expliquer cela, nous avons besoin d'une courte leçon d'histoire. Aux débuts du génie logiciel, une analogie souvent utilisée était la construction d'une maison. Un architecte et un ingénieur en structure discutent des plans avec un client et élaborent une conception. Les constructeurs suivent ensuite cette conception pour construire la maison réelle. L'écriture de code était considérée comme l'équivalent de la construction de la maison actuelle. Ainsi, il y avait un besoin perçu de conception initiale avant que cette construction puisse avoir lieu. Divers outils de conception graphique ont été créés, dont UML en fait partie.
L'idée à l'origine avec UML était que l'on concevrait entièrement un système avec UML, puis le confierait aux codeurs pour traduire cette conception en code. En réalité, cela ne fonctionne tout simplement pas et a conduit à des années de programmeurs considérés comme des «exécutants» plutôt que des «concepteurs», les projets étant en retard, les conceptions devant constamment changer après qu'elles étaient censées être terminées, etc.
La raison est simple. Le codage, c'est le design . Avec l'analogie de la maison, le code est les dessins de l'architecte. Le compilateur est le constructeur qui prend ces conceptions et construit un programme à partir d'eux. Cette réalisation a ensuite conduit à la naissance de techniques agiles, TDD etc.: des outils pour améliorer la qualité de la conception de ce code.
Tout comme un architecte peut produire des croquis préliminaires pour l'aider, elle et son équipe, à visualiser la conception globale, un développeur peut utiliser UML ou d'autres outils pour aider à visualiser la conception nécessaire. Tout comme ces esquisses ne sont pas suivies aveuglément, l'UML ne doit pas être suivi aveuglément. La conception du code devrait évoluer à partir d'itérations agiles et à l'aide de TDD. De même, tout comme un architecte peut construire un modèle de maison pour l'aider, elle et son équipe, à visualiser les dessins, UML peut être utilisé pour aider à visualiser la structure du code.
Comme le dit l'oncle Bob, vous ne pouvez pas valider l'UML, vous pouvez uniquement valider le code. Par conséquent, le code est la documentation de conception principale et UML, s'il est utilisé, est uniquement une documentation secondaire.
la source
Je suppose que tous les idiomes de programmation (ou conception ou code) ne correspondent pas à UML (que j'avoue ne pas bien connaître - je n'ai lu que quelques livres dessus), je ne l'ai jamais utilisé et je ne l'aime probablement pas).
Le code C simple (par exemple le code source du noyau Linux) peut ne pas être exactement modélisé par UML.
Le code Ocaml (avec ses modules et ses foncteurs) ou même le code C ++ 11 (avec lambdas et modèles) peuvent ne pas correspondre à UML.
La programmation en plusieurs étapes à la MetaOcaml ne rentre probablement pas dans UML.
Le code Prolog ou Common Lisp ne rentre probablement pas dans UML.
Voir aussi cette réponse et cette question de la mienne.
Lisez les livres Pragmatics du langage de programmation de Scott et Concepts, techniques et modèles de programmation informatique de Van Roy , puis demandez-vous si chaque modèle de programmation y correspond en UML.
Voir également Is Design Dead de Martin Fowler ? Blog.
la source