Mylyn 2.0: Часть 2. Автоматизация управления контекстом

Преодоление информационной перегрузки и облегчение одновременной работы над несколькими задачами

Среда Mylyn (ранее Mylar), существующая в настоящее время в версии 2.0, повышает продуктивность работы программиста благодаря прозрачной интеграцией задач в Eclipse и автоматическим управлением контекстом задач, над которыми ведется работа. Глава проекта Mylyn Мик Керстен обновил свое руководство из двух частей по использованию Mylyn. Первая часть знакомит с возможностями Mylyn по управлению задачами и интеграцией с такими репозитариями, как Bugzilla. В этой второй части объясняется, как возможности Mylyn по управлению контекстом облегчают работу над несколькими задачами и снижают информационную перегрузку при работе над большими приложениями в Eclipse.

Керстен Мик, руководитель проекта, Mylar Project

Страстью Мика Керстена (Mik Kersten) является создание инструментальных средств, которые способствуют концентрации на выполнении задач и повышают производительность. Будучи ученым-исследователем в Xerox PARC, он создал первое задачно-ориентированное инструментальное средство программирования и продолжает принимать участие в качестве разработчика в проекте eclipse.org/aspectj. Получил степень доктора философии в University of British Columbia. Является создателем задачно-ориентированной технологии взаимодействия и руководителем проекта eclipse.org/mylar.



30.07.2008

В первой половине этой статьи я объяснил, как возможности Mylyn по управлению задачами позволяют легко сфокусироваться на задачах, относящихся к определенному дню или неделе. После интеграции задач в повседневную работу с Eclipse большинство пользователей замечает, что многие повторяющиеся действия связаны в основном с контекстом задач, над которыми ведется работа. Сегодня многозадачность стала настолько неотъемлемой частью интеллектуальной работы, что пользователю постоянно приходится создавать и пересоздавать контекст текущей задачи. Контекст задачи состоит из файлов, результатов поиска и другой связанной информации, на которую приходится ссылаться при работе над задачей. Например, во время программирования хочется видеть только элементы Java™, относящиеся к исправляемому дефекту. После того как дефект был исправлен, может возникнуть желание подтвердить эти изменения независимо от других задач, над которыми велась работа сегодня. Или можно попытаться сэкономить время, запустив только те тесты, которые относятся к тому, что изменилось во время работы над конкретной задачей.

Откуда Mylyn берет свой "интеллект"?

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

Точно так же, как Mylyn помогает сфокусироваться на задачах, относящихся к рабочей неделе, он может сфокусировать рабочее пространство (workspace) Eclipse на артефактах, относящихся к текущей задаче. Имея установленный Task-Focused (ориентированный на задачи) пользовательский интерфейс Mylyn, достаточно указать активную задачу, и все файлы, над которыми ведется работа, автоматически добавляются в контекст этой задачи. Контекст управляется так, чтобы отражать изменение интереса к различным артефактам по ходу работы, даже для очень продолжительных задач. При переключении между задачами контекст сохраняется, что позволяет легко переключаться между разными задачами одним щелчком мыши и легко делиться относящимися к конкретной задаче знаниями с другими пользователями.

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

Пронумерованные области на рисунке 1 показывают некоторые возможности Mylyn по управлению контекстом в действии:

  1. Нажатие на кнопку Focus on Active Task (сфокусироваться на активной задаче) заставляет Package Explorer (обозреватель пакетов) в Eclipse показывать только элементы из контекста активной задачи.
  2. Переключение активных задач выполняется через вид Task List (список задач).
  3. После переключения виды и редакторы Eclipse фокусируются на контексте только что активированной задачи.
  4. Наборы изменений (change sets) автоматически управляются в соответствии с изменениями в контексте задачи.
  5. Свертывание элементов и контекст помогают сфокусировать виды на относящихся к задаче элементах.
Рисунок 1. Фокусирование Eclipse на контексте задачи
Рисунок 1. Фокусирование Eclipse на контексте задачи

Полный рисунок можно увидеть здесь.

Программирование, сфокусированное на задачах

Предположим, что вы заканчиваете изменения для новой функциональности, чтобы успеть к предстоящему моменту "заморозки" кода. По ходу работы накапливается важное знание обо всех классах и методах, которые были изменены, и об API, которые использовались при создании функциональности. Так как используется Mylyn, то это знание автоматически сохраняется в контексте задачи. И вот, когда вы уже близки к завершению задачи, поступает критический дефект, требующий немедленного внимания.

