VSTS: управление элементами работ (Work Items)
Определение, свойства, жизненный цикл
Обзор. Вернемся к элементам работ VSTS – ключевым дискретным характеристикам проекта, таким как задача (task), ошибка (bug), риск (risk) и т.д. Эти характеристики выделены в VSTS с целью конкретизировать объекты управления в проекте, сделать это управление сквозным в следующих смыслах:
- обеспечить доступ к одной и той же информации для разных участников (и, главное, ролей!) в проекте; например, доступ к ошибкам для менеджеров, разработчиков и тестеров;
- прослеживать связи одних элементов с другими, например, изменений исходного кода и теми ошибками, для исправления которых эти изменения были сделаны.
Благодаря единой среде, включающей в себя средства поддержки различных видов элементов работы, в VSTS гораздо проще строить связи между элементами работы различного вида, отслеживать их изменения, чем при использовании отдельных продуктов поддержания процесса. Например, не нужно ждать момента, пока информация об ошибке или задаче будет перенесена из одной системы в другую. Ведь традиционно программные средства планирования (там, где определяются задачи), управления ошибками (там, где происходит учет ошибок), средства версионного контроля – это разные средства. Кроме того, в силу наличия единого информационного репозитория в VSTS возможны строгие ссылки на такие объекты, определенная сборка или тест, и получение, по соответствующему запросу, подробной информации по разным фильтрам, на разную глубину детализации. Возможно также настроить автоматическую генерацию элементов работы, например, ошибок при неудачной автоматической сборке или при автоматическом прогоне тестов.
Элементы работы можно связывать с другими артефактами проекта - файлами с исходным кодом, сборками (как настройками, так и результатами), документами (по процессу, проектными, пользовательскими и др.), отчетами, которые могут также храниться в VSTS. Все это показано на рис. 13.1. Важно отличать элементы работы от этих артефактов – последние являются рабочими продуктами (точнее, из них рабочие продукты сформируются), а элементы работы являются управляющей информацией в проекте. Правда, и по ним также можно создавать рабочие продукты – генерировать отчеты, документы и планы в продуктах Office и т.д. Но сами по себе элементы работы являются средством оперативной работы над проектом, а не результатами (в том или ином смысле).
Реквизиты. Каждый элемент работы принадлежит определенному типу. Тип элемента работы определяет набор реквизитов, для каждого из которых можно задать:
- имя, отображаемое в отчетах и пользовательском интерфейсе TFS;
- имя для ссылок (Reference Name), используемое для указания ссылок на данный реквизит из других мест шаблона процесса;
- тип – один из предопределенных типов для реквизитов: date, int, string, bool; типы могут системными, то есть являться ссылками в одно из типовых хранилищ TFS; например, тип build results указывает на информацию о результатах сборки;
- текстовое описание реквизита, отображаемое во всплывающих подсказках, отчетах и сообщениях;
- режим использования в отчетах – можно ли использовать этот реквизит в отчетах и как его следует использовать.
Бывают также системные реквизиты, имена, типы и обработка которых "прошита" в TFS. Это, например, такие реквизиты как состояние (state), причины (reasons), связи (links).
Отдельного внимания заслуживают имена для ссылок. Они позволяют идентифицировать данный реквизит не только в пределах одного типа элементов работы, но и в пределах всего TFS-проекта, а также при переносе элементов работы из проекта в проект. Для поддержания уникальности этих имен рекомендуется использовать концепцию пространств имен (namespaces). Кроме того, имена для ссылок служат для организации своего рода пула реквизитов – одинаковое имя для ссылок, использованное в разных типах элементов работы, подразумевает одинаковый смысл соответствующих реквизитов, а также одинаковую их роль с точки зрения формирования отчетов. Существует набор предопределенных имен для ссылок, соответствующих системным реквизитам. Реквизиты с соответствующими именами для ссылок могут подвергаться особой обработке со стороны TFS.
Каждый реквизит может либо не участвовать в отчетах вообще, либо участвовать в следующих режимах:
- как измерение (Dimension) – в качестве измерения при построении отчетов; этот режим допустим для чисел, дат и строковых полей с предопределенным набором значений;
- в деталях (Details) – то есть в качестве детальной информации отчета; этот режим допустим для чисел, дат и произвольных строк;
- как метрика (Measure) – то есть в отчетах используется некоторая статистическая функция, вычисленная для значений данного реквизита.
Жизненный цикл элемента работы определяется двумя системными реквизитами: состоянием и причиной.
Первый описывает текущее состояние элемента работы и определяет его текущую роль в процессе. Каждый тип элементов работы описывает допустимый набор состояний, например, "активный", "завершенный", "проверенный" и т.д.
Кроме того, каждый тип элемента работы имеет описание переходов между своими состояниями состояний, причины, вызывающие эти переходы и действия, выполняемые в них. Причинами могут являться, например, "выполнен", "устарел", "отложен" и т.д. Переходы может осуществлять сама система TFS, автоматически, но в большинстве случаев разработчик сам инициирует переход, внося в систему информацию о том, что выполнил задачу, исправил ошибку и так далее.
Таким образом, жизненный цикл элемента работы представляется ориентированным графом, нагруженным как по узлам, так и по дугам. Использование такого графа вместо нагруженного только по узлам, как например, часто можно встретить в системах управления ошибками, позволило резко сократить размер описания и повысить информативность.
Для настройки типов рабочих элементов используется продукт Team Foundation Power Tools1Его можно скачать отсюда http://msdn.microsoft.com/en-us/tfs2008/bb980963.aspx . Он является свободно распространяемым продуктом и содержит, в частности, визуальный редактор, позволяющий просматривать и редактировать жизненный цикл элемента работы в визуальном виде – см. рис. 13.2. На этом рисунке показан граф жизненного цикла для типа рабочего элемента "ошибка". Мы можем видеть три состояния – Active (обнаружена ошибка), Resolved (ошибка исправлена), Closed (ошибка закрыта), – и переходы между этими состояниями. В каждом переходе имеется прямоугольник Transition, в котором содержатся параметры перехода – причина, действия, которые нужно выполнить, список реквизитов, который должен быть изменен при переходе и некоторую другую информацию.
Еще одной важной составляющей описания жизненного цикла реквизита являются правила, которые описывают различные ограничения на значения реквизитов элемента работы, в том числе:
- базовые ограничения: обязателен для заполнения или нет, доступен только на чтение, пусто, не может быть сброшено, может быть только сброшено;
- обязательное совпадение или несовпадение по значению с другим реквизитом;
- является датой в прошлом или в будущем;
- является именем пользователя, входящего в заданную группу, например то, что за этот элемент работы должен отвечать работник из только группы тестеровщиков.
- значение должно всегда удовлетворять шаблону некоторого регулярного выражения;
- значение является одним из предопределенных значений или наоборот, не является; для задания таких правил допустимо использование ссылок на внешние списки, например, на списки выполненных сборок; кроме того, можно определить список предполагаемых значений, которые будут предложены пользователю, но не обязательны к выбору.
При описании каждого правила можно указать имя пользователя или группы, для которых это правило будет применяться. Исключением является только правило "позволить сохранить текущее значение", применяемое всегда для всех пользователей.
Кроме того, можно описать правила, применяемые в разные моменты времени, в том числе:
- постоянно действующие ограничения или применяемые при создании правила;
- при изменении определенного реквизита, или наоборот, если реквизит остался неизменен;
- при совпадении или несовпадении значения реквизита с предопределенным значением;
- при переходе или во время нахождения элемента работы в определенном состоянии;
- при совершении определенного перехода;
- при совершении определенного перехода по определенной причине в жизненном цикле элемента работы.
Система правил предоставляет обширные возможности для спецификации различных тонкостей бизнес-процесса, однако платить за эту гибкость приходится сложностью настройки. Именно описание корректных правил потребовало от нас наибольших усилий при разработке собственного шаблона и его использовании в реальном промышленном проекте.
Еще один важный механизм настройки реквизитов в VSTS – это задания способа представления реквизита в экранных формах редактирования, просмотра в отчетах. Для этой цели в TFS существует достаточно гибкий диалект XML, включающий предопределенный набор элементов пользовательского интерфейса, а также позволяющий группировать их, разбивать по колонкам или размещать на закладках. Используя вложенность элементов и групп, можно описать строгий, удобный и красивый пользовательский интерфейс, но иногда для этого требуется много времени. Некоторые типы элементов пользовательского интерфейса можно связывать с реквизитами элемента работы, используя соответствующее имя для ссылок.
Средства использования
Пример: элемент работы task. Кратко опишем пример, который будет использован в дальнейшем для объяснения средств использования элементов работы.
Рассмотрим элемент работы типа task (задача). Как правило, в начале проекта некоторый эксперт (как правило, системный архитектор, ведущий разработчик и т.д.) проводит анализ всей необходимой работы по проекту и разбивает её на подзадачи, устанавливая ответственных, сроки и т.д. Эти подзадачи с соответствующими атрибутами и являются элементами работы типа task.
Затем менеджер проекта, с учетом списка всех задач и их взаимосвязей, строит календарный план. На этом этапе менеджеру могут оказаться полезными средства Project и Microsoft Excel – он пользуется ими на основе соответствующих мостов, имеющихся в TFS.
Далее разработчики начинают реализовывать соответствующие задачи. После того, как было внесено последнее изменение и задача выполнена, разработчик переводит элемент работы в состояние Resolved и информация о нем войдет в следующий отчет по автоматической сборке. При обнаружении ошибок реализации тестер создаст новый элемент работы типа Bug и проставит ему связь с исходной задачей. Если же тестер обнаружит, что функциональность реализована не в полном объеме, то он может решить перевести задачу обратно в состояние Active. Если же реализованная функциональность достаточно стабильна, а имеющиеся ошибки не являются критичными, тестер переводит задачу в состояние Closed.
За всем этим процессом наблюдает менеджер проекта, используя как запросы на элементы работы, так и средства интеграции с офисными приложениями, а также средства построения отчетов. Таким образом, он получает возможность максимально оперативно реагировать на возникающие нештатные ситуации, отставания от плана и возникающие дополнительные незапланированные работы.
Создание элементов работы. Для создания нового элемента работы можно воспользоваться пунктом меню Team, добавляемым в Visual Studio вместе с Team Explorer, как показано на рис. 13.3.
После выбора пункта меню Add Work Item отобразился список из существующих в данном проекте типов элементов работы. Далее, после выбора соответствующего пункта меню будет открыто окно редактирования нового элемента работы, как показано на рис. 13.4:
Это окно позволяет заполнить все реквизиты элемента работы, а в случае ошибок выдаст соответствующее предупреждение в верхней части окна. После того, как все поля заполнены, сохранить элемент работы можно посредством кнопки
панели инструментов. После сохранения элемент работы автоматически получит уникальный идентификатор и будет сохранен в системе управления элементами работы.Для добавления связанных элементов работы можно воспользоваться командой контекстного меню Add Related Work Item, как показано на рис. 13.5:
После добавления связанного элемента работы откроется окно редактирования для вновь созданного элемента работы, при этом связь между двумя элементами работы будет добавлена автоматически, как показано на рис. 13.6.
Созданной связи можно приписать соответствующий комментарий. К сожалению, он будет одинаковым для записей о связи в обоих созданных задачах, что затрудняет идентификацию концов связи.
Заметим, что контекстное меню на рис. 13.5 демонстрирует еще одну полезную при создании элементов работы возможность – шаблоны элементов работы. Шаблон определяется набором "предзаполненных" атрибутов элемента работы и может сильно облегчить жизнь участникам проекта, которым приходится создавать много однотипных элементов.