Каковы наиболее существенные недостатки использования UML? - PullRequest
19 голосов
/ 28 ноября 2009

UML является отличным языком для моделирования программного обеспечения в соответствии с требованиями бизнеса, но существует растущее сообщество, которое указывает на некоторые недостатки из-за недостатка функций.

Каковы наиболее существенные недостатки, которые вы считаете критически важными для UML, и что может быть хорошей альтернативой для устранения этих недостатков?

Ответы [ 9 ]

24 голосов
/ 28 ноября 2009

Самым большим из них является то, что это еще один слой красной ленты, который мешает просто $ #% $ #% кодировать вещь и заставить ее работать.

18 голосов
/ 28 ноября 2009

Тот факт, что люди используют его для «моделирования программного обеспечения для бизнес-требований», как вы говорите, и других подобных процессно-ориентированных приложений. UML начинался как обычный способ для программистов передавать программное обеспечение другим программистам в графической форме. В этом смысле это просто формализованная салфетка-писанина - и как таковая она очень эффективна. Вы можете нарисовать диаграмму классов UML на доске, и я могу понять ее, не перебирая нотации.

Но где-то вдоль линии кому-то пришла в голову мысль, что обозначение чертежа может каким-то образом быть процессом само по себе или, по крайней мере, формальной частью более крупного процесса. И это просто глупо. UML-диаграммы - это прекрасный способ иллюстрировать книги и весьма полезный инструмент для инженеров, чтобы набрасывать идеи назад и вперед. Но на этом все и закончилось.

10 голосов
/ 28 ноября 2009

Я могу сказать как минимум три:

  1. Требуется много времени, чтобы сохранить диаграмму разумной и синхронизированной с реальным кодом. UML-диаграммы не работают, но требуют много времени. Таким образом, они хороши, только если ваша организация может управлять ими
  2. Вы не можете представить каждое условие на диаграмме последовательности. Это невозможно, если вы хотите доставить. Таким образом, диаграммы состояний должны содержать основные факты, а не все возможные результаты.
  3. Хорошее программное обеспечение UML стоит денег, и для правильной работы требуется некоторое время.

Итак, я думаю, что UML хорош как дополнительная документальная роль, и только если это позволяет размер вашей организации.

Решения ... ну, в конце концов, построение диаграмм - это просто способ передать информацию высокого уровня другому человеку в пространстве или времени (например, вы могли бы быть в каком-то году). Экстремальное программирование переносит бремя поиска информации с мертвого дерева на живой мозг. Конечно, это предполагает, что живой мозг никогда не забывает и никогда не уходит. Экстремальное программирование использует избыточность, чтобы уменьшить влияние таких случаев. В большой компании сильный раунд увольнения может уничтожить целые команды, поэтому хранение информации в мозгах может быть рискованным. С другой стороны, у крупных компаний есть человеческая сила, которую можно тратить впустую, а следовательно, и диаграммы.

Кроме того, как указывает WDuffy, если вы дизайнер, и вам необходимо сообщить команде программистов, что они должны реализовать, гораздо проще использовать диаграмму UML. Конечно, небольшая компания с небольшой командой обычно преследует небольшие цели, и вы можете организовывать людей с другим стилем. Небольшая компания UMLing будет производить только UML-диаграммы своего революционного продукта, и тогда она обанкротится.

UML не хороший и не плохой. Это может быть хорошим инструментом, но его нужно использовать в правильном контексте.

Не хватает функций?

ну, я обнаружил, что UML сильно нацелен на объектно-ориентированное видение мира. Наша компания в основном разрабатывается на python, уделяя особое внимание процедурам на уровне модулей. Объекты были легкими контейнерами данных, но вся логика была сделана на уровне модулей. Сложно правильно смоделировать этот стиль реализации на уровне UML, если вы не прибегнете к каким-то «взломам» в терминологии. Я думаю, что трудно моделировать в UML для функциональных или процедурных языков.