Одним нажатием вы активируете отчет о дефекте и начинаете исследовать проблему. По мере исследования стеков методов, прикрепленных к дефекту, с помощью высокофункционального редактора Mylyn, контекст новой задачи заполняется результатами вашего исследования и диагностированными ошибками. При нажатии на элемент Mylyn Automated Context Test Suite (автоматизированный набор тестов для контекста), который запускает unit-тесты, структурно относящиеся к созданному контексту, вы обнаруживаете, что ошибка находится в коде коллеги, а не в вашем коде. Благодаря привязке историй изменений к задачам в Mylyn вы сразу замечаете задачу своего коллеги, относящуюся к проблемному изменению. Следующим нажатием вы перенаправляете дефект своему коллеге и передаете ему контекст задачи, получившийся в результате вашего исследования. Все это делается не покидая Eclipse, так что нажатие на кнопку Back (назад) в виде Task List незамедлительно восстанавливает контекст предыдущей задачи. Коллега тем временем получает отчет об ошибке в том же состоянии, в каком вы его оставили. Это только один сценарий того, как программисты, использующие Task-Focused UI, могут с легкостью работать и сотрудничать между собой.

Поддерживаемые инструменты

Подобно тому, как Mylyn использует объекты-коннекторы для интеграции с репозитариями задач, он также использует объекты-переходники (bridge) для интеграции модели контекста со специализированными инструментами. Базовый набор объектов-переходников для Eclipse SDK поставляется с Mylyn; он включает поддержку Java кода, JUnit, среды разработки плагинов (Plug-in Development Environment - PDE), Ant и простых файлов. Для полной интеграции Mylyn требуются объекты-переходники для всех используемых инструментов и языков, например Ruby и JSP. Если специальный объект-переходник для языка программирования или используемых в работе файлов другого типа отсутствует, Mylyn все еще сможет обеспечить фокусирование на уровне файла, но не сможет отслеживать действия со структурой внутри файлов, например, редактирование конкретных описаний. Это значит, что можно будет только выделить интересующие файлы в виде Package Explorer, но нельзя выполнить четко определенную фильтрацию описаний, например, в виде Outline (структура), автоматическое свертывание описаний в редакторе или предоставить дополнительные возможности как Context Test Suite для задачи.

Для поддержки автоматического управления наборами изменений (change set) Mylyn также требуются расширения для интеграции с используемой системой контроля версий. CVS поддерживается по умолчанию, а поддержка других систем контроля версий, например, Subversion, должна быть установлена отдельно. В разделе Ресурсы приведен список расширений Mylyn, пользуясь которым, вы можете скачать дополнительные объекты-переходники для Mylyn и средства интеграции с системами контроля версий.

В следующих разделах показано, как можно использовать возможности Mylyn по управлению контекстом для работы в задачно-ориентированном стиле. Хотя примеры базируются на Java-программировании, концепции и большинство функций применимы к любым артефактам на основе файлов, с которыми предстоит работать. (Более подробная информация приведена в разделе Поддерживаемые инструменты.)

Модель степени полезности

Управление контекстом задачи в Mylyn основывается на идее, что взаимодействие пользователя с системой может быть преобразовано в модель степени полезности или интереса (degree-of-interest model), где каждый элемент в системе имеет вес согласно его отношению к текущей задаче. Это распределение весов по степени полезности и формирует контекст из всех элементов, относящихся к задаче. Затем контекст задачи можно использовать, чтобы сфокусировать UI путем подсветки или выделения наиболее важных элементов, фильтрации незначительных элементов, или чтобы выполнять действия только над полезными (интересующими) элементами, например, подтвердить только изменения, относящиеся к задаче. Контекст задачи создается определенным образом во время работы: после активации задачи каждый выбранный или отредактированный элемент, например, файл или Java-метод, становится частью контекста задачи. Чем больше вы взаимодействуете с элементом, тем выше становится степень его полезности для задачи. Если степень полезности элемента становится очень высокой, то он превращается в ориентир (landmark) - неявно созданную закладку. Одновременно при каждом взаимодействии накопленная степень полезности всех элементов, содержащихся в задаче, постепенно уменьшается, так что набор интересующих элементов всегда соответствует вашим текущим интересам, не расширяясь бесконечно.

