- PVSM.RU - https://www.pvsm.ru -

Личный опыт: организация Workflow в трекере TFS

Личный опыт: организация Workflow в трекере TFS - 1 [1]

Мы продолжаем рассказывать о процессах организации разработки в Positive Technologies. Ранее мы коснулись тем создания дистрибутивов продуктов [2], организации процесса [3] хранения и лицензирования софта и реализации собственной системы Continuous Integration [4].

Сегодня речь пойдет о том, как мы используем инструмент Team Foundation Server (TFS) для организации workflow разработки.

Немного о TFS

Team Foundation Server состоит из нескольких компонентов.

Система контроля версий:

Личный опыт: организация Workflow в трекере TFS - 2 [5]

Трекер задач:

Личный опыт: организация Workflow в трекере TFS - 3 [6]

Система непрерывной интеграции:

Личный опыт: организация Workflow в трекере TFS - 4 [7]

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

TFS для трекинга задач и организации Workflow

Система поддерживает методологии разработки, такие как Kanban, Scrum, CMMI. Кроме того, поддерживаются различные — в том числе кастомные — типы задач: Bug, Task, Feature, User Story и т.п. Также стоит отметить гибкую систему изменения Workflow-задач.

Базовый Workflow для задачи Bug в TFS выглядит следующим образом:

Личный опыт: организация Workflow в трекере TFS - 5 [8]

Мы видим n статусов — начальный, конечный и переходы между состояниями. Как правило, на базовом workflow мало кто работает — всегда возникает необходимость его расширения.

Измененный процесс в нашем случае может выглядеть примерно так:

Личный опыт: организация Workflow в трекере TFS - 6 [9]

Расширение Workflow было выполнено путем добавления новых статусов и переименования существующих. Например, были добавлены статусы Rejected — для задач, которые были отклонены по каким-либо причинам, Moved — для задач, перенесенных в другой проект, Pending — для задач, которые были временно приостановлены.

Переименованные статусы: Approved стал называться In Progress, он значит, что задача была взята в работу, а Commited переименовали в Resolved, означающий, что задача была решена и требуется подтверждение ее выполнения, либо дополнительные работы по ней.

Аналогичным образом изменяется и внешний вид карточки Bug. В самом начале после создания проекта она выглядит так:

Личный опыт: организация Workflow в трекере TFS - 7 [10]

В базовом виде система предоставляет немного информации — как минимум, отсутствует шаблон для шагов воспроизведения, никаких временных метрик и других необходимых нам полей. Такой дефицит нас не устроил, поэтому внешний вид карточки мы также переработали под свои нужды.

Личный опыт: организация Workflow в трекере TFS - 8 [11]

Мы добавили колонку с полями для тайм-трекинга (Original Estimate, Remaining Work, Completed Work, Daily Work), в шаги воспроизведения был добавлен шаблон для заполнения HTML, а также появилась классификация багов по различным признакам.

Проблемы и решения

Несмотря на удобство системы, при работе с Workflow в трекере TFS есть и ряд сложностей:

  • Нет рассчитываемых полей — «навешивание» на полей дополнительной логики трудно реализуется, даже перенос временных метрик из дочерних элементов в родительские не предусмотрен.
  • Нет поля множественного выбора — если в Bug или каком-либо другом work item есть поле клиент, а ошибка встречается у нескольких клиентов, то выбрать их всех нельзя, возможно только одно значение.
  • Неудобный процесс изменения полей и их типов — если в названии поля была допущена ошибка, то исправить ее нельзя, требуется пересоздание поля с переносом всех значений в новое.
  • Нельзя отслеживать изменения и откатывать их — все шаблоны багов и конфигурации TFS хранятся в виде XML, загружаемых в базы. Если допустить ошибку и залить ее в базу, то откатиться на предыдущую версию не удастся. Так что нужно самостоятельно помнить, где и что ты менял.
  • Неудобная система прав для изменения workflow и списков — она устроена таким образом, что если дать пользователю права на изменение списков полей, то он автоматически получит права на изменение списков всего workflow.

Мириться с этими недостатками нам не хотелось, поэтому пришлось решать возникающие проблемы. Вот что мы сделали:

  • Стали использовать открытый проект TfsAggregator [12] для расчета логики полей — удобный инструмент для расчета time tracking-полей, проброса текстовых значений из одного рабочего элемента в другой и т.д.
  • WitCustomControls [13] для реализации поля комбобокса — еще один открытый проект, Java-Script-плагин, позволяющий создавать поля множественного выбора.
  • Gitlab [14] для хранения и трекинга шаблонов рабочих элементов — помогает отслеживать изменения в конфигурациях и дает возможность откатиться на предыдущую версию в случае ошибки.
  • Изменения в шаблоны рабочих элементов, списков и пр. разрешено вносить только администраторам сервиса TFS — это сделано для снижения риска несанкционированного изменения каких-либо конфигураций, списков и т.д.

P. S. Рассказ о разработанном нами инструментарии для создания дистрибутивов был представлен в рамках DevOps-митапа, который состоялся осенью в Москве.

По ссылке [15] представлены презентации 16 докладов, представленных в ходе мероприятия. Все презентации и видео выступлений будут добавлены в таблицу в конце этого топика-анонса [16].

Автор: Алексей Соловьев [17]

Автор: Positive Technologies

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka/216248

Ссылки в тексте:

[1] Image: https://habrahabr.ru/company/pt/blog/316724/

[2] создания дистрибутивов продуктов: https://habrahabr.ru/company/pt/blog/315944/

[3] организации процесса: https://habrahabr.ru/company/pt/blog/314216/

[4] Continuous Integration: https://habrahabr.ru/company/pt/blog/313616/

[5] Image: https://habrastorage.org/files/127/ff5/32a/127ff532abaf42c38db9b77a27ecf32f.png

[6] Image: https://habrastorage.org/files/91a/035/0db/91a0350dba794406a820a3ca5836266a.png

[7] Image: https://habrastorage.org/files/c94/f29/ded/c94f29dede4543e380a3e03fc515fa66.png

[8] Image: https://habrastorage.org/files/805/5bd/a46/8055bda4632541e693f7144b72dc9688.JPG

[9] Image: https://habrastorage.org/files/edc/99d/ece/edc99dece19143be86905ad5848caac9.JPG

[10] Image: https://habrastorage.org/files/5cd/896/acc/5cd896acc3a640a89ee0f196fb66dc7e.JPG

[11] Image: https://habrastorage.org/files/e8f/e7b/b60/e8fe7bb60d6347be940cb407d4fd9f83.JPG

[12] TfsAggregator: https://github.com/tfsaggregator/tfsaggregator

[13] WitCustomControls: https://witcustomcontrols.codeplex.com/

[14] Gitlab: https://about.gitlab.com/gitlab-com/

[15] ссылке: http://www.slideshare.net/phdays

[16] топика-анонса: https://habrahabr.ru/company/pt/blog/310584/

[17] Алексей Соловьев: https://www.linkedin.com/in/alexey-solovyev

[18] Источник: https://habrahabr.ru/post/316724/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best