Если вы используете Agile- шаблон процесса в Team Foundation Server, у вас есть три столбца, связанных с планированием и отслеживанием продолжительности задачи, они называются:
- Оригинальная смета
- Выполненная работа
- Оставшаяся работа
Единственная проблема состоит в том, что TFS агрегирует только оставшуюся работу в гибких платах , как вы можете видеть на рисунке 1 :
Рисунок 1. Видны столбцы «Доска с исходной оценкой и выполненной работой»
В Codeplex имеется подключаемый модуль на стороне сервера под названием TFS Aggregator, который может решить эту проблему, но использование подключаемого модуля на стороне сервера может оказаться не оптимальным решением. Если вы используете службу TF в Azure, у вас нет возможности установить какой-либо подключаемый модуль на стороне сервера или какую-либо настройку шаблона процесса , но даже для локальной установки установка подключаемого модуля на стороне сервера может усложнить ваше обслуживание сервера, и вам следует доверять Автор плагина для его обновления по мере выхода новых версий TFS.
Возможное решение — использовать API TFS для загрузки всех данных в пользовательской программе, а затем выполнять вычисления непосредственно с помощью пользовательского кода , но это может быть дорогостоящим решением с точки зрения времени.
Третье решение — использовать Excel для расчета за вас. Если вы загружаете данные из TFS и выбираете добавить три вышеупомянутых столбца, вы можете начать добавлять еще один столбец после каждого из трех, как показано на этом рисунке.
Рисунок 2: Три пустых столбца добавлены на лист Excel, подключенный к TFS
Теперь нам нужно создать формулу для объединения данных всех задач в родительскую историю пользователя. В такой ситуации самый простой подход — создание собственного макроса Excel, например:
Function SumUntilNull(startCell As Range) As Integer Application.Volatile If startCell.Cells(1, 1) = "" Then Dim running As Integer running = 0 Dim row As Integer row = 2 While startCell.Cells(row, 1) <> "" running = running + startCell.Cells(row, 1) row = row + 1 Wend SumUntilNull = running Else SumUntilNull = 0 End If
Это очень простой макрос, он принимает Range и выполняет следующие операции:
- Если первая ячейка диапазона не пуста, возвращается 0
- если первая ячейка пуста, она начинает циклически повторять все ячейки ниже первой ячейки
- для каждой ячейки, которая не пуста, она суммирует число с промежуточным итогом
- цикл остановится, когда встретится первая пустая ячейка ниже первой
После того, как вы определили такую функцию, которую можете использовать в новых столбцах, интересно, что вы можете просто начать вводить формулу (= SumUntilNull), а затем щелкнуть столбец «Оставшаяся работа» в ячейке слева, и Excel автоматически поймет поле, которое вы используете, как вы можете видеть на рисунке 2 .
Рисунок 2: Используйте вашу функцию для создания агрегации
Когда вы закончите формулу, Excel скопирует формулу на все строки области, связанной с TFS. Хитрость заключается в следующем: для каждой строки, в которой присутствует пользовательская история (родительский элемент), значение ячейки равно нулю, поэтому ваша функция автоматически выполняет итерации по всем связанным задачам, пока не найдет другую пустую ячейку (конец интервала или следующая Пользовательская история). Это позволит собрать данные для вас.
Рисунок 3: Ваша формула правильно агрегирует все значения от дочерних рабочих элементов (Task) до родительского (User Story)
Преимущество этого подхода заключается в том, что вы можете просто нажать «обновить» на вкладке «КОМАНДА», и Excel обновит все рабочие элементы с Team Foundation Server , загрузится новая задача, и ваши итоги обновятся автоматически без каких-либо дальнейших изменений.
Благодаря макросу Excel манипулирование результатом запроса TFS является действительно простой операцией . Если вас не интересует часть задачи в запросе, но вы хотите только визуализировать пользовательскую историю и совокупное значение, вы также можете использовать другой простой макрос, который скрывает все строки задач при каждом изменении ячейки на рабочем листе.
Private Sub Worksheet_Change(ByVal Target As Range) For rownum = 3 To 100 If Me.Cells(rownum, 2) = "Task" Then Me.Rows(rownum).EntireRow.Hidden = True Else Me.Rows(rownum).EntireRow.Hidden = False End If Next End Sub
Приведенный выше макрос выполняет итерацию в первых 100 строках листа (он должен быть размещен внутри листа, в который вы загрузили рабочие элементы) и меняет видимость строки, скрывая все строки задач. Лучшее решение — добавить пару кнопок, чтобы скрыть / показать задачи , вместо того, чтобы запускать их для каждого изменения на рабочем листе , но только для того, чтобы дать вам представление о том, чего вы можете достичь с помощью Excel.
Рисунок 3: Пара кнопок «Скрыть / Показать», чтобы просто скрыть / показать все строки задач
Управление данными в Excel действительно интересно, потому что не требует большого количества технических навыков, и это может быть легко сделано даже менеджерами. Это не требует разработчика. После того, как макрос установлен, нужно просто открыть Excel, выбрать обновление данных из TFS и игра готова.
Вы можете скачать Excel, подключенный к виртуальной машине Брайана Келлера со всеми макросами, по этому адресу http://sdrv.ms/16lxfxJ
Джан Мария