Ключевое свойство, которое позволяет интуитивно работать с моделью контекста задачи, - это то, что она очевидна и предсказуема: все то, что вы ожидаете увидеть, уже находится в ней, и когда вы начинаете работать с элементом, он сразу попадает в контекст. Можно также напрямую манипулировать степенью интересности элементов, заставляя Mylyn пометить их как неинтересующие, или явно отмечая их как ориентиры. Другими словами, все происходит так же, как и в UI с закладками, системами рейтингов и тегированием, к которым все привыкли. Однако по мере того, как вы будете привыкать работать с Mylyn, вы, скорее всего, будете все меньше полагаться на такие ручные алгоритмы для управления контекстом задачи.

Выделение интересующих элементов и фильтрация

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

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

Одного только выделения недостаточно для снижения информационной перегрузки в масштабных рабочих пространствах, содержащих десятки или сотни тысяч файлов. Крайне эффективным инструментом для просмотра больших иерархий стали структурированные виды, такие как Project Explorer ("проводник" проекта) в Eclipse. Проблема перегрузки не в таких видах, а в несоответствии между огромным размером информационной системы, над которой работает программист, и относительно небольшим объемом информации, относящимся к текущей задаче программиста. Одно из наиболее заметных проявлений этого несоответствия - потеря времени на повторяющееся прокручивание информации и сворачивание/разворачивание больших древовидных видов для поиска информации, необходимой для выполнения работы.

Совет: Отмена фильтрации для дочерних элементов

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

Задача Mylyn - устранить это ненужное прокручивание и излишнюю работу мышью. Для этого Task-Focused UI (пользовательский интерфейс, ориентированный на задачи) предлагает функции фильтрации на основе степени интересности и управления структурированными видами. Эти функции, включаемые кнопкой Focus on Active Task (сфокусироваться на активной задаче), отфильтровывают все неинтересующие элементы, следовательно, фокусируя соответствующий вид на контексте активной задачи. Например, в режиме фокусирования вид Package Explorer показывает только то, над чем ведется работа: все файлы исходного кода, библиотеки и методы, которые являются частью задачи. В дополнение к фильтрации, когда применяется фокусирование, Mylyn автоматически поддерживает развернутое состояние древовидных видов, так что не требуется вручную сворачивать и разворачивать узлы дерева, чтобы найти интересующие элементы.

Как только вы начнете использовать режим фокусирования для видов, то заметите, как модель степени полезности меняется по ходу работы. Чем чаще выбирается элемент, тем более интересующим он становится, до тех пор, пока не превратится в ориентир, выделенный жирным шрифтом. Элементы с низкой степенью полезности, такие как результаты поиска, выбиравшиеся только один раз, теряют уровень интереса и исчезают из фильтруемых видов - в результате виды не переполняются бесполезными элементами. Поскольку управление контекстом задачи ведется активно и предсказуемо, он содержит только интересующие элементы даже для долгосрочных задач. Хотя модель контекста задачи в Mylyn спроектирована так, чтобы всегда отражать то, что относится к задаче в текущий момент, степень интересности элементов можно также повышать или понижать вручную, например, через команды контекстного меню элемента или используя сочетание клавиш Ctrl+Alt+Shift+стрелка вверх/вниз.


Рабочая среда, ориентированная на задачи

Прежде чем перейти к углубленной интеграции, которую предлагает Mylyn для поддержки разработки на Java, остановимся на ключевых нововведениях, которые Task-Focused UI вносит в рабочую среду (workspace) Eclipse при работе с обычными файлами. На рисунке 2 показаны ключевые концепции:

  • Слева вид Project Explorer, сфокусированный на активной задаче, показывает только интересующие файлы и выделяет ориентиры. В данном случае нажатием Alt+левая кнопка мыши можно временно показать все файлы в каталоге presentations, чтобы можно было выделить другие интересующие файлы.
  • Справа вид Task List показывает активную задачу. Когда задача деактивируется, то фокусирование в виде Package Explorer отключается и все открытые файлы закрываются. Если активируется новая задача, то фокусирование включается снова, и все редакторы, которые были открыты при работе над этой задачей, восстанавливаются в прежнем виде.
Рисунок 2. Рабочая среда, ориентированная на задачи
Рисунок 2. Рабочая среда, ориентированная на задачи

