Инструменты оценки состояния проектов по разработке

Программирование – процесс творческий, и очень часто попытки измерить какие либо параметры проекта рассматриваются как нечто крамольное. Действительно у многих программистов вызывает усмешку попытка измерять производительность команды, например количеством написанных строчек исходного кода. С другой стороны, любой процесс обладает набором свойств и изменяющихся параметров. Знать их значения очень важно, так как это помогает ответить на вопрос «Как дела?». Выяснить, что происходит на текущий момент и спланировать шаги, например по уменьшению ошибок в продукте.



Очевидно, что чем больше измеримых параметров, тем больше возможностей для анализа происходящей ситуации. Очень замечательно если вы обладаете данными о текущем количестве багов в вашей системе. Еще лучше если вы можете посмотреть на нее в разрезе основных компонент, и еще лучше, если вы будете знать, насколько быстро вносились изменения в эти компоненты чтобы оценить риски и назначить приоритеты по исправлению существующих ошибок. Это один из тривиальных сценариев, но чтобы его реализовать, необходимы инструменты которые собирают данные подходящие для анализа. Это та самая «первичная бухгалтерия» проекта, которая будучи превращенной в отчеты, позволяет на более качественном уровне принимать решения.
Тут то и оказывается, что эти данные по большому счету приходится вносить либо вручную, либо они хранятся в столь неструктурированном виде, что их анализ становится трудоемкой задачей.

Откуда брать данные?


Автоматизация процессов разработки привычно сводится к трем основным компонентам. Это управление задачами («тасками и багами»), исходным кодом и автоматическая сборка. На основе этих «трех китов» создано немало программных продуктов и схема эта доказала свою состоятельность при создании среды непрерывной интеграции (continuous integration). На рынке существует немало решений, платных и бесплатных, которые помогут вам управлять вашим кодом, задачами и ошибками, и собирать проект. Более того, существуют комплексы, которые интегрируют эти части между собой и позволяют, например, ассоциировать изменения которые вносятся в исходный код с ошибками или задачами, тем самым позволяя на более качественном уровне управлять изменениями в проекте.

Уровень интеграции этих компонент может быть различен, но вот вопрос связанный с измерениями и отчетами как то не фокусируется. Ну действительно, какие могут быть отчеты по базе исходного кода? Чуть лучше ситуация с задачами, многие системы позволят вам отфильтровать «таски и баги» по какому либо статусу. Если же рассматривать всю ситуацию в комплексе, то, оказывается что объединить все три компонента в единый комплекс отчетных данных является нетривиальной задачей.

Инструменты


При проектировании Visual Studio Team System в 2003 году было принято решение о создании полноценной системы аналитики как самого важного компонента комплекса. Основные цели при этом были следующими:
  • 1) Автоматически собирать всю возможную информацию
  • 2) Максимально снизить запросы к пользователю по ручному вводу информации
  • 3) Предоставить инструменты быстрого анализа по запросу (ad-hoc)


При этом компоненты контроля версий, управления задачами и исходным кодом рассматриваются как источники данных, которые с помощью специальных адаптеров заполняют информацию в базе отчетов. Следует отметить, что адаптеры могут быть расширены. Это позволяет наполнять базу данных информацией из дополнительных источников данных, расширяя схему. С исходным кодом-примером такого адаптера можно ознакомиться на сайте Codeplex.

Схема сбора данных в TFS

Обработанные данные в базе OLAP затем могут быть проанализированы с помощью отчетов на базе Reporting Services или Pivot таблиц Excel.

Такой подход позволил на порядок улучшить качество исходных данных, но самое главное позволяет анализировать данные в едином комплексе с самыми различными фильтрами и разрезами. Вместе с Team Foundation Server 2010 уже поставляется несколько готовых отчетов на основе Reporting Services, и эти отчеты описаны в документации к шаблонам процессов Agile и CMMI. Но куда интереснее обстоят дела с отчетами, которые могут быть построены на базе OLAP и перекрестных таблиц Excel.

