Чому UML не використовується в більшості вільних програм (наприклад, в Linux)?


29

Я намагаюся зрозуміти, чому UML не використовується в більшості безкоштовних програмних програм . Наприклад, моя система Debian / Linux, мабуть, має понад десять тисяч безкоштовних програмних пакетів, і я не можу назвати навіть той, який був розроблений за допомогою явної рамки та методології UML. Наприклад, Qt , GCC , Linux ядро , баш , GNU робить , Ocaml , Gnome , Unison , Lighttpd , libonion , докер є безкоштовними програмними проектами , які (AFAIK) не згадуються UML взагалі.

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

Зауважте, що я читав деякі матеріали про UML, але я не стверджую, що добре розумію це.

Насправді я не можу легко назвати безкоштовне програмне забезпечення, де використовується UML (за винятком, можливо, деяких інструментів UML, реалізованих як вільне програмне забезпечення). Можливо, opentack є винятком (щось там згадує UML).

(навіть старі проекти безкоштовного програмного забезпечення могли б прийняти UML після їх запуску, але вони цього не зробили)


Деякі колеги, які працюють над Papyrus, відзначили, що більшість проектів безкоштовного програмного забезпечення не мали на початку жодної явно (і досить глибокої) формалізованої моделі. Крім того, UML виглядає набагато більше пов'язаним з Java, ніж це стверджує (я не зовсім впевнений, що це мало б сенс для Ocaml або Common Lisp або Haskell або Javascript, а можливо, навіть і для C ++ 11 ....). Можливо, гнучка розробка програмного забезпечення не дуже зручна для UML.

Дивіться також цю відповідь на якесь пов'язане питання. Блог M.Fowler Is Design Dead? проникливий.

PS. Я не думаю, що це в основному питання думки; повинна бути якась об'єктивна причина і якась істотна характеристика вільного програмного забезпечення, що пояснює, чому. Я, як правило, здогадується, що UML корисний лише для формалізованих субпідрядних договорів, і корисний лише тоді, коли якась частина розробленого програмного забезпечення прихована, як у власних проектах. Якщо це правда, UML буде несумісний з вільною розробкою програмного забезпечення.

NB: Я сам не шанувальник UML. Я не визначаю UML лише паперовою документацією, але також як [мета-] формат даних для програмних засобів


30
Можливо, причина UML - це лайно? Або це тому, що більшості вільного програмного забезпечення бракує гарної документації?
BЈович

19
У вас це навпаки. Для використання UML має бути об'єктивна причина, а не навпаки. FOSS не використовує UML, або немає об'єктивної причини, або всі причини не приймаються спільнотою FOSS.
Ейфорія

18
Для деяких з перелічених вами проектів причини досить очевидні: адже подорож у часі ще не придуманий. UML вперше стандартизований у 1997 р. Проект GNU - це з 1983 року, GCC 1987, Bash 1988, GNU make 1989, Qt 1991, OCaml 196, Gnome 1997. Тільки lighttpd та Unison навіть досить молоді, щоб їх було розроблено за допомогою UML, але lighttpd написано на C та Unison в OCaml, обидва з яких є мовами, які неможливо добре описати в UML. Плюс, розробники вільного програмного забезпечення, як правило, вірять у написання коду таким чином, що його можна зрозуміти без допомоги зовнішніх інструментів.
Йорг W Міттаг

26
UML не дуже використовується в розробці програмного забезпечення з відкритим або закритим кодом. В основному його використовують люди, які говорять про розробку програмного забезпечення.
Карл Білефельдт

16
З тієї ж причини, UML не використовується багато в розробці невільного програмного забезпечення. Це добре звучить на папері, але на практиці, здається, не дає жодної реальної користі.
JohnB

Відповіді:


37

Існують різні способи використання UML. Мартін Фаулер викликає ці режими UML і визначає чотири: UML як нотатки , UML як ескіз , UML як креслення та UML як мову програмування .

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

UML як креслення часто вказує на проект "великий дизайн на передній план" . Звичайно, це не повинно бути. Модель також може бути повністю описана для певного приросту. Але ідея полягає в тому, що час витрачається на створення дизайну у вигляді моделей UML, які потім передаються комусь для перетворення в код. Всі деталі прописані, і перетворення в код має тенденцію бути більш механічним.

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

Коли ви це замислюєтесь, я думаю, що все вище стосується будь-яких нотацій моделювання. Ви можете застосувати його до діаграм взаємозв'язків сутності, діаграм IDEF , позначень моделювання бізнес-процесів тощо. Незалежно від позначення моделювання, ви можете вибрати, коли ви застосовуватимете його (раніше як специфікацію, після як альтернативне подання) та скільки деталей (повні деталі до основних аспектів).


Інша сторона цього - культура з відкритим кодом.

Часто проекти з відкритим кодом починають вирішувати проблему, з якою стикається окрема особа (або сьогодні компанія). Якщо його запускає особа, кількість розробників становить 1. У цьому випадку накладні комунікації надзвичайно низькі, і немає необхідності повідомляти про вимоги та дизайн. У компанії, швидше за все, буде невеликий колектив. У цьому випадку вам, ймовірно, доведеться повідомити про можливості дизайну та обговорити компроміси. Однак після прийняття дизайнерських рішень вам необхідно або підтримувати свої моделі, оскільки база коду змінюється з часом, або викинути їх. У термінах Agile Modeling "постійно документуйте" і підтримуйте "єдине джерело інформації" .

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

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