В оставшейся части статьи на примере разработки на Java подробно рассказывается о том, как работать в стиле, ориентированном на задачи. В то же время ключевыми и наиболее заметными аспектами в использовании Mylyn являются принципы активации задачи, фокусирования вида и управления редакторами. Достаточно освоить концепцию активации задачи, чтобы начать работать в стиле, ориентированном на задачи. Это небольшое, но значимое изменение в стиле работы сразу обеспечит преимущество: весь ценный контекст, который строится во время работы, больше не теряется при переключении между задачами.

Совет: Конфигурация Task-Focused UI

Хотя большинство функций Task-Focused UI включено по умолчанию, все их можно включать и отключать через соответствующую кнопку в виде или редакторе или через настройки. Подробную информацию можно найти в Mylyn FAQ в разделе Ресурсы.

Использование Mylyn при разработке на Java

Разработчики, использующие Mylyn для Java-программирования, обычно держат вид Package Explorer в фокусированном режиме. Так что по умолчанию кнопка Focus on Active Task автоматически включается при активации задачи и выключается при деактивации задачи. Когда она включена, то показываются только Java-элементы, входящие в контекст. Как только вы выбираете Java-класс путем просмотра других классов или через обычно используемый механизм Open Type (открыть тип) (Ctrl+Shift+T), этот тип становится частью контекста и показывается в отфильтрованном виде Package Explorer. Каждый выбранный и отредактированный метод добавляется в контекст задачи и поэтому появляется в виде Package Explorer. На рисунке 3 изображен вид Package Explorer в режиме фокусирования. Обратите внимание на выделение Java-элементов в зависимости от степени интересности и активную фильтрацию в видах Package Explorer и Debug (отладка).

Рисунок 3. Фокусирование видов с Java-элементами на контексте задачи
Рисунок 3. Фокусирование видов с Java-элементами на контексте задачи

Возможности Eclipse по открытию элементов хорошо работают вместе с видами для навигации, находящимися в фокусированном режиме (Ctrl+Shift+T используется для открытия типа, Ctrl+Shift+R для открытия ресурса, Ctrl+O для открытия локальной схемы, Ctrl+-T для открытия локальной иерархии). Чтобы упростить выбор типов в диалоге Open Type, интересующие типы автоматически помещаются в верхнюю часть списка. Когда происходит переключение между задачами, список содержит интересующие типы для новой задачи. Когда активной задачи нет, список превращается в глобальный список недавно использовавшихся типов Eclipse.

Если вы используете перспективу Java Browsing, с помощью кнопки на панели инструментов окна вы можете переключать все три вида Java-элементов в сфокусированный режим одним щелчком мыши, не фокусируя каждый вид отдельно.

Совет: "Быстрые" виды

Если используется перспектива, в которой нет доступного вида для навигации, например, Debug, или если область редактора развернута на все окно, можно все равно осуществлять навигацию по контексту через меню Navigate (навигация) > Quick Context View (быстрый контекстный вид) или нажав на клавиатуре Ctrl+Shift+Alt+правая стрелка. Так же как и другие "быстрые" виды, например, Quick Outline (быстрая схема) (Ctrl+O), этот всплывающий вид имеет то дополнительное преимущество, что в нем можно вводить текст, чтобы можно попасть в интересующий файл или элемент.

Автоматическое свертывание и помощь в ранжировании содержимого

Реализованный в Eclipse современный Java-редактор позволяет выполнять большую часть навигации по структуре прямо внутри редактора. Mylyn способствует этому, предоставляя автоматическое сворачивание и поддержку в ранжировании содержимого, чтобы помочь Java-редактору сфокусироваться на том, что относится к текущей задаче. Если включить в Mylyn кнопку Automatically Fold Uninteresting Elements (автоматически сворачивать неинтересующие элементы) на панели инструментов окна, то в редакторе будут развернуты только интересующие элементы. Это повышает плотность информации в редакторе и позволяет легче перемещаться по описаниям в больших файлах, не открывая вид Outline. Как только вы выбираете элемент, он становится частью контекста и разворачивается. Заметим, что на рисунке 4 большинство элементов свернуты, так как они еще не выбирались и не редактировались; однако активный элемент развернут, и в левом поле редактора указано, что этот элемент считается ориентиром:

