Заметки консультанта

Шамрай Александр Владимирович

Archive for Март 2016

Улучшения TFS 2015 Update 2 на примере работы с проблемами

Posted by Шамрай Александр на Март 18, 2016

TFS 2015 Update 2 предлагает много различных обновлений, включая релиз менеджер, который теперь доступен через Web-интерфейс, а также работает с VMWare и System Center. Но есть также как, казалось бы, небольшие, но полезные функции. Например, функция подстановки отображаемого имени пользователя через символ «@». С использованием этого нововведения можно улучшить некоторые процессы внутри команды разработки, например, управление проблемами.

Зачастую этот процесс решается по довольно привычному пути — через телефон или корпоративную почту. Например, если возникает какой-либо вопрос, нужно что-либо уточнить, то инициатор в первую очередь пытается как-то решить проблему сразу личным общением, а если не получается, то начинает «писать письма». В больших компаниях таких писем очень много и существует много методик и советов как правильно работать с корпоративной почтой, но вряд ли все им следуют, что превращает почтовый ящик в солидный архив корреспонденции. Исходя из этого появляется небольшой список затруднений, связанных с электронной почтой:

  1. При большом количестве почты, включая обычно еще письма, в которых мы стоим просто в копии, получатель просто может упустить важное для него письмо и проблема долгое время остается незамеченной и нерешенной.
  2. Получатель может откладывать ответ для инициатора ввиду своей занятости, пока просто про него не забудет.
  3. Т.к. письмо в общем случае находится только в почтовых ящиках инициатора и получателя, то о процессе решения возникшей проблемы знает немного людей.
  4. Если в какой-то момент приходит точка Х, в которой нужно понять, что происходило, то это приводит к поиску в почтовом ящике, переборе потоков обсуждений и писем, а сделать это доступным для других участников можно только форвардом или распечатыванием потока обсуждения.
  5. Т.к. почта остается в личном ящике, то полученный опыт при решении проблем не может быть доступен для всех участников команды. А это может привести к повторному прохождению пути при решении схожих или этих же проблем.
  6. Невозможно понять сколько проблем у нас возникает, сколько мы решили, сколько еще нужно решить и сколько мы потратили на это времени.

Использование TFS может помочь упростить этот процесс:

  • Для управления проблемами в различных шаблонах существуют необходимые рабочие элементы, например, CMMI имеет Проблемы, Agile — препятствия, Scrum – также препятствия. Инициатор создает соответствующий рабочий элемент в командном проекте, назначает на исполнителя, который может решить проблему, и она доступна всем участникам разработки, включая руководителя проекта. Использование рабочего элемента позволяет определить правила обработки и эскалации при решении проблем.
  • Через символ «@» к решению проблемы можно привлечь необходимое количество людей, которые могут что-то подсказать или направить по нужному пути. Данную возможность можно использовать в комментариях для рабочего элемента, при этом им будет отправлено системой оповещение.

Рисунок 1. добавление участников к обсуждению

Рисунок 2. Пример нотификации

  • Запросы по рабочим элементам позволяют видеть, что у нас с проблемами в проекте, что с моими проблемами, а также, что происходит с проблемами, в которых я участвовал. Это решается с использованием поиска соответствующего отображаемого имени поле Кому назначено, Кем создано и в истории рабочих элементов.

Рисунок 3. Пример запроса по рабочим элементам

  • Использование Report Server позволит собрать отчетную информацию по нашим проблемам, в том числе, если вы используете TimeSheet, что обсуждалось ранее, то вы можете учитывать время, которое было потрачено на их решение.
  • Все проблемы остаются в TFS, поэтому всегда можно организовать писк их решения через запросы по рабочим элементам и через стандартный механизм быстрого поиска TFS.
Реклама

Posted in Microsoft, Team Foundation Server, Visual Studio | Отмечено: , | Leave a Comment »

Организация управления расписаниями (Timesheet) в TFS

