Персональные инструменты
 

ShowTeamWork

Материал из CustisWiki

Перейти к: навигация, поиск

Проблема

При грамотном процессе разработки, с применением средств групповой работы, таких, как:

накапливается огромная история коллективного взаимодействия команды.


Хочется:

  • эффективно извлечь из этих данных полезные знания:
Работа
кто, как и где «вкалывает»,
Взаимодействие
кто с кем, и в каких темах
например:
  • достаточно ли было Agile-кроссфункциональности?
  • где были проблемы (заброшенные области, забытые люди)
  • и т.п.
  • быстро и нескучно рассказать о работе своей команды:
    • демонстрации заказчикам;
    • гордость перед коллегами;
    • хедхантинг новых сотрудников.

Однако на практике возникает проблемы:

  • Question.svg как эффективно исследовать этот пласт информации?
  • Question.svg как эффектно показать свою работу лицом?

Question.svg Может посчитать метрики? Ненавистные SLOC и иже с ними? Да, такие инструменты есть:

В зависимости от глубины детализации можно получить:

    • либо пару унылых метрик («KSLOCs в месяц на сферического разработчика в вакууме», то есть в нашей метафоре максимум — «площадь лесного массива»)[1].
    • либо многостраничные Excel-dashboardы, заполненные мириадами цифр, в которых почти также бессмысленно лезть человеку, если он не профессор Чарли Эппс из сериала Numb3rs с его верными суперкомпьютерами и волшебными алгоритмами DataMining-a.

  • Читать логи переписки и коммиты в VCS?

No.svg То есть разрабатывать «шахту знаний» киркой и мотыгой? Бродить по лесу и считать деревья? Муторно!


Question.svg Что же делать?

Есть альтернативный способ «увидеть лес за деревьями» и при этом выжать краткую информацию по процессу — Визуализация. В динамике!

Есть уже даже несколько моделей!

Целых две ☻ .

Codeswarm

  • CodeSwarm.
  • Самая древняя! (год с копейками).
  • Визуализация физической модели «Люди и файлы» (на самом деле 4-ре модели: «Simple», «Chaotic», «Maxwell», «Legacy», но не все они «одинаково полезны», наиболее разумная — «Simple»).

Основная идея

    • «Люди» не любят друг друга — отталкиваются!
    • «Файлы» тоже отталкиваются! «обратно пропорционально расстоянию».
    • «Людей» и «Файлы» притягивает при коммитах!
    • «Люди» сближаются из-за совместной работы над одними файлами



А также:

  • Файлы можно красить (по директориям).
  • Работа красит — файлы красят людей.
  • Цветной пульс проекта в динамике.

Gource

Основная идея

  • Визуализация и структур каталогов («облака имен»)!
  • Модель «Пчелы» и «цветы»!
  • Видны:
    • «Горячие зоны».
    • Кроссфункциональные парни.
    • Заброшенные люди и код.



Что не хватает?

Important.svg Именно поэтому «самодельных» визуализаций — почти нет!

  • Сохраненного видео. Только рисует.
  • Какое видео без музыки?
  • Инфоканал — текст бегущей строкой — субтитры!
  • Максимальная автоматизация:
    • «старт с нуля» — только включить и дать на вход лог!
    • «эволюционные доработки» — легко и быстро «править кино».


Наш фреймворк ShowTeamWork

Important.svg Наше решение все это делает!

А именно:

  • Вытаскивается лог-информация, если запустить в workspace проекта под какой-нибудь из известных VCS — поддерживаются самые распространенные системы контроля версий: CVS, SVN, GIT, Bazaar, Mercurial (в принципе — можно визуализировать любую активность, хоть торговлю трейдеров).
  • Автоматически выбирается набор подкаталогов проекта с наибольшей активностью.
  • Для них генерируется случайная цветовая палитра, с взаимоконтрастными и яркими цветами.
  • При отсутствии «сценария субтитров» — генерируется шаблон-заготовка.
  • При отсутствии аудио сопровождения — предлагает заготовленную музыку в стиле «Ambient»
  • Порождает видео, с длительностью равной аудиозаписи, и накладывает субтитры, вычисляя их из формата «сценария субтитров», где события привязаны к датам.