Рисунок 4. Автоматическое свертывание и помощь в ранжировании содержимого
Рисунок 4. Автоматическое свертывание и помощь в ранжировании содержимого

Подобно тому, как выполняется фильтрация видов, Mylyn также упорядочивает Java-cодержимое проекта согласно его уровню интереса. Все объекты под разделителем, отвечающим за степень интереса, сортируются с использованием стандартных правил ранжирования Java Development Tools (инструментов для Java-программирования). Это значит, что часто можно выбрать интересующее предложение всего несколькими нажатиями клавиши "стрелка вниз". Если начать вводить текст до выбора интересующего приложения, то список возвращается к обычному режиму сортировки. Также обратите внимание, что на рисунке 4 интересующие методы, такие как getTask(), уже развернуты в редакторе. Согласованность различных механизмов, показывающих степень интересности элемента, делает Focused UI предсказуемым и удобным в использовании.

Автоматическое управление редактором и перспективами

Mylyn также использует контекст задачи для активного управления открытыми редакторами, относящимися к задаче. Когда элементы в файле перестают вас интересовать, этот редактор автоматически закрывается. Когда задача деактивируется, все ее редакторы закрываются, но открываются снова при ее активации. Снижение степени интересности элемента приводит к закрытию его редактора, и наоборот - закрытие файла снижает уровень его интересности. Требуется некоторое время, чтобы привыкнуть к этому, но в результате вам больше не требуется управлять состоянием открытых редакторов вручную, а число открытых редакторов не растет. Тот факт, что все открытые редакторы принадлежат интересующим элементам, также позволяет использовать возможности Eclipse по навигации между редакторами для перемещения между интересующими файлами. Например, с помощью сочетаний клавиш Ctrl+E и Ctrl+F6 можно удобно переключаться между редакторами, если отсутствует специальный вид для навигации, такой как Package Explorer.

Подобным же способом Mylyn может управлять и перспективами Eclipse, восстанавливая перспективу, в которой вы в последний раз работали над задачей. Эта возможность включается через меню: Window (окно) > Preferences (настройки) > Mylyn > Context (контекст)). Это может оказаться полезным, когда различные задачи относятся к разным видам Eclipse, например, некоторые задачи относятся к Java-разработке, а другие к PHP. Особенно хорошо это работает при использовании перспективы Planning (планирование) Mylyn. Если переключиться в перспективу Planning, когда нет активных задач, то вас будут автоматически переключать в эту перспективу, когда вы деактивируете очередную задачу. Использование перспективы Planning позволяет лучше определить следующую задачу, над которой предстоит работать, так как она максимально увеличивает область окна, доступную для редактора задач и вида Task List.

Работа с Ant, PDE и другими исходными файлами

Возможности Mylyn по фокусированию могут быть применены к любому виду Eclipse SDK, показывающему контекст: Package Explorer ("проводник" пакетов), Navigator (навигатор), Project Explorer ("проводник" проектов), Outline (структура), Problems (проблемы), Tasks (задачи), Debug (отладка), Packages (пакеты), Types (типы) и Members (члены класса). Режим фокусирования для любого древовидного вида, такого как Project Explorer, добавляет выделение по степени интересности, фильтрацию и управление развертыванием. Виды со списками, такие как Problems, также сортируются по степени интереса при фокусировке на них. Благодаря такой общности подхода Mylyn можно использовать для не-Java проектов, таких как разработка на PHP, даже если ваш инструментарий не поддерживается специальным объектом-переходником (см. раздел Поддерживаемые инструменты). В этом разделе приведен краткий обзор использования Mylyn для программирования с другими языками и инструментами, Дополнительную информацию можно найти по ссылке Mylyn Extensions в разделе Ресурсы.

В качестве примера рассмотрим разработку приложения с использованием Ant и PDE. В этом сценарии рабочее пространство Eclipse может выглядеть как на рисунке 5 - с несколькими открытыми видами и контекстом:

Рисунок 5. Фокусирование обобщенного вида IDE на контексте задачи
Рисунок 5. Фокусирование обобщенного вида IDE на контексте задачи

Совет: Очистка напоминаний "to-do"