Posted by Шамрай Александр на Март 10, 2016

Если вам необходимо точно отслеживать время и активности, которые происходят при выполнении задач, а также время, которое тратится на различные собрания и другие общие активности, а при этом нет желания покупать и интегрироваться со сторонними решения, то можно воспользоваться стандартными возможностями TFS.

TFS «из коробки» в принципе дает уже некоторые такие функции на основе задач и отчетности, что рассматривалось здесь ранее, но при этом нужно следовать строгим правилам:

  1. Пользователи системы должны по факту событий или ежедневно указывать потраченное на задачи время.
  2. Указание комментариев и новых значений времени должны выполняться одним сохранением.

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

  1. Возможность отслеживать активности связанные или не связанные с конкретными задачами.
  2. Возможность указывать дату для активностей, чтоб их можно было вносить пост фактом.
  3. Автоматизировать калькуляцию времени у задач, для которых существуют активности.
  4. Возможность собрать отчетную информацию.

Основная идея данного решения состоит в следующем:

  1. Ввести новый рабочий элемент, который мы назовем Активность. Он будет использоваться для сохранения времени и при этом он может связываться с задачами либо вводиться отдельно.
  2. Доработать рабочий элемент Задача, чтобы можно было быстро добавлять новые Активности по ней. Новые Активности будут являться дочерними по отношению к задачам, что позволит по необходимости строить запросы со связями, а также использовать существующие отчеты.
  3. Написать решение, которое будет обновлять время у Задач. По всем связанным активностям в родительскую задачу будет суммироваться потраченное время и соответствующе уменьшаться запланированное.
  4. Подготовить отчет, который позволит просматривать Активности по текущим работам. Для примера мы изменим один из существующих отчетов, который позволит построить дерево работ по иерархии Требование->Задача->Активность.

Давайте рассмотрим эти шаги подробнее для TFS 2015 русской версии.

Ввести новый рабочий элемент Активность

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

  • Для редактирования мы воспользуемся TFS Power Tools и пример экспорта отображен на рисунке ниже:

Рисунок 1. Экспорт типа рабочего элемента

  • Далее мы открываем экспортированный файл и для определения типа рабочего элемента меняем его название:

Рисунок 2. Название типа рабочего элемента

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

Рисунок 3. Поле Дисциплина

  • Завершенная работа. Также используем стандартное поле, но устанавливаем ему обязательность для заполнения. Кроме этого, если время могут изменять, поле Исходная оценка можно использовать для хранения предыдущего значения времени.

Рисунок 4. Поле завершенной работы

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

Рисунок 5. Поле даты активности

Рисунок 6. Размещение даты активности на форме

  • Техническое поле, которое будет использоваться как флаг для приложения обработки времени. Это поле будет сбрасываться при изменениях времени и даты Активности.

Рисунок 7. Отслеживание изменения активности

Состояния можно либо оставить, либо удалить, оставив только Предложено. После всех изменений модифицированный рабочий элемент импортируется в проект TFS.

Рисунок 8. Импорт нового типа рабочего элемента

Пример рабочего элемента Активность можно посмотреть в конце статьи.

Доработать рабочий элемент Задача

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

  • В этом случае выполняется изменение определения типа рабочего элемента Задача непосредственно на сервере без операций экспорта и импорта.

Рисунок 9. открыть рабочий элемент с сервера

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

Рисунок 10. Новая вкладка и контрол

Рисунок 11. Настройки контрола

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

Рисунок 12. Пример формы задачи

Написать решение, которое будет обновлять время у Задач