Excel как швейцарский нож


Работа с аналитическими данными проекта при помощи Excel очень проста. Для этого достаточно присоединиться к внешнему источнику данных куба TFS:

Меню соединения с источниками данных Excel

Обычно сервер, на котором находится база данных TFS и является сервером OLAP. Не забудете только получить права на доступ пользователю от лица которого вы соединяетесь с этим сервером.

Диалог ввода адреса OLAP сервера в Excel

Далее останется только выбрать режим отображения информации:

Режим Pivot таблицы

И вы сможете формировать вашу первую Pivot таблицу на основе данных TFS.

Pivot таблица TFS

Аналитический куб TFS содержит 15 таблиц фактов. Это те данные, которые можно выразить в агрегированном виде. Это, например такая информация как количество модифицированных строк кода, количество пройденных юнит тестов, количество строк кода охваченных юнит-тестами (code coverage) и другие. Эта информация может быть отфильтрована в различных измерениях, которых более 60. Например, дата/время, области проекта, итерации, модули, члены команды, категории тестов, проекты, поля рабочих элементов и так далее.

image

Соединяем все вместе


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

image

Варианты вывода отчетов


Дополнительной интересной возможностью отчетов Excel является их «самодостаточность». Сформировав необходимый отчет вы можете сохранить его, отослать по почте заинтересованным лицам. А если вам необходимо посмотреть на актуальные данные, достаточно опять открыть файл и обновить данные из источника. Дополнительным интересным сценарием является публикация файла Excel на сайте Sharepoint в библиотеку документов с включенными сервисами Excel. Это позволяет видеть графики и таблицы в HTML виде, и не требовать от пользователя прав доступа к OLAP кубу TFS, и возможности присоединения к нему.

Но аналитические возможности на базе OLAP источника данных могут быть использованы не только с помощью Excel. Так же с помощью стандартных средств SharePoint Portal Server данные из OLAP куба TFS могут быть превращены в KPI и сформированы информационные панели, которые в краткой лаконичной форме «светофоров» помогают моментально оценить текущее состояние проекта. Примерами таких индикаторов могут быть пороговые значения количества ошибок на проекте, количество оставшихся открытых задач на дату, данные о проценте покрытия кода юнит тестами (code coverage).

image

Так же хотелось бы упомянуть новый инструмент, Live Labs Pivot – очень интересный механизм визуализации данных. Уже есть примеры его использования в качестве инструмента вывода данных из источников данных TFS.

Заключение


Предупрежден – значит, вооружен, гласит пословица. Сложность создания программных систем как никогда зависит от того, можете ли вы адекватно оценить текущую ситуацию на проекте с помощью аналитических инструментов, формальных метрик и отчетов. Если вы знаете что происходит, значит можете сделать адекватные шаги которые предотвратят неудачное развитие событий. Применяя технические средства Team System 2010 оценка текущей ситуации на проекте становится разрешимой задачей и позволяет вовремя сфокусировать команду именно на те вещи, которые влияют на успех всего проекта в целом.
+11
23 июля 2010, 14:36
16
dmandreev 17,2

комментарии (27)

–7
mikhailian #
Ничего не понял. Вы лучше скажите, когда в Source Safe появится возможность редактировать исходные тексты, не блокируя их для других пользователей.
+3
DunkanVS #
А разве нельзя взять файл с опцией «Make writable» поправить, а потом при чекауте замержить и зачекинить.
Но все равно звучит как: «А когда в православной церкви католические пастыри будут проповедовать?».
–2
mikhailian #
Да нет, вопрос звучит как «Когда в Израиле можно будет в субботу работать?»
–2
poorum #
Боже упаси, блокировки — это одна из лучших возможностей SourceSafe. Избавляет от множества проблем мержинга.
+1
Greesha #
Мерджинга боится тот, кто его не пробовал. По себе сужу.