В отличие от вида Task List в Mylyn, вид Tasks в Eclipse SDK показывает заметки, такие как теги "to-do", напоминающие о локальной проблеме с ресурсом и похожие на предупреждения компилятора. Эти заметки или напоминания находятся на более низком уровне детализации, чем задачи Mylyn, так как соответствуют строкам кода, и одна задача Mylyn может включать несколько напоминаний. Поскольку вид Tasks быстро оказывается перегруженным, то использование режима фокусирования - удобный способ напомнить об очистке "to-do" напоминаний перед загрузкой кода в систему контроля версий.

Отметим, что в виде Project Explorer на рисунке 5 показаны только файлы из контекста задачи - в данном случае, несколько изображений и XML-файлов. Открытый файл - это файл build.xml, состоящий из десятков объявлений элементов Ant. В виде Outline представлены только объявления, с которыми ведется работа, вместо десятков не относящихся к делу. Вид Problems также фокусируется на активной задаче, так что вместо того, чтобы оказаться перегруженным сотнями не относящихся к делу предупреждений, он показывает только интересующие нас, например, ошибки, предупреждения или другие отметки для элементов в контексте задачи. Наконец, вид Tasks в Eclipse также сфокусирован, так что вместо отображения сотен "to-do"-напоминаний, которые нас сейчас совсем не интересуют, мы видим только относящиеся к контексту задачи.

Context Test Suite (набор тестов для контекста)

Программирование в задачно-ориентированном стиле облегчает частый запуск unit-тестов. Обычная практика в unit-тестировании - это создание нового модуля для запуска одного или нескольких тестов, над которыми вы в данный момент работаете, что может быть утомительно. Альтернативы этому - запускать все тесты проекта, но в этом случае можно пропустить какой-нибудь связанный с задачей тест, или запускать полный набор тестов, что может занять слишком много времени. Чтобы справиться с этой проблемой, Mylyn автоматически поддерживает набор unit-тестов для элементов из контекста задачи, называемый Context Test Suite (см. рисунок 6), и позволяет неоднократно запускать его во время работы над задачей с помощью клавиши F11:

Рисунок 6. Наборы тестов для контекста
Рисунок 6. Наборы тестов для контекста

Чтобы включить эту функциональность, необходимо создать Context Test Suite для Plug-in-тестов JUnit или обычных тестов JUnit. Context Test Suite обновляется автоматически, включая в себя все тесты из активного контекста.


Совместная работа с контекстом

Инструменты для совместной работы нацелены на обмен информацией, и контекст задачи помогает фокусировать эту информацию для снижения перегрузки и беспорядка. В процессе повседневной работы разработчики постоянно обмениваются информацией с помощью сообщений электронной почты, ICQ-сообщений и файлов. Хотя Mylyn не устраняет потребность в использовании систем обмена сообщениями, таких как ICQ или электронная почта, он ее снижает и упрощает многие совместные действия, привязывая их к задачам. Так как задачи определяют четкий и понятный фрагмент работы, а контекст задачи определяет информацию, относящуюся к этой работе, то способность обеспечивать совместный доступ к контексту одним щелчком мыши может снизить затраты на организацию коммуникаций.

В первой части демонстрировалось, как возможности Mylyn по управлению задачами могут интегрироваться с Web-репозитариями, такими как Bugzilla, обеспечивая такой же уровень интеграции и скорости отклика в совместной работе, к которому привыкли пользователи электронной почты. В этом разделе объясняется, как автоматическая поддержка отслеживания наборов изменений и активности задач в Mylyn в сочетании с поддержкой обмена контекстом способствует командной работе и накоплению опыта. Как обычно, вы можете выбирать необходимые вам функции в зависимости от потребностей и степени интеграции Mylyn с репозитариями задач и исходного кода.

Автоматические наборы изменений

Совет: Режимы наборов изменений

В Eclipse есть два режима для наборов изменений в CVS: новый режим версии 3.2, основанный на модели, и стандартный режим. Хотя эти режимы практически не отличаются друг от друга, режим на основе модели является предпочтительным, так как он показывает входящие и исходящие изменения. Подробную информацию о переключении между режимами смотрите в Mylyn FAQ в разделе Ресурсы.

