Об авторе

Поиск по сайту:

GUI.ruПерепроектируйте это немедленно!

Проектировать взаимодействие это вам не орешки щелкать

Алексей Копылов
27.11.2008Алексей Копылов

Комментариев:

2

Чего не хватает Microsoft Blend: взгляд проектировщика взаимодействия

Данная статья была создана по мотивам презентации, сделанной для 19-го юзабилити-семинара сообщества RusCHI (Российское отделение организации ACM SIGCHI). Впервые статья была опубликована на сайте Microsoft Development Network

Введение

Технология XAML/Blend обещает дать нам, проектировщикам взаимодействия более высокий контроль над результатом их работы. Это здорово, потому что позволяет нам добиваться того, чтобы конечный продукт имел интерфейс,  максимально приближенный к задуманному. Однако данная технология меняет привычный для проектировщиков способ работы, и требует от них новых навыков.

У любого опытного проектировщика неизбежно возникнут вопросы: что действительно дает новый подход; стоят ли нововведения смены привычек; легко ли изменять пользовательский интерфейс; можно ли нескольким специалистам вести совместную работу над одним проектом; позволяет ли Microsoft Blend (с) разрабатывать действительно сложные интерфейсы?

Давайте внимательно рассмотрим этот вопрос.

Классический подход

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

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

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

«У каждого участника разработки имеется собственная зона ответственности»

Обмен информацией обеспечивается с помощью результатов труда каждого специалиста и происходит следующим образом:

  • Проектировщики создают прототип в удобной для них форме (например, в Microsoft Visio);
  • На основе этих прототипов дизайнеры создают графические файлы с оформлением, которые затем передают разработчикам.
  • Разработчики получают прототипы и файлы с оформлением и затем реализуют пользовательский интерфейс с помощью подходящей среды программирования.

Естественно, реальная схема взаимодействия сложнее, но основные потоки взаимодействия именно таковы (см. рисунок 1).

Данный подход отлично работает для обычных веб-приложений, в силу ограниченности выразительных средств. Это работает неплохо и для классических настольных (GUI) приложений, где давно устоялись свои модели взаимодействия, построенные на основе фиксированного набора элементов управления (полей ввода, раскрывающихся списков, радиокнопок и так далее).

Однако данный подход плохо работает для современных Ajax приложений и особенно для RIA («rich internet applications», дословно «интерактивно обогащенные интернет приложения»). Для того чтобы передать сложное поведение таких приложений проектировщику необходимо написать массу документации, воспринимать которую готов далеко не всякий разработчик. Кроме того, объемные тексты сложно и дорого сопровождать. Если проектировщик упустит некий нюанс поведения программы, то разработчик вероятнее всего реализует оптимальным с точки зрения реализации образом, но не обязательно оптимальным с точки зрения пользователя. В данном случае верна простая истина – лучше один раз увидеть, чем 10 раз услышать.

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

Вот бы сделать так, чтобы проектировщики сами реализовывали взаимодействие? – эта мысль приходила и приходит многим специалистам в области ИТ. Как бы с программистов снять часть ответственности за создание пользовательского интерфейса?

Новая парадигма

В настоящий момент происходит стремительное слияние настольных (GUI) и веб-приложений. Пользователи успели привыкнуть к уникальным с точки зрения оформления и поведения интерфейсам, которые приняты в мире веб-сайтов и веб-приложений. «Сделайте приложение с уникальным оформлением» стало привычным требованием со стороны маркетологов.

В связи с появлением идеологии Ajax появилась возможность делать гибкие и, самое главное, быстрые веб-приложения. Приложения построенные на базе платформ MS .NET или Adobe Flex с точки зрения пользователя ничем не отличаются от «родных». Совершенно естественным образом  возникло решение  позволяющее отделить внешний вид пользовательского интерфейса, сколь бы сложным оно не было, от бизнес-логики программы. Решение основано на специальных языках описания интерфейса – XAML от Microsoft,  MXML от Adobe, ZUL от Mozilla и так далее. В этих текстовых языках описывается внешний вид элементов (в векторном формате) так, что интерфейс можно создавать в любом редакторе.