Примеры

Альбом готовых визуализаций для известных софтверных проектов ( bugzilla, bzr-svn, codeswarm, ffmpeg, freemind, git, gource, inkscape, mediawiki, mercurial, mplayer, postgres, subversion, viewvc) можно посмотреть здесь.

Мы используем

Свободные, open-source программы:

А также несколько треков свободно доступной электронной музыки от Tunguska Music Society (License: Creative Commons). Если вы поленитесь искать музыку — мы сделаем клип на базе случайного трека (несколько треков идут в комплекте). Бесплатно и патриотично! Если хотите публиковать свои ролики, напоминаем о пока еще существующих цифровых правах на музыку и рекомендуем использовать только свободно доступную музыку — тут огромный выбор музыки в стиле Ambient.

Быстрый старт

Caution.svg Для Windows-пользователей. Linux-пользователи, думаю, поймут сами, что и как.

Скачайте дистрибутив, распакуйте куда-нибудь его.


Зайдите в каталог проекта, т.е. воркспейс под одной из систем контроля версий ( CVS, SVN, GIT, Bazaar, Mercurial), причем не обязательно верхний уровень — можно на два-три уровня ниже, и вызовите showteamwork.exe, и отправляйтесь пить кофе.

В конце работы вы получите в каталоге, в котором его запустили пару видеофайлов (с codeswarm и gource визуализациями, по именам все будет понятно), а также вспомогательные файлы настроек и аудио, с префиксом stw-.

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

Пересчет будет относительно экономичным — например, если вы меняли только параметры относящиеся к codeswarm-визуализации, то gource-визуализация пересчитыватся не будет, а если правили только субтитры — то будет выполнятся только наложение субтитров, без вызова gource или codeswarm.

Более детально, схема генерации описана ниже.

Схема генерации

[svg]

Упрощенная схема генерации представлена выше.

Note.svg Единственное необходимое — история проекта, в виде лог-файла, файла-генератора лог-файла, или просто workspace-проекта под одно из известных VCS, у которое лог-файл можно запросить.

Будучи запущенной ShowTeamWork без дополнительных файлов автоматически проанализирует лог, и

  • выделит наиболее «активные» каталоги
  • подберет для них случайную контрастную палитру цветов
  • сгенерирует файлы настроек
  • предложит одну из заготовленных[2] музыкальных дорожек в стиле Ambient.

А теперь поясним, зачем остальные сложности.

getlog.py

При отсутствии известного системе логфайла, ShowTeamWork пытается вызвать скрипт getlog.py, где вы пропишете, что и откуда надо тянуть. Например, вы собираетесь визуализировать историю большого проекта, у которого свой репозиторий, независимый от вашего проекта по его визуализации. getlog.pyPython-скрипт, он мультиплаформенный, в отличие от bat-файлов или shell-скриптов, и собственно не требует знания Python — для всех проектов в подкаталоге samples есть скрипт getlog.py, так что при необходимости, просто скопируйте скрипт, вытаскивающий лог из нужной вам системы контроля версий (в каталоге samples представлены все поддерживаемые типы VCS).

В скрипте, вы можете указать, например, параметры ограничивающие дату выборки лог-файла (например, только «последний спринт»).

import os
import datetime
 
begindate=(datetime.date.today()-datetime.timedelta(days=14)).strftime("%Y-%m-%d")
os.system(
"""
svn log --verbose --revision "{%(begindate)s}:HEAD" http://svn.wikimedia.org/svnroot/mediawiki/ >svn.log
""" % vars())

Или вы можете написать свой скрипт, который, например, будет доставать данные из вики-системы, трекера-задач, системы документооборота или любой системы, подразумевающей командную работу.

После работы этого скрипта, ожидается, что в каталоге будет один из следующих файлов:

cvs.log
получаемый командой
 cvs log
svn.log
получаемый командой
 svn log -v
bzr.log
получаемый командой
 bzr log -v
git.log
получаемый командой (без шуток и одной строкой):
git log --name-status  
    --pretty=format:"%n------------------------------------------------------------------------%nr%h | %ae | %ai (%aD) | x lines%nChanged paths:
hg.log
получаемый командой
 hg -v log
activity.xml
Стандартный XML-формат представления активности (см. #activity.xml).

Если getlog.py не обнаружено, или он не выдал ожидаемые лог-файлы, ShowTeamWork пытается получить их самостоятельно, ожидая, что ее запустили в каталоге проекта под какой-нибудь системой контроля версий. ShowTeamWork смотрит, нет ли одного из следующих подкаталогов (в каталоге запуска или на один-два уровня выше) CVS, .svn, .bzr, .git, .hg — и обнаружив таковой, пытается получить лог-файл от соответствующей системы контроля версий (должна быть установлена и «в путях»).

activity.xml

Стандартный XML-формат представления активности (когда, кто, с чем, что сделал):

<?xml version="1.0"?>
<file_events>
<event 
  date="1263155767000" 
  author="rotem"
  action="A"
  filename="/trunk/phase3/languages/messages/MessagesEn.php" 
  comment="Localization update for he, and whitespace fix in en.. " />
<event 
  date="1263155767000" 
  author="rotem"
  action="M"
  filename="/trunk/phase3/languages/messages/MessagesHe.php" 
  comment="Localization update for he, and whitespace fix in en.. " />
</file_events>

Т.е. все просто — последовательность event вложенных в file_events, а атрибуты event следующие:

date
Время события в миллисекундах от стандартной компьютерной эпохи (1970…).
author
Автор действия
filename
путь
action
(необязательно)
A
добавление
M
модификация
D
удаление
comment
(необязательно) — комментарий

Инсталляция

Проект (исходники и бинарники) хостится на Google Code — http://code.google.com/p/showteamwork/.

Т.е. скомпилированные под Windows бинарники, вместе можно скачать отсюда, а если хотите поучаствовать в разработке — см. http://code.google.com/p/showteamwork/source/checkout

Единственное софтверное требование под Windows — наличие Java (все остальное идет в комплекте).

Под Linux нужно установить (из исходников или пакетами — неважно):

и сделать, чтобы эти утилиты были прописаны в путях.

Cразу посмотрите каталог samples, должно быть все понятно.

Чуть позже, мы подробно распишем здесь назначение каждой настройки.

Контакты


Резюме

  • Это забавная игрушка.
  • Пользоваться ей можно сходу, не приходя в сознание.
  • Но в ней куча настроек и прочих «степеней свободы» — подбор музыки, движка визулизации, параметров, палитры и т.п. — так что изготовление роликов визуализации более-менее искусство.
  • Результаты полезны для:
    • Рекламы проекта:
      • Представления проекта на конференции (очень сейчас модно, см. например выступление об проекте Debian Installer). У вас это займет всего минуты четыре, а аудитория проснется и заинтересуется.
      • Показа проекта без раскрытия кодов, при хедхантинге. Длинные, унылые, проекты с legacy-кодом будут даже смотреться интересней новых и перспективных проектов. И возможно тут предпочтительней использовать Codeswarm-визуализацию.
    • Показ работы в рамках SCRUM-демонстрации (или чего-то подобного), для донесения идеи — «мы тут вкалываем!» для заказчиков и прочих стейкхолдеров. Когда показывается короткая работа (неделя-месяц) — лучше использовать Gource-визуализацию.
  • Ну и полезно посмотреть на свой или чужой проект, для быстрого и целостного гештальт-восприятия (не затухает ли проект, сколько народу вкладывается в «ядре», и т.п.).

В принципе, наверное все сказано, на всякий случай, вдруг кому пригодится — короткий доклад о ShowTeamWorks на конференции AgileDays-2009 (особого ничего нового, по сравнению с написанным выше).

Примечания

  1. На самом деле сейчас уже есть интересные варианты с нетривиальной статической визуализацией SVN-репозиториев: SVNPlot, примеры: [1], [2]. Но в динамике все равно гораздо веселей.
  2. Свободный, выпущенных под лицензией Creative Commons

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

Репликация: База Знаний «Заказных Информ Систем» → «ShowTeamWork»