Набор изменений (change set) - это встроенная в Eclipse функциональность для группирования ресурсов. Она используется в виде Synchronize (синхронизация) для подтверждения изменений, обновления или создания патчей. Если проект, с которым вы работаете, не является статичным, ручное управление наборами изменений скорее приносит проблемы, чем пользу. Mylyn помогает работать с репозитариями исходного кода, автоматически управляя наборами изменений. Как только задача активируется, для нее добавляется набор изменений, отображаемый в виде Synchronize (см. рисунок 7). Изменения, которые вы делаете во время работы над задачей, добавляются в набор изменений. С помощью контекстного меню вида Change Set можно переопределять изменения, подтверждать их и создавать патчи. Входящие изменения, сделанные членами команды, показываются сгруппированными по задачам, и щелчком правой кнопки мыши по входящему набору изменений можно открыть соответствующую задачу. Если вы сделали изменения и деактивировали задачу, набор изменений сохраняется, что позволяет параллельно работать с несколькими исходящими изменениями. Mylyn обеспечивает однозначную связь между контекстом и набором изменений, так что если вручную добавить файл в набор изменений через контекстное меню вида Synchronize, соответствующий файл также добавится в контекст. На данный момент поддерживаются следующие репозитарии исходного кода: CVS и Subversion (Subclipse и Subversive).

Рисунок 7. Управление набором изменений и привязка к задачам
Рисунок 7. Управление набором изменений и привязка к задачам

Совет: Связывание проектов с репозитариями задач

Чтобы обеспечить привязку текста или ссылок в Java-редакторах, типа "см. дефект 123" для Bugzilla или "ABC-123" для JIRA, необходимо связать проект, соответствующий ресурсу, с репозитарием задач. Сделать это можно щелчком правой кнопки мыши по проекту и выбрав в контекстном меню пункт Properties (свойства), а затем Task Repository (репозитарий задач). Эта связь между проектом и репозитарием задач используется, когда Mylyn разрешает ссылки от задачи к ресурсу, так что она требуется и для гиперссылок типа History (история) или Team Annotation (аннотация для команды). Эти настройки можно проверить в системе контроля версий, если проект является совместно используемым.

Хотя эффект может поначалу показаться незаметным, использование контекста в Mylyn для связывания вместе задач и ресурсов может оказать фундаментальное влияние на стиль работы. Например, в самом проекте Mylyn мы не пишем сообщения при подтверждении изменений, так как они автоматически генерируются интеграцией Mylyn с наборами изменений (через меню Window > Preferences > Mylyn > Team (команда) можно настроить шаблон для генерации автоматических сообщений при подтверждении изменений). Это позволяет выполнять навигацию из вида History (история) к задаче, соответствующей конкретной ревизии, одним щелчком, экономя время при отслеживании связей между изменениями и ревизиями и исходной задачей. И наоборот - можно запросить из журналов CVS все файлы, измененные для этой задачи. Сочетание способности Eclipse показывать аннотации для команды и глубокой интеграции Mylyn с гиперссылками (см. рисунок 8) позволяет тратить меньше времени на поиск дефектов или задач, относящихся к изменению, так как они находятся на расстоянии одного щелчка мыши. (Заметим, что для показа гиперссылок во всплывающих окнах и текстовых редакторах нужно нажать клавишу Ctrl; кроме того, для вывода всплывающих окон на передний план сначала необходимо нажать F2.)

Рисунок 8. Гиперссылки и аннотации для команды
Рисунок 8. Гиперссылки и аннотации для команды

Передача контекста

Контекст задачи сохраняет знания, которые создаются во время выполнения задачи. При повторной активации задачи вы мгновенно возвращаетесь в контекст задачи, так что вам не приходится заново вспоминать части системы, связанные с задачей. Если задача передается другому члену команды, контекст задачи становится для него исходной точкой. Так как контекст создается по взаимодействиям, а не только через изменения, каждый контекст задачи включает связанную с задачей информацию, например, API и документацию, которую вы просматривали во время работы над задачей. Для поддержки этого и других сценариев совместной работы, типа парного программирования, контекст легко можно передавать с другим программистам. Распределение контекста активируется через контекстное меню вида Task List (см. рисунок 9) или выбором соответствующей опции в редакторе задачи:

Рисунок 9. Обмен контекстов через приложения к задачам
Рисунок 9. Обмен контекстов через приложения к задачам

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


Заключение

Как насчет производительности?

