Сбор метрик из SVN

26 ноября 2009 г.

Что это?

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

Зачем?

Вообще я не любитель собирать такие метрики, но меня заинтересовало наблюдение Сергея Архипенкова. Я говорю о принципе цикличности при становлении команды.

Сергей заметил, что графики количества строк кода и фаз становления команды выглядят очень похоже. Дело в том, что сначала команда собирается и происходит разработка основных компонентов (формирование команды). В этот период пишется «скелет» системы, кода мало. Потом команду «штормит» и все приходит в норму. Здесь пишется основной код. И, наконец, команда выходит на максимальный уровень производительности. А вот тут уже все написано, остается только рефакторить и исправлять ошибки. Это то самое место, когда количество строчек кода уменьшается.

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

Сразу надо сказать, что сбор метрик я точно не буду применять для:

  1. вычисления производительности отдельных программистов
  2. привязки премий, зарплат и т.п. к этим метрикам

Какие решения нашел?

StatSVN

Сайт – http://www.statsvn.org

Работает в два этапа:

  1. нужно самим выгрузить лог SVN за интересующий период времени
  2. запустить формирование отчета с помощью этой утилиты

Отчеты формирует довольно симпатичные, но работает очень долго. Отчет для 6000 ревизий занял где-то 1,5 часа и напрочь повесил компьютер.

SVNPlot

Сайт – http://code.google.com/p/svnplot

Работает тоже в два этапа, но по другому принципу:

  1. создает базу данных sqlite из хранилища SVN
  2. формирует отчет с помощью запросов к базе данных

Работает на порядок быстрее, чем StatSVN.

Из недостатков можно отметить, что для ее работы надо установить много разных программ: python 2.6, sqlite3, pysvn, NumPy, Matplotlib

Сразу заметил

1. Зависимость возрастания строчек кода от времени в нашем проекте оказалась линейной (интересно, где предел?).

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

Дополнение

Если увеличить масштаб графика, то получим довольно занятную картинку:

Зеленые стрелочки отмечают вершины графика или то место, где график практически ровный. Оказалось, что эти стрелочки отмечены на расстоянии одной итерации (одна неделя). Это и логично, потому что после каждой итерации разработчики некоторое время тратят на рефакторинг и исправление ошибок. Отсюда вывод, что цикличность все-таки есть.

2. Саня комитит по ночам!

А как же 40-часовая рабочая неделя? ;)

В остальных метриках пока никакого толку не увидел. Например, есть довольно забавные графики активности:

Он что-то значит? Может быть первый программист больше рефакторит, чем последний? Нет, конечно. Все работают в парах и комиты могут делать с разных компьютеров. Можно только примерно сказать, что код в основном изменяется, а не добавляется новый. Опять же, это что-то значит?

Буду смотреть дальше, может какие закономерности под руку попадутся :)


Ссылки

Метрики кода

Моя книга «Антихрупкость в IT»

Как достигать результатов в IT-проектах в условиях неопределённости. Подробнее...