Очень редко два программиста правят один и тот же кусок кода, так что обычно с мерджингом не возникает реальных проблем. А если эти два злобных буратины таки правят один и тот же код, то при конфликте мерджинга тоже сплошная польза: вдвоём они наконец-то разберутся, зачем этот код нужен. :)
0
poorum #
Я сужу по себе. Перешел с SVN на SS. А в текущей моей команде один и тот же код может править не 2, а 5-6 программистов. Причем разные проблемы. Потом мержить сложно, и ошибки становятся очень вероятны. Но не допустимы, в виду поставленных требований к процессу разработки.
+1
VenomBlood #
Зачем?
1 класс — 1 файл, если класс большой — есть partial (это что касается .net).
А если у вас размер класса такой, что над ним одновременно несколько разработчиков сидит — то это вам не VCS новая нужна, а хороший рефакторинг.
+2
dmitrygusev #
Чтобы получить конфликт достаточно изменить одну строчку, сделать небольшой фикс, например, запустив тот же rename refactoring.
–2
antimirov #
>>1 класс — 1 файл

Кроме C# есть и другие языки.
–1
VenomBlood #
Крайне странный довод, в каких это языках в один файл НЕОБХОДИМО класть более одного класса?
0
antimirov #
Не «необходимо», а просто напросто нормально.
В Python в одном файле считается нормальным хранить несколько классов.
+1
VenomBlood #
А ещё можно всю программу в void main() писать, я не считаю что это вообще относится к языку.
Приведёте объективные причины, почему имеет смысл хранить кучу классов в одном файле?
ИМХО — это всё же вопрос не VCS, а рефакторинга. Если так важно хранить всё в одном файле — то не используйте SS (к слову — можно выгрузить файл для изменения без установки блокировок, и та же VS об этом спрашивает при чекауте).
0
antimirov #
Вы забываете, что языки бывают разные и судите с колокольни C#/Java-программистов. К примеру, в python классы исключений бывают такими:

class GeoException(Exception):
pass

class InvalidGeometryError(GeoException):
pass

class SelfIntersectionError(InvalidGeometryError):
pass

class GeoInvalidProjection(GeoException):
pass

Вы предлагаете здесь создать 4 файла? И как это потом редактировать? Тут имхо разные подходы. В VS, я полагаю, вы используете «New Class» и не задумываетесь, где IDE за вас хранит данные. Ваше право, дело привычки и языка.
0
VenomBlood #
(к слову — можно выгрузить файл для изменения без установки блокировок, и та же VS об этом спрашивает при чекауте)
0
antimirov #
Это, наверное, в другой тред. Я не утверждал обратного. Я лишь был не согласен с применением утверждения «1 класс — 1 файл» ко всем языкам программирования.
0
VenomBlood #
Ну некоторые и в C# пишут всю программу в одном файле, так что если рассматривать это как вопрос «вкуса» (абстрагируясь от качества вкуса), то да, соглашусь.
0
XaocCPS #
в Source Safe 2005 вроде бы есть режим, когда блокировки не происходит?
0
balbesko #
А картинки только у меня не отображаются?
–2
Parnassus #
с картинками все в порядке
+1
balbesko #
А, дошло — они у нас почему-то фильтруются контент-блоком, и на их месте ничего нет :(
0
Parnassus #
Переложил на хабрэффект. Помогло?:)
0
balbesko #
Да, спасибо!
0
cre8or #
Парочка jpg затесалась.
0
ilnoor #
в тегах не хватает t в слове microsoft
0
Parnassus #
спасибо! поправил
0
balbesko #
А вы не в курсе, куда можно внести даты начала и конца каждой итерации? Я вчера полдня искала, и вроде никуда кроме экселя (iteration backlog, product planning) они не ставятся. А хотелось бы!
0
vpanferov #
Всё равно непонятно что с этими отчётами делать.

Найти кандидатов на более тщательное тестирование — это да. Но про это и разработчики могут сказать.

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

Хочется какой-нибудь success story, вроде того что после внедрения системы в Microsoft количество сроков выпусков уменьшилось настолько-то, или что точность планирования бюджета так-то возросла и т.п.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.