Визуальное качество компоновки UML диаграмм: как сделать диаграммы более читаемыми?
На многих этапах разработки программного обеспечения есть место моделированию, описанию архитектуры и организационной структуры. UML (Unified Modeling Language) сохраняет статус распространённого инструмента, используемого при решении названных выше задач. Его функциональность, полезность или уместность в отдельных случаях могут быть поставлены под вопрос, однако так или иначе с ним сталкиваются специалисты, выполняющие самые разные роли в проекте: программисты, системные и бизнес аналитики, архитекторы ПО.
Количество материалов, посвящённых UML огромно: гайды, разборы ошибок, обзоры, советы... Но есть одна тема, которая, на мой взгляд, незаслуженно обделена вниманием. В этой статье я постараюсь, во-первых, объяснить, почему на качество компоновки UML диаграмм стоит обращать внимание, и во-вторых, что можно сделать, чтобы создаваемые вами диаграммы стали более удобными для восприятия другими людьми.
Идея этой статьи родилась в процессе работы над проектом по созданию программного инструмента для оценки качества компоновки диаграмм с применением машинного обучения. Для меня, как и тех, кто вместе со мной работает над этим проектом, интересен вопрос, почему некоторые диаграммы читаются, понимаются и запоминаются лучше других. Возможно ли перейти от субъективной оценки «красоты» диаграммы к объективной оценке её визуального качества?
За время обучения в университете на IT направлении, я увидел огромное число диаграмм, соответствующих формальным требованиям и не противоречащих спецификации UML, однако настолько нечитаемых, что возникала мысль, что никто не будет использовать UML диаграммы в реальной жизни, ведь в таком виде из них тяжело получить полезную информацию. Да, многие из таких диаграмм делали студенты, однако и в интернете вы иногда найдёте примеры UML диаграмм, от которых «волосы встают дыбом», особенно если эти диаграммы описывают реальную сложную систему, а не вымышленный упрощённый пример.
В эту статью вложена скромная надежда, что кто-то начнёт обращать больше внимания на компоновку диаграмм. А тот инструмент, что мы разрабатываем, можно было бы использовать, например, в образовательном процессе, чтобы снизить нагрузку на преподавателей и помочь будущим разработчикам научиться составлять более приятные диаграммы.
А зачем вообще диаграмме быть «приятной»? Есть ли что-то за пределами субъективной оценки? А есть ли исследования, подтверждающие, что компоновка диаграммы влияет на её восприятие? В поиске ответов на эти вопросы, я отправился читать научные исследования.
Любая UML диаграмма (и не только UML) состоит из набора элементов. Под компоновкой диаграммы понимается размещение этих элементов. И как следует из данных исследований, в которых оценивалось то, как влияет форма и взаимное расположение объектов на восприятие человеком графических данных, особенности компоновки UML диаграммы существенно влияют на понимание человеком её содержания, а именно на скорость и точность её прочтения. Во множестве научных работ было показано, как внешний вид графов и UML диаграмм (которые можно рассматривать как графы) может содействовать или наоборот мешать их пониманию человеком.
Проанализировав более десятка статей, материалов конференций и диссертаций на эту тему, был выделен ряд таких признаков компоновки, которые оказывают наиболее значимое влияние на восприятие человеком UML диаграмм. Далее я буду называть эти признаки критериями визуального качества компоновки.
Перед тем как наконец перечислить эти критерии, стоит сделать пару оговорок. Во-первых, любые исследования, включая найденные в рамках данной темы, имеют свои ограничения. В некоторых были не самые больше выборки. В некоторых исследовали только скорость чтения диаграмм (графов), но не точность их чтения. Некоторые характеристики компоновки рассматривались в большинстве найденных работ, некоторые – изучались совсем редко. Иногда выводы делались на основе обзора весьма старых работ. Это не значит, что выводы таких исследований некорректны, но стоит помнить о том, что значимость отдельных критериев может быть несколько завышена или занижена. Во-вторых, некоторые из критериев противоречат друг другу. И для нас, как разработчиков системы, которая должна оценивать качество компоновки, и для тех, кто рисует диаграммы, существует необходимость принимать решение, можно ли пожертвовать ухудшением одной характеристики ради улучшения другой и при этом повысить качество компоновки. Я освящу эти противоречия и постараюсь дать совет, какому критерию отдать предпочтение.
Итак, критерии визуального качества компоновки UML диаграмм, или на что обратить внимание, если вы хотите, чтобы другие быстрее и точнее понимали ваши диаграммы. Пункты с 8 по 12 помечены звёздочкой, так как плохо применимы на практике, имеют слишком много ограничений, либо данные об их влиянии слабы и/или противоречивы.
1. Сокращение числа пересекающихся связей
Минимизация количества пересечений рёбер графов (связей диаграмм) является одним из самых часто упоминаемых и хорошо подтверждённых исследованиями правил компоновки. Пересечения затрудняют отслеживание линий, что негативно влияет и на точность и на скорость прочтения диаграмм. В худшем случае пересечение вообще может привести к неоднозначному чтению связи.
2. Сокращение числа изгибов связей
Изгиб - это такая точка, которая не лежит на прямой между начальной и конечной точками связи. Увеличение числа изгибов затрудняет отслеживание связей. Данные о силе этого эффекта по сравнению с пересечениями противоречивы, тем более, что пересечение может сократить число изгибов, что приводило к улучшению восприятия диаграмм в одном из рассмотренных исследований. На практике всё это означает, что лишние и неоправданные изгибы всё же следует убирать. А если число изгибов очень велико, то удаление этих изгибов за счёт введения существенно меньшего числа пересечений может положительно сказаться на восприятии диаграммы.
3. Недопущение перекрытий
Элементы диаграммы и связи между ними не должны перекрывать друг друга, так как это значительно повышает вероятность неправильного чтения диаграммы. Наиболее проблематичными являются ситуации перекрытия ребра (связи) узлом, а также ребра ребром. Например, если узел перекрывает линию связи, может показаться, что связь входит в этот узел и выходит из него, а не проходит мимо него. Связь, перекрывающая узел, как правило, оказывает меньшее негативное влияние на восприятие, более того, такая связь может сократить число изгибов. Однако, обычно от перекрытий лучше воздерживаться полностью.
4. Поддержание оптимальной длины связей (линий)
Длина связей влияет на скорость и точность отслеживания связей, а также участвует в визуальной группировке и разделении элементов диаграммы. Слишком длинные или слишком короткие связи оказывают негативное влияние. По данным некоторых исследований для улучшения восприятия можно сократить разброс в длине разных связей и стараться придерживаться универсальных длин на всей диаграмме.
5. Уменьшение размера диаграммы и минимизация соотношения сторон
Данные некоторых исследований показывают, что уменьшение размера диаграммы при сохранении иных важных характеристик неизменными положительно влияет на скорость чтения диаграммы. Положительное влияние оказывает не только сокращение площади диаграммы, но и сокращение её ширины, если оно не приводит к чрезмерному увеличению высоты, а также минимизация соотношения сторон, определяемого как отношение длины большей стороны к длине меньшей стороны наименьшего прямоугольника покрывающего диаграмму. Проще говоря, старайтесь рисовать диаграммы так, чтобы занимаемое ими пространство имело форму как можно ближе к квадрату. Однако, уменьшение размеров диаграммы не стоит осуществлять за счёт перекрытий, значительного увеличения числа пересечений и изгибов, иначе эффект будет отрицательным
6. Поддержание горизонтального направления меток
Все виды меток на диаграмме: названия сущностей и отношений, комментарии - стоит располагать горизонтально. Иное их положение значительно затрудняет и замедляет чтение диаграммы. Размещение некоторых меток вертикально может улучшить соотношение сторон диаграммы, но негативный эффект будет более значительным.
7. Поддержание оптимального положения меток
Названия связей, а также комментарии к связям, стоит располагать рядом со связью, желательно ближе к её середине. К сожалению, подтверждения положительного влияния данной характеристики на визуальное качество диаграммы ограничены. Однако данный критерий, как правило, не конфликтует с другими и очень прост в реализации. Поэтому, даже если эффект поддержания оптимального положения меток сравнительно мал, следование этому принципу скорее улучшит вашу диаграмму, при том не требуя от вас почти никаких затрат на перекомпоновку.
8*. Использование ортогональной сетки
Выстраивание рёбер (связей) и узлов (элементов) по ортогональной сетке в некоторых работах рассматривается в качестве способа повысить визуальное качество диаграммы. Однако, данные о влиянии ортогональности на восприятие противоречивы. Более того, выстраивание диаграммы по сетке вероятно вынудит увеличить число пересечений или изгибов, что может перевесить небольшой положительный эффект ускорения чтения диаграммы, даже если он есть. На практике, на мой взгляд, не стоит полностью отзываться от критерия ортогональности, но и тратить много времени, на построение диаграммы строго по ортогональной сетке не стоит. Если у вас есть возможность без добавления изгибов и пересечений, а также нарушения других вышеописанных критериев, выстроить часть элементов по сетке, то это может немного улучшить скорость чтения диаграммы.
9*. Поддержание симметрии
Максимизация глобальной и локальной симметрии диаграммы, как правило, приводят к улучшению её понимания. Однако, следовать такому правилу на практике сложно. Учитывая, что согласно некоторым исследованиям положительный эффект от увеличения симметрии мал и касается исключительно скорости, но не точности прочтения диаграмм, стоит, на мой взгляд, дать практическую рекомендацию, аналогичную рекомендации из предыдущего пункта. Если вы можете без нарушения более важных критериев поддерживать (с минимальными затратами времени) симметрию хотя бы для отдельных частей диаграммы, то это может немного улучшить скорость чтения.
10*. Максимизация угла между рёбрами (связями), инцидентными одной вершине (элементу)
Если из узла выходит несколько связей или несколько связей входит в один узел, то угол между этими связями стоит максимизировать. Эта характеристика оказывает тем большее положительное влияние, чем ниже физическое разрешение экрана. Но данные о силе влияния этого признака противоречивы. Отдавайте приоритет другим критериям компоновки, если следование правилу максимизации углов может помешать их улучшению.
11*. Поддержание горизонтального направления неиерархических элементов
В некоторых исследованиях были обнаружены различия в требуемой когнитивной нагрузке для прочтения горизонтально и вертикально выстроенных диаграмм. Как правило, люди легче воспринимают выстроенные горизонтально слева направо диаграммы. Однако, для структур с иерархией эффект может быть обратным, о чём сказано в следующем пункте. Кроме того, выстраивание горизонтальной диаграммы может негативно сказаться на соотношении сторон и увеличении числа изгибов, что, как было написано выше даёт негативный эффект. Таким образом на практике выстраивать неиерархические элементы горизонтально слева направо следует лишь до тех пор, пока это не противоречит более важным качествам компоновки.
12*. Поддержание вертикального направления иерархических элементов
При расположении элементов, имеющих иерархию, лучше придерживаться вертикального расположения. Стрелки иерархических отношений, например наследования на диаграмме классов, стоит направлять вверх. Но данные о силе такого эффекта ограничены, а для поддержания вертикального направления может потребоваться нарушить другие критерии, что в большинстве случаев приведёт к ухудшению качества компоновки. Практическая рекомендация аналогична той, что была дана в 11-ом пункте. Выстраивать иерархические элементы вертикально следует лишь до тех пор, пока это не противоречит более важным качествам компоновки.
Обобщая вышесказанное, можно прийти к нескольким выводам. Во-первых, некоторые из рекомендаций по улучшению качества компоновки применимы не для всех видов диаграмм или лишь при наличии у диаграмм ряда особенностей, например большого числа иерархических структур. Во-вторых, лучшее соответствие одним критериям, как правило, означает худшее соответствие другим, вплоть до полного противоречия. В-третьих, чем большему количеству критериев должна соответствовать диаграмма, тем больше вероятность возникновения трудноразрешимых противоречий.
Видя сложности, с которыми неизбежно столкнётся разработчик не имеющий достаточно опыта в создании UML диаграмм, и был задуман проект по созданию системы автоматической оценки качества компоновки. Кстати, в его рамках критерии 1, 2, 3, 5 и 6 были выбраны как наиболее значимые и при том удобные для реализации в рамках предполагаемой архитектуры. Тем не менее поиск новых исследований продолжается и возможно со временем некоторые из представленных выше данных можно будет уточнить.
В любом случае, та информация, что была изложена выше почти никогда в явном виде не упоминается в обучающих статьях по UML. Поэтому надеюсь, что этот оригинальный материал будет полезен, как тем, кто только недавно столкнулся с UML, так и тем, кто уже имеет опыт создания UML диаграмм.
Спасибо за уделённое мне время. Приветствую любую обратную связь, так как это моя первая публикация! Если у вас есть материалы по теме, например, собственные исследования, касающиеся качества компоновки графов и диаграмм, я был бы рад с ними ознакомиться.