Решение можно реализовать различными подходами:

  1. Реализовать как серверный плагин. В данном случае выполняется разработка плагина, который «прослушивает» все события по изменению рабочих элементов и срабатывает только, когда выполняется работа с Активностями. Метод позволяет фактически моментально выполнять необходимые изменения, но будет дополнительно нагружать сервер TFS, особенно если происходит какое-то массовое изменение рабочих элементов.
  2. Реализовать как веб-сервис. TFS позволяет двумя различными методами подписываться на события, которые в нем происходят, и отправлять сообщения на SOAP сервисы. В данном случае мы будем получать только нужные для нас сообщения, но нужна дополнительная реализация самого сервиса, обработка входящих сообщений, а в дельнейшем также нужно задуматься, где его развернуть.
  3. Отдельное консольное приложение. В данном случае приложение работает на основе запроса по рабочим элементам, который будет получать необходимую информацию и выполнять операции по обновлению данных. В этом методе будет использоваться минимум кода, а развернуть его можно в виде периодической задачи на любом рабочем месте, включая сам сервер TFS, с предустановленными клиентскими библиотеками. Этот вариант проще для реализации, поэтому его мы и рассмотрим.

Основные шаги приложения будут следующими:

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

WorkItemStore wiStore = new WorkItemStore(«http://tfs-srv:8080/tfs/DefaultCollection»);

Query query = new Query(wiStore, QueryStr);

var result = query.RunLinkQuery();

  • Перебор результата запроса и получение связанных задач и активностей. Пример получения задач и активности:

WorkItem activity = wiStore.GetWorkItem(wilink.SourceId);

WorkItem task = wiStore.GetWorkItem(wilink.TargetId);

  • Получение информации о времени и обновление полей с временем у задачи. Пример операции:

Double work = (Double)activity.Fields[«Microsoft.VSTS.Scheduling.CompletedWork»].Value;

Field taskRemaining = task.Fields[«Microsoft.VSTS.Scheduling.RemainingWork»];

if (taskCompleted.Value == null) taskCompleted.Value = work;

else taskCompleted.Value = (Double)taskCompleted.Value + work;

task.Save();

  • Обновление информации в Активности о том, что из нее данные получены, а также блокировка ссылки с задачей для того, чтоб ее случайно или намеренно эта связь не потерялась. Пример блокировки связи:

foreach (WorkItemLink activityLink in activity.WorkItemLinks)

{
if (activityLink.LinkTypeEnd.Id == parentLink.Id)

{

if (activityLink.IsLocked) break;

activityLink.IsLocked = true;

break;

}

}

Пример приложения можно посмотреть в конце статьи.

Подготовить отчет

Для отчета, как и в случае с рабочими элементами, мы воспользуемся существующим, который называется «Ход реализации требований». Данный отчет уже хорошо подготовлен, он выстраивает дерево требований и работ, собирает по ним информацию о трудозатратах и имеет параметры, которые можно настроить под собственные потребности. Для работы с отчетом можно использовать Report Builder, в котором нужно выполнить следующие шаги:

  • Открыть отчет «Ход реализации требований», который будет являться исходным. По умолчанию он находится в каталоге «Управление проектами». Сохраним отчет с новым именем.

Рисунок 13. Расположение исходного отчета

  • Добавить новый параметр, который будет содержать название рабочего элемента Активность, например, следующим образом:

Рисунок 14. Параметр Activity

  • Изменить запрос отчета для того, чтоб потраченное время учитывалось только через рабочие элементы Активность, а также по необходимости вывести дополнительные, например, Кому назначено, Тип и дата активности. Пример учета потраченных часов из активностей:

Рисунок 15. Пример изменения запроса

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

Рисунок 16. Выражение для поля Исполнитель

  • Далее нам необходимо протестировать и сохранить отчет:

Рисунок 17. Пример работы отчета

В итоге

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

Ресурсы

То, что использовалось в данной статье, можно скачать здесь:

  • Определение типа рабочего элемента Активность – Активность.xml.
  • Исходный код решения для обновления потраченного времени – UpdateCompletedFromActivity.zip.
  • Доработанный отчет по требованиям и их задачам и активностям – «Активности по требованиям.rdl».

Posted in Microsoft, Team Foundation Server, Visual Studio | Отмечено: , | Leave a Comment »

 
%d такие блоггеры, как: