Авторы определяют UML следующим образом:
Язык UML — это графический язык моделирования общего назначения, предназначенный для спецификации, визуализации, проектирования и документирования всех артефактов, создаваемых при разработке программных систем.
Рассмотрим, как соотносится сегодняшняя практика использования UML с декларированным авторами назначением языка.
По нашему мнению, можно выделить три основных варианта использования UML (см. диаграмму).
Вариант использования drawing ("Рисование диаграмм") подразумевает изображение диаграмм UML с целью обдумывания, обмена идеями между людьми, документирования и тому подобного. Значимым для пользователя (User) результатом в этом случае является само изображение диаграмм. Вообще говоря, в этом варианте использования языка поддерживающий инструмент не очень нужен. Иногда рисование диаграмм от руки фломастером с последующим фотографированием цифровым аппаратом может оказаться практичнее.
Вариант использования modeling ("Моделирование систем") подразумевает создание и изменение модели системы в терминах тех элементов моделирования, которые предусматриваются метамоделью UML. Значимым результатом в этом случае является машинно-читаемый артефакт с описанием модели. Мы будем называть такой артефакт моделью, деятельность по составлению модели называть моделированием, а субъекта моделирования называть архитектором (Architect). Вариант использования development ("Разработка приложений") подразумевает детальное моделирование, реализацию и тестирование приложения в терминах UML. Значимым для пользователя (Developer) результатом в этом случае является работающее приложение, которое может быть скомпилировано в язык, поддерживаемый конкретной системой программирования (Programming System) или сразу интерпретировано средой выполнения инструмента. Этот вариант использования наиболее сложен в реализации.
Современные инструменты поддерживают указанные варианты использования далеко не в равной степени. Все инструменты умеют (плохо или хорошо) визуализировать основные типы диаграмм UML, некоторые инструменты позволяют построить модель, допускающую какое-то дальнейшее использование, но только немногие инструменты могут генерировать исполняемый код и то, отнюдь, не для всех диаграмм.
Чтобы читателю было легче ориентироваться в мире инструментальных средств моделирования на UML, мы составили две таблицы. В первой все инструменты перечислены в алфавитном порядке, а во второй мы классифицировали инструменты, используя следующие два ортогональных критерия: первый, уже известный — поддерживаемые варианты использования, а второй — доступность инструмента.
Актуальность первого критерия очевидна. Ведь, например, для ведения документации к программным продуктам часто достаточно нарисованных диаграмм. А вот для разработки структуры классов и интерфейсов внутри нового программного компонента бывает необходимым иметь в компьютере полноценную модель, соответствующую стандарту.
Надо понимать, что рассматриваемые варианты использования связаны друг с другом. Если инструмент может применяться для моделирования системы, то он очевидно должен уметь рисовать и диаграммы, а если с его помощью можно вести разработку, то и моделирование системы, и рисование диаграмм входит в обязанности инструмента. При классификации мы учитывает только максимально функциональный вариант использования, и относим инструмент в соответствующую группу. Дополнительно надо иметь в виду, что чем большими возможностями обладает инструмент (чем больше вариантов использования он поддерживает), тем больше ограничений он имеет. Инструменты, поддерживающие только рисование диаграмм, дают большую свободу пользователю, чем те инструменты, которые способны выполнять эти диаграммы или генерировать по ним исходный код.
Второй критерий тоже не должен вызывать вопросов. Инструменты бывают платные и бесплатные. Хорошие профессиональные инструменты, как правило, требуют покупки лицензии. Однако на самом деле для решения простых повседневных задач, которое требуется большинству разработчиков, вполне хватает функциональности бесплатных инструментов.