З чотирьох режимів, які описує Фоулер, я не думаю, що ви знайдете проект з відкритим кодом або дуже багато проектів де-небудь, які використовують мови моделювання як мови програмування або креслення. Це залишає нотатки та ескіз як можливе використання для UML. Нотатки будуть створені вкладником для учасника, тому ви, ймовірно, не знайдете їх, завантажених ніде. Ескізи зменшуються в ціні, оскільки код стає більш повним і, ймовірно, не підтримуватиметься, тому що це вимагатиме лише зусиль з боку учасників.

У багатьох проектах з відкритим кодом не доступні моделі, оскільки це не додає вартості. Однак це не означає, що моделі не створили хтось на початку проекту чи люди не створили власні моделі системи. Просто підтримувати одне джерело проектної інформації: вихідний код.

Якщо ви хочете знайти людей, що обмінюються дизайнерською інформацією, я рекомендую переглянути будь-які форуми чи списки розсилки, які використовуються учасниками. Часто ці форуми та списки розсилки служать проектною документацією для проектів. Ви можете не знайти офіційного UML, але ви можете знайти там якесь графічне зображення дизайнерської інформації та моделей. Ви також можете зайти в чати або інші канали зв'язку проекту - якщо ви бачите людей, які говорять про дизайнерські рішення, вони можуть спілкуватися з графічними моделями. Але вони, ймовірно, не стануть частиною сховища, оскільки вони не є цінними, коли вони служать своєму призначенню в цілях.


1
Багато тексту, але лише останній, але один абзац насправді відповідає на питання. Крім того, ви знову відкрили питання просто для того, щоб відповісти на нього?
Ейфорія

6
@Euphoric Хоча останній абзац відповідає на питання, все інше необхідно встановити передумови та нормалізувати терміни та поняття. І ні, у неї вже було 4 голоси на повторному відкритті - я виголосив п'ятого і відповів.
Томас Оуенс

3
+1 Дуже вичерпна відповідь. На мою думку, попередні пункти пояснюють висновок. Молодці!
Андрес Ф.

8

Дозволяє використовувати Linux як приклад,

  • Це не об'єктно-орієнтований проект, деякі частини, як-от VFS, можуть бути змодельовані в UML, але інші не можуть бути або не дуже ефективними, тобто, в основному, просто прямим перекладом з structдіаграми класу без зв’язків.
  • UML добре підходить для документації, щоб швидкість отримання якогось нового в проекті. Це не те, що дійсно задоволено Linux, люди, як очікується, самі навчаться цьому.
  • Не впевнені, яким інструментом UML користуватися, люди повинні домовитись про щось, якщо це буде підтримуватися. Для цього був безкоштовний додаток java, але я не думаю, що багато хто хотів би ним користуватися.
  • У 90-х графічний інтерфейс все ще був викликом для Linux. Просто перекопайте архів списку розсилки, я вважаю, що ви не знайдете жодної графіки, крім логотипу для самого Linux у форматі xpm, що відображатиметься під час завантаження. Простий текст - це бажаний формат.
  • Я не думаю, що ніхто не дуже піклувався про дизайн. Люди дбають про функції, і якщо вони будуть прийняті, код буде ретельно вивчений. Випадки використання все ще найкраще описуються словами, як і стандартні стандарти, такі як POSIX та SUS.
  • Багато об’єктів у галузі операційних систем добре зрозумілі та стандартизовані в межах спільноти. Наприклад, люди могли б знати, як це struct in_addrвиглядає в пам'яті, жодна діаграма не може зробити це зрозумілішим.
  • UML не дуже допомагає в алгоритмі моделювання, як-от розподільник пам'яті, планувальник, обробник переривань і т. Д. Джерело, мабуть, простіше зрозуміти.

Це те, що я можу придумати в налаштуваннях проекту Linux. Гадаю, це більше про практичність. Що цікаво, я не пам'ятаю, щоб Таненбаум використовував будь-який UML в своїй текстовій книжці ОС, описуючи Minix.

Можливо, варто згадати, що я також не використовую UML на роботі. Напевно, 20% людей, з якими я працюю, знають деякий підмножина UML.


4
Linux використовує орієнтацію на об'єкти, вона просто не використовує об'єктно-орієнтовану мову . Правда, linux також містить частини, написані в дуже процедурному стилі, але інші частини, як-от інтерфейс модуля ядра, є рішуче орієнтованими на об'єкт.
cmaster

У UML більше діаграм класів.
Майкл Дорнер

Кожен великий програмний проект вимагає об'єктно-орієнтованого дизайну.
Кайс

Перш ніж працювати над проектом, учасники повинні розуміти стандартну мову моделювання, і саме це виправдовує потребу в документації по моделюванню програмного забезпечення в UML, SysML, IDEF0, ODL або OCL.
Кайс

2

UML є репрезентацією, тому це форма мови, і заради аргументів припустимо, що її мета - передавати ментальну модель одній людині іншій.

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

IMHO, я називаю мову "специфічною для домену" (DSL) в тій мірі, в якій вона мінімізує вищезазначений захід, що має очевидні переваги у зменшенні витрат на обслуговування та помилок. Як зробити DSL? Існує кілька способів. Одне з найпростіших - просто визначити структури даних та методи в існуючій мові програмування. Це додає іменники та дієслова до основної мови, полегшуючи сказати, що хочеться. (Примітка. Я не шукаю DSL, щоб не було кривої навчання. Можливо, читач DSL повинен вкласти одноразові витрати на його вивчення.)

Важливим моментом є: у всіх випадках DSL повинен містити умови, які роблять вираження своєї моделі та зміною моделі зручною. Оскільки явного обмеження в діапазоні можливих доменів немає, жоден DSL не може обслуговувати їх усіх.

Моє враження про UML - це те, до чого він намагався.

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