Почему вы вообще хотите рисовать UML, будь то на бумаге или на компьютере?
Я согласен, что вам нужна модель для представления дизайна. Но даже в крупных проектах продолжительностью около 500 человеко-месяцев я заметил, что только 3-4 диаграммы последовательности действительно имеют значение и имеют шанс пережить весь жизненный цикл приложения. Эти 3-4 диаграммы последовательности (и диаграммы классов, которые представляют их статические временные отношения), как правило, представляют собой высокоуровневый дизайн приложения.
Или посмотрите на это так:
Любое достойное корпоративное приложение не будет иметь 20 различных потоков вызовов. Будет один или два общих (или абстрактных) потока вызовов, которые реализуют все конкретные варианты использования. Давайте возьмем простое приложение Struts / EJB. Общий поток будет что-то вроде: класс действий, вызывающий валидатор, а затем вызывающий сессионный компонент без сохранения состояния, который, в свою очередь, вызывает класс домена, который будет вызывать DAO. Все варианты использования приложения просто реализуют этот поток с конкретными классами, специфичными для этого варианта использования.
Согласны ли вы?
Если вы этого не сделаете, я хотел бы услышать о приложениях, которые имеют 20 различных потоков вызовов и сохранились в течение 5 лет после первого выпуска.
Если вы согласны со мной, мы сводим до 3-4 диаграмм классов и последовательностей даже для крупных корпоративных приложений, состоящих из нескольких тысяч классов. Почему это важно, как вы рисуете и поддерживаете эти 3-4 диаграммы?
Вы можете сказать, что хотите документировать все варианты использования в целях обучения или документирования. За последние 14 лет работы в реальном мире корпоративного программного обеспечения я не помню, чтобы я видел хорошо «поддерживаемую» документацию UML. Прежде всего, хорошие документы трудно произвести, и их не так часто можно найти. Во-вторых, большую часть времени они не синхронизированы с кодом. Большая часть моего опыта связана с крупными банками, страховыми компаниями, автомобильными компаниями и т. Д. Эта среда слишком беспокойна, и их ресурсы ограничены (правда? Мы говорим о банках? Да, в это трудно поверить, но это правда) для «поддержания» хорошего документация.
Так я предлагаю избавиться от UML?
Нет. Нам нужны визуальные модели для представления сложных систем. Мозг человека, кажется, в своих лучших проявлениях при обработке визуальных изображений. зрительная кора , которая отвечает за обработку визуальных изображений, является самой большой системой в человеческом мозге.
Итак, что является разумным решением для простого производства и поддержки моделей UML?
- Вероятно, нам лучше использовать текущий набор инструментов UML для рисования этих 3-4 высокоуровневых UML-диаграмм. Если вы не любите их использовать, отметьте вариант 3 ниже.
- Для диаграмм на следующем уровне абстракции (любые полезные модели должны иметь разные уровни абстракции), сгенерируйте UML из исходного кода. Вы можете создавать диаграммы классов и последовательностей.
- В этот век гибких методологий, почему бы просто не написать классы оболочки и сгенерировать эти 3-4 высокоуровневых диаграммы классов и последовательностей UML? Таким образом, UML вообще не будет поддерживаться.
Исходный код - это правда.
Можете ли вы поспорить с этим утверждением? Если нет, то почему бы не сгенерировать модели из самого исходного кода? Между прочим, я не предлагаю проектирование в обе стороны. Я просто предлагаю путешествие в одну сторону - от кода до моделей.
Однако есть две основные проблемы с сгенерированным UML.
- Когда мы вручную рисуем диаграмму классов, мы показываем отношения между классами, участвующими в сценарии. Большинство существующих инструментов генерации диаграмм классов позволяют пользователю добавлять классы Java (исходный код) в инструмент, и инструмент автоматически показывает отношения между классами. Проблема здесь в том, как можно узнать о классах, включенных в сценарий для начала?
- Вторая проблема - подробность сгенерированных диаграмм. Доступны инструменты для генерации последовательности выполнения и диаграмм классов для сценария. Но диаграммы часто очень многословны и опровергают назначение моделей, цель которых - выделить важные аспекты и отфильтровать несущественные детали.
Хорошие инструменты генерации UML должны решать обе вышеуказанные проблемы. В домене Java есть несколько инструментов, которые пытаются решить эти проблемы. Проверьте обсуждения ниже:
Какие инструменты я должен использовать для визуализации структуры моего кода
Существуют ли какие-либо инструменты для определения архитектурных и дизайнерских шаблонов в коде?
Надеюсь, я ответил на оригинальный вопрос:
У кого-нибудь есть другие интересные идеи? Мне бы очень хотелось услышать, что другие используют для
разрабатывать свое программное обеспечение и прогресс его.
Я являюсь автором инструмента генерации UML времени выполнения MaintainJ , но я попытался объективно ответить на исходный вопрос. Ваши комментарии приветствуются.