Чому недоцільно використовувати діаграми UML для планування того, як буде організовано ваш код?


9

Отже, так, діаграми можуть бути часом невідповідними. Коли вони недоречні? Коли ви створюєте їх без коду, перевіряйте їх, а потім збираєтесь слідувати за ними. Немає нічого поганого в тому, щоб скласти схему для дослідження ідеї.

Розробка програмного забезпечення Agile: принципи, зразки та практики - Роберт К. Мартін

Що саме він має на увазі під цим? Хіба UML не розроблений, щоб допомогти спланувати, як структурувати код перед "зануренням"? Який сенс використовувати його, якщо ви не дотримуєтесь наведених діаграм?

Контекст: У цій главі дядько Боб складає схему UML для Score Keeper of the Bowling. Потім він продовжує розробляти програму тестово, без консультацій з діаграмою UML. Отримана програма - це не що інше, як діаграма UML, і дядько Боб приходить до цитованого вище висновку.


4
Справа дядька Боба полягає в тому, що архітектура, що виникла з тестово керованої розробки, може кардинально відрізнятися від діаграми UML.
Роберт Харві

1
Також читайте, чи дизайн мертвий? Мартін Фаулер для врівноваженого обговорення цієї теми та спритного руху
Eliezer Steinbock

4
Оскарження цього питання у відповідь на неправильне судження з боку @RobertHarvey та ін при голосуванні, щоб закрити важливе і корисне питання.
Девід Арно

3
@DavidArno Якщо у вас є сильні думки щодо того, що слід чи не слід закривати, я б настійно рекомендую вам долучитися до дискусій на нашому мета-сайті. Кожен, хто зараз там працює (включаючи мене), ймовірно, підпадає під "@RobertHarvey et al", за винятком кількох працівників ДП, і нас хвилює, що інша точка зору не представлена, але поки що ніхто не з'явився, щоб її представляти .
Іксрек

1
@Ixrec, я ніколи раніше не брав участь у мета-дискусіях, окрім одного разу, щоб перевірити, чи можу я відповісти на власні бібліотеки з відкритим кодом (відповідь на те, що я міг). Можливо, я повинен скористатись вашою порадою і взяти більше участі. Дякую за пропозицію.
Девід Арно

Відповіді:


19

Щоб правильно пояснити це, нам потрібен короткий урок історії. У перші дні інженерії програмного забезпечення часто використовувалася аналогія будувала будинок. Архітектор та інженер-конструктор обговорюють плани із замовником та придумують дизайн. Потім будівельники слідують цій конструкції, щоб побудувати власне будинок. Письмовий код розглядався як еквівалент будівництву фактичного будинку. Таким чином, виникла потреба у розробці передньої конструкції до того, як могла відбутися збірка. Були створені різні інструменти для графічного дизайну, одним з яких був UML.

Первісна ідея UML полягала в тому, щоб повністю розробити систему з UML, а потім передати її кодерам, щоб перевести цю конструкцію в код. Насправді це просто не працює, і це призвело до того, що роки програмістів розглядаються як "реалізатори", а не як "дизайнери", проекти запізнюються, проекти повинні постійно змінюватися після того, як вони повинні були бути завершеними і т.д.

Причина проста. Кодування - це дизайн . З аналогією будинку, код - це креслення архітектора. Компілятор - це той будівельник, який приймає ці проекти та будує з них програму. Потім ця реалізація призвела до народження спритних методів, TDD тощо: інструменти, які допоможуть покращити якість цього кодового дизайну.

Як архітектор може створювати попередні ескізи, щоб допомогти їй та її команді візуалізувати загальний дизайн, так розробник може використовувати UML чи інші інструменти, щоб візуалізувати необхідний дизайн. Так само, як ці ескізи не сліпо слідують, так і UML не слід сліпо слідувати. Дизайн коду повинен розвиватися з гнучких ітерацій та використання TDD. Так само, як архітектор може побудувати модель будинку, щоб допомогти їй та її команді візуалізувати креслення, так UML можна використовувати для візуалізації структури коду.

Як каже дядько Боб, ви не можете перевірити UML, ви можете лише перевірити код. Тому код є основною проектною документацією, а UML, якщо він використовується, є лише вторинним документуванням.


7
У мене був піднятий ділянку даху мого будинку на початку цього року, і це було досить навчально. Архітектор насправді не робив більше того, що малював, як повинен був виглядати кінцевий продукт. Він передав важкі розрахунки та конструкцію конструкції інженеру-будівельнику. Тоді будівельникам довелося співставити теоретичні конструкції з актуальністю будинку (як тільки гіпсокартон вимкнувся, балки виявились дещо в інших місцях), тому дизайн відбувався на кожному кроці.
Джейді

1
Це корисна відповідь, проте вона спрощує деякі аспекти. Однією з головних причин, чому UML не працює добре, як "нотація дизайну високого рівня", - це те, що IMHO їх винахідники були надто впертими, щоб додати схему потоку даних. Це єдиний вид позначень, який я знаю, який підходить для дизайну верхніх міст, що дозволяє висловити абстракції для компонентів та інтерфейсів між ними різного масштабу, а також може мати чітко визначене відображення коду. Натомість UML містить безліч дурниць, які нікому насправді не потрібні.
Док Браун

3

Я здогадуюсь, що не кожна ідіома програмування (або дизайн, або код) вписується в UML (що, я визнаю, я не знаю добре - лише прочитав кілька книг про це - я ніколи не користувався цим, і, мабуть, мені це не подобається).

Простий код C (наприклад, вихідний код ядра Linux) може бути не точно змодельований UML.

Код Ocaml (з його модулями та функторами) або навіть код C ++ 11 (з лямбдами та шаблонами) може не вписуватися в UML.

Багатоступеневе програмування MetaOcaml, ймовірно, не вписується в UML.

Код прологу або звичайний код Lisp, ймовірно, не входить до UML.

Дивіться також цю відповідь і це моє питання.

Прочитайте Прагматику мови програмування Скотта та концепції, методики та моделі комп'ютерного програмування Скотта , а потім запитайте себе, чи кожна модель програмування там входить в UML.

Дивіться також " Дизайн мертвого" Мартіна Фаулера ? блог.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.