В языке XAML можно задавать не только расположение элементов на экранной форме (в векторном виде), но и все трансформации, которые с ними происходят. Например, проектировщик может задать внешний вид кнопки. Причем можно задать не только вид отжатой и нажатой кнопки, но и то, каким образом происходит сама трансформация (промежуточные фазы). То есть теперь можно в полной мере контролировать поведение отдельных элементов. Другой хороший пример – в Mac OS X имеется форма входа в операционную систему. Если пользователь ввел неправильный пароль, то форма ввода трясется характерным образом. В данном случае «трясучка» является отличным выразительным средством – пользователь обязательно заметит реакцию системы даже когда смотрит на клавиатуру, а не на экран. С помощью XAML проектировщик может легко воссоздать подобное поведение без помощи разработчика.

Для редактирования XAML лучше всего применять специальный пакет, Microsoft Expression Blend или просто Blend. Редактирование внутри него происходит в наглядной, визуальной форме, то есть проектировщик может создавать элементы, перемещать их по экрану и описывать поведение. Вроде бы все отлично! Проектировщики проектируют интерфейс, дизайнеры его доводят до товарного вида, а разработчики реализуют. Но давайте более пристально взглянем на Blend.

Взаимодействие между членами команды теперь происходит следующим образом:

  • Проектировщик создает прототип. Прототип можно создать в любой привычной для него среде, как и при классическом подходе, но удобнее сделать это прямо в среде Blend. Все основные средства для создания прототипа здесь имеются – средства рисования, стандартные элементы управления (при создании приложений под платформу .NET и под платформу Silverlight последней версии), возможность создания паттернов.
  • Дизайнер получает код XAML, и прямо в среде Blend или ином XAML редакторе (например, в Microsoft Expression Design) создает совершенно новый файл XAML, содержащий объекты интерфейса в конечном оформлении.
  • Проектировщик снова получает код XAML от дизайнера и переделывает его так, чтобы его было удобно поддерживать далее в процессе разработки продукта. Например, он назначает экранным объектам подходящие имена и группирует их определенным образом. Но самое главное – проектировщик создает сценарии трансформаций совершаемых с объектами, то есть определяет, как объекты будут реагировать на действия пользователя.
  • Разработчик получает от проектировщика код XAML и «одушевляет» его, то есть привязывает бизнес-логику и связывает все трансформации (кусочки взаимодействия).
  • В случае, если разработка идет итеративно (что, как правило, и бывает) то разработчик регулярно отдает код XAML обратно проектировщику, чтобы тот изменил внешний вид и поведение того или иного объекта.

На рисунке 2 изображена новая схема взаимодействия.