Mylyn спроектирован так, чтобы возможности по управлению контекстом не влияли на производительность Eclipse. Это возможно независимо от размера системы, с которой приходится работать, так как масштаб контекста задачи определяется относительно небольшим числом ваших действий, а не большим размером системы, над которой ведется работа. Любое замеченное влияние Mylyn на память или снижение скорость считается дефектом и должно быть зафиксировано с высокой степенью серьезности дефекта. Более того, когда нет активной задачи, управление контекстом задачи в Mylyn полностью отключается. Узнать подробнее о параметрах производительности Mylyn можно в Mylyn FAQ (см. раздел Ресурсы). Для включения монитора памяти в Eclipse воспользуйтесь меню: Window > Preferences > General (общие) > Show Heap Status (показать статус кучи).

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

В основе Mylyn лежит философия: чем меньше - тем лучше. Интегрированное управление задачами и автоматическое управление контекстом в Mylyn вместе позволяют работать над несколькими задачами, не теряя контекста, и помогают вам видеть только нужную информацию и ничего больше. Модель контекста задачи в Mylyn прошла проверку "полевыми испытаниями", в ходе которых обычные программисты использовали ее в своей повседневной работе (см. раздел Ресурсы). Для этих пользователей был зафиксирован статистически заметный прирост продуктивности, а благодаря тысячам отчетам об ошибках и запросах об улучшениях в версии Mylyn 2.0 был внесен ряд существенных усовершенствований в соответствии с запросами растущего сообщества пользователей. Я использую Mylyn для всей моей работе с момента создания прототипа 0.1 в августе 2004 года. Подобно другим пользователя Mylyn, я больше не могу себе представить, что мне нужно вручную искать и определять информацию, относящуюся к выполняемой работе. Я полностью завишу от Mylyn в управлении большим количеством действий, ориентированных на задачи, и многозадачности, которая составляет основу моей повседневной работы.

Если Mylyn поддерживает ваш репозитарий задач, то он может сделать вашу повседневную работу гораздо более легкой, продуктивной и сфокусированной. Если же нужный репозитарий не поддерживается, вы можете использовать Mylyn с индивидуальными задачами. В любом случае используйте интеграцию с Bugzilla для обратной связи и голосования за дополнительные объекты-коннекторы, поддержку которых вы бы хотели получить (см. раздел Ресурсы). Отклики пользователей помогают нам направлять развитие Mylyn, который продолжает бурно развиваться благодаря обратной связи, установившейся между нами и сообществом пользователей. Я и другие разработчики Mylyn ждем ваших комментариев.

Благодарности

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

Этен О'Ши (Athen O'Shea), Роберт Элвз (Robert Elves), Гейл Мерфи (Gail Murphy) и Даки Шервуд (Ducky Sherwood) предоставили полезные комментарии в ходе написания этой статьи.

Ресурсы

Научиться

  • Mylyn 2.0, Part 2: Automated context management: оригинал статьи (EN).
  • Using Task Context to Improve Programmer Productivity (EN) (Mik Kersten and Gail C. Murphy, FSE 2006): статья, описывающая модель контекста, используемую Mylyn, и предоставляющая результаты практических исследований, установивших, что четкий контекст задачи повышает продуктивность труда программиста.
  • Mylyn FAQ и User Guide: документация для пользователей Mylyn.
  • Mylyn homepage: ресурсы и поддержка для пользователей и разработчиков Mylyn.
  • Mylyn Integrator Reference: статья с введением в разработку объектов-коннекторов.
  • Get started with Eclipse: документация о платформе Eclipse и сопутствующих проектах для Eclipse, включая Mylyn.
  • Mik's Blog: блог автора статьи.
  • Технология Java: сотни статей по всем аспектам Java программирования.

Получить продукты и технологии

  • Mylyn Extensions: скачайте объекты-коннекторы, не поставляемые с Mylyn.
  • Generic Web Repository Connector: базовый объект-коннектор с анализатором HTML. Предоставляет простую интеграцию запросов для репозитариев задач, не имеющих высокофункционального объекта-коннектора.
  • Mylyn downloads: сайт обновлений, поддерживаемых версий Eclipse и репозитариев.
  • Eclipse downloads: скачайте Eclipse 3.2 и другое ПО.
  • Пробное ПО IBM: ознакомительные версии программного обеспечения для разработчика, которые можно загрузить со страницы developerWorks.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Технология Java, Open source
ArticleID=325538
ArticleTitle=Mylyn 2.0: Часть 2. Автоматизация управления контекстом
publish-date=07302008