Другая вещь, которую я нахожу раздражающей, это предположение о моделировании прецедента в виде диаграммы. По моему опыту, лучший способ передать сценарий использования - это написать короткий рассказ или короткий код, рассказывающий о функции, которую вы хотите передать. История должна быть короткой, максимум одна страница. У этого подхода есть два преимущества: если ваша история представляет собой письменную прозу, команда Q / A может легко прочитать и протестировать ее. Если ваша история - это код, вы можете поставить ее в качестве функционального теста и запустить ночью. Диаграмма не удовлетворяет ни одной из этих потребностей в добавленной стоимости.

4 голосов
/ 28 ноября 2009

Одна проблема с UML связана с его универсальностью: вещи в UML не всегда могут быть реализованы непосредственно на целевом языке, или некоторые языки имеют возможности, которые не могут быть выражены в UML. Так что может быть лучше знать язык реализации заранее, что ограничивает его универсальность.

См. Также раздел критики на странице википедии UML :

  • Стандарты блат

  • Проблемы в обучении и принятии

  • Совокупное несоответствие импеданса / импеданса

  • Дисфункциональный формат обмена

3 голосов
/ 29 ноября 2009

Это не Agile

Что должно было быть последнее слово на UML было написано разочарованным студентом "Кандид Смит", ну, на самом деле Эйфелевым автором Бертран Мейер .

2 голосов
/ 28 ноября 2009

Еще одним недостатком UML является то, что он имеет тенденцию переоценивать дизайн, что может привести к «параличу анализа» (люди переоценивают свою проблему) и к ползучести функций (упущению из виду актуальной проблемы). UML-дизайн может помочь вам в решении проблемы, и вы должны быть осторожны, чтобы быстро перейти к коду (но не раньше; -).

1 голос
/ 06 октября 2013

UML несколько менее применим к дивному новому миру свободной печати и баз данных NoSQL. В него встроено ОО-представление Класса как структуры данных, а не как классификация.

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

0 голосов
/ 28 ноября 2009

Для диаграмм классов в UML имеет смысл использовать их, только если есть автоматизированный способ генерировать код непосредственно из диаграммы. Я реализовал такой инструмент UML-редактора на основе 4-уровневых метауровней, рекомендованных OMG (Object Management Group), и мы с большим успехом использовали UML в команде из 5 разработчиков за 2 года, выполнив около 20-30 архитектурных итераций. Диаграмма была корневым артефактом автоматической цепочки сборки, влияющей на сотни производных артефактов, API, сгенерированных документов, DDL, проектов, тестов и т. Д.

Таким образом, сам по себе UML в части Class Diagrams является отличным языком "программирования", если вы действительно занимаетесь программированием в нем.

Для диаграмм классов в UML, если они не могут быть переведены автоматически, произойдет сбой.

0 голосов
/ 28 ноября 2009

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

  1. Заставь это работать. (Просто запустите и запустите прототип, который имеет все основные функции, независимо от того, насколько он отстой. Это вынуждает вас видеть все мелкие мелкие детали, которые могут не проявиться в формальном анализе. Наличие реальной реализации вашей идеи облегчает понимание того, действительно ли идея вообще стоит того, чтобы ее вообще реализовать, или же ее следует полностью отказаться.)

  2. Сделай это правильно. (Только теперь, когда у вас есть работающий прототип, и вы знаете, что все проблемы реализации, по крайней мере, в принципе решаемы, по крайней мере, в принципе, вы беспокоитесь о хорошем дизайне. обработка ошибок, яда яда яда.)

  3. Сделай это быстро. Если это код приложения, вам лучше иметь доказательство того, что вы нашли медленную часть. Если это общий код библиотеки, вам лучше иметь веские основания полагать, что фрагмент кода может быть медленной частью в некоторых случаях использования библиотеки, то есть не оптимизировать функцию, которую никто никогда не будет вызывать в цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...