Все достаточно красиво с первого взгляда, но со второго начинаются вопросы:

  • Должен ли сценарии трансформаций (фактически анимацию) создавать именно проектировщик, а не дизайнер? Для того, чтобы перемещения объектов были естественными для человеческого восприятия необходимо следовать определенным принципам, например, двенадцати принципам Уолта Диснея(http://www.multikov.net/master.php?article=3). Однако, если дать анимацию на откуп дизайнерам, то имеется шанс, что не все трансформации будут реализованы должным образом – только проектировщик знает в деталях поведение будущего продукта.
  • Пространство имен объектов, которое удобно для проектировщика, может оказаться неудобным для разработчика, и наоборот. То есть проектировщик может получить обратно от разработчика такой XAML, в котором ему заново придется разбираться.
  • Как отслеживать изменения, которые происходят с XAML? Не все изменения наглядны, следовательно, у всех участников будет уходить много времени на документирование этих изменений во внешней коммуникационной среде (например, по e-mail).
  • Каким образом осуществлять глубинные изменения экранных объектов (или рефакторинг, если говорить по-программистки)? При итеративной разработке постоянно возникает необходимость в изменении внешнего вида и поведения экранных объектов. Все объекты внутри XAML выстраиваются в жесткую иерархию (вследствие XML синтаксиса), и любой перенос объекта приводит к необходимости контролировать вручную результат переноса. Проще говоря, Blend не содержит удобных средств для оперативных изменений объектов.

Подобных вопросов возникает большое количество.

Новые требования к проектировщикам

Часть проблем возникает от того, что изменились зоны ответственности специалистов (см. рисунок выше), и так как теперь специалисты действуют в единой XAML-среде, то средства редактирования обязаны поддерживать это разделение.

Но сначала разберемся с новыми требованиями к проектировщикам взаимодействия.

«Теперь специалисты действуют в единой XAML-среде»

Итак, проектировщику необходимо:

  • В совершенстве владеть XAML и Blend. Не все возможности XAML реализованы в Blend, так что язык знать необходимо. Необходимо также понимать каким образом собирается конечный продукт.
  • Понимать и применять основные принципы анимации. Это знание пригодится,  даже если все трансформации будут делать дизайнеры.
  • Уметь организовывать взаимодействие с разработчиками и дизайнерами – так как вся работа происходит в единой среде, то все члены команды оказывается в одной лодке, которую очень легко раскачать. Можно легко свалить вину за неудачу на другого члена команды, следовательно, пока Blend не поддерживает взаимодействие между членами команды, требуются внешние способы контроля вносимых изменений и регламенты взаимодействия.
    Как видим, переобучения проектировщиков не избежать.

Нереализованные требования в Blend

Также сам Blend должен поддерживать новый подход в должной мере, а именно:

  • Способствовать коллективной работе (workflow) и вести контроль внутренних изменений. Об этом сказано уже достаточно.
  • Позволять гибко управлять анимацией. Сейчас для того, чтобы сделать элементарные трансформации, приходится в калькуляторе или электронной таблице создавать расчеты промежуточных значений свойств объектов (например, координаты или прозрачность). Идеально, если Blend будет содержать некий  специальный язык, чтобы свойства считались по формулам, заданным проектировщиками.
  • Позволять управлять большим количеством сценариев трансформации. Даже в небольшом проекте получается большое количество сценариев, много времени уходит на нахождение нужного. Для ускорения данного процесса нужно ввести группировку сценариев и поиск по ним. Также необходима возможность построения зависимости сценариев друг от друга. Сейчас все сценарии расположены в плоском списке, и невозможно определить, как они влияют друг на друга – какой сценарий трансформаций является первичным (выполняется над объектами в начальном состоянии), а какой выполняется над объектами в промежуточных состояниях. Вообще, иногда голова идет кругом от того, что сложно предсказать, что будет при выполнении того или иного сценария над объектами в том или ином состоянии. Имеет смысл добавить сущность типа матрицы состояний объектов с привязкой сценариев к каждому состоянию.
  • Поддерживать рефакторинг объектов XAML. Одно из критических требований к прототипам и к системам редактирования пользовательского интерфейса это поддержка итеративных изменений. В нынешнем состоянии Blend не позволяет оперативно вносить изменения, приходится вручную контролировать корректность каждого изменения, то есть производить рефакторинг.
  • Иметь возможность наглядной отладки любого сценария. Имеются случаи, когда внутри Blend невозможно просмотреть готовые сценарии, то есть отсутствуют хорошие средства контроля над результатом работы. Происходит это от того, что для того, чтобы можно было увидеть результат трансформации объекты нужно «загнать» в нужное состояние, но сделать это сейчас могут только разработчики.

Выводы

Blend это не средство прототипирования в классическом виде. Нет смысла проектировать интерфейс внутри Blend для иных платформ, нежели для Microsoft Silverlight (с) и .NET (с).  Однако для данных платформ проектировщики взаимодействия получили возможность максимально контролировать конечный результат. К сожалению, существующая версия Blend не поддерживает в должной мере изменившуюся парадигму создания пользовательского интерфейса. Этот недостаток мало сказывается на небольших проектах с числом участников до 3-4, но на средних и больших проектах разработка интерфейса может потребовать слишком больших усилий.

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

Комментарии (2)

RSS feed for comments on this post | TrackBack URI

1

[…] Возможно, вы уже читали, опубликованную на gui.ru, статью Алексея Копылова «Чего не хватает Microsoft Blend: взгляд проектировщика взаимодействия» в которой описываются как классический способ прототипирования, так и особенности работы проектировщика в среде Microsoft Blend. Как одно из нереализованных требований в Blend Алексей отметил отсутствие возможности коллективной работы (workflow) и ведение контроля внутренних изменений. RapidRabb – онлайновый инструмент прототипирования позволяет коллективно создавать интерактивные прототипы. Способен ли онлайновый инструмент вытеснить привычные настольные приложения? Время покажет.   […]

Антон Фролов23.01.2009 11:34
2

Большое спасибо. Очень полезная информация

Оставить комментарий