Переезд с одного средства планирования разработки на другое — с XPlanner на Redmine

    Переезд с одного средства планирования разработки на другое — с XPlanner на Redmine


    «Мыши плакали, кололись, но продолжали есть кактус», — моё мнение о пользователях XPlanner.

    Преамбула


    Так повелось, что изначально наша команда использовала XP и вообще Agile разработку. Изначально был выбран XPlanner — он же как раз заточен под итеративную разработку ПО.
    Со временем процессы разработки менялись, и это все меньше походили на те, которыми были изначально.

    И вот лишь недавно мне удалось перетащить всех на Redmine.

    <оффтопик>Лично меня XPlanner всегда раздражал («раздражал» — самое точно слово) — слишком много всего надо было сделать, чтобы получить желаемое. Точнее даже не желаемое — а возможное. Слишком непонятный, неудобный и бесчеловечный интерфейс. Элементарные вещи требовали от меня огромных усилий и приносили мало пользы.</оффтопик>

    О XPlanner'е


    Xplanner — XPlanner is a project planning and tracking tool for eXtreme Programming (XP) teams.
    Xplanner — програмное средство для планирования и управления задачами для команд, работающих в стиле экстремального программирования. Проект перестал обновляться в мае 2006го года.

    XP имеет несколько принципов, часть из них находят поддержку в XPlanner'е, а именно:
    • Процесс разработки ПО состоит из коротких итераций (обычно одна или две недели) в ходе которых необходимо выполнить достаточно законченный блок функциональности продукта. Если выясняется, что в срок закончить не удаётся, надо сократить функциональность, но не сдвигать время.
    • Блоки функциональности делятся на «истории» (story) — на каждую подсистему, или модуль — пишется своя история. Истории обсуждаются на встречах и фиксируются.
    • После этого истории делятся на задачи, которые оцениваются перед началом разработки.

    Для этого XPlanner имеет соответствующие средства — проекты, состоящие из итераций, итерации из историй, истории из задач. Есть метрики выполнения. Несмотря на большой список фич XPlanner'а у нас в команде использовались, фактически, только две:
    • Разбиение процесса на итерации, истории, задачи.
    • Учёт времени.

    Минусы XPlanner (на мой скромный взгляд)

    Фактически из средства планирования он превратился в средство отслеживания времени. Потому как планировать каждую неделю, перекидывать задачи из итерации в итерацию, из истории в историю было очень долго. Но что хуже (с моей точки зрения) он не мог выполнять элементарных вещей, которые эмулировались руками разработчиков. Например были следующие странные процессы:
    • Т.к. XPlanner не поддерживает уведомлений в почту, каждый разработчик был обязан по выполнению задачи написать в особую рассылку письмо вида «Завершена задача <id задачи>».
    • Если в ходе разработки программист понимает, что не уложится в срок он меняет оценку в XPlanner'е и (вы уже догадались?) — да! пишет письмо в рассылку «изменена оценка задачи».
      Знакомые говорят, что в XPlanner есть уведомления, однако я ничего точно про них сказать не могу
    • Каждый вечер разработчик пишет в рассылку отчёт по задачам (сколько времени потрачено и какие закрыты).
    • При коммите в качестве комментария писался Id задачи. Чтобы узнать суть задачи по коммиту надо было копировать Id, открывать браузер и ползти в XPlanner — смотреть.
    • Кроме этого, т.к. XPlanner не поддерживает статусы задач, поэтому чтобы тестировщик знал какие задачи ещё не тестированы была заведена история «Тестирование». Разработчик, завершив задачу, кроме того письма обязан был зайти и дописать ссылку на сделанную задачу в ту историю.
    • Тестировщик же в свою очередь был вынужден их просматривать на предмет «а не появилось ли чего нового».
    • Комментарии к задачам не использовались — каждый дописывал их прямо в текст задачи не забыв веское «Вася».
    • Задачи не имеют приоритетов поэтому они назывались так: «(0) Ошибка в модулей 1», «(1) Не очень важная ошибка».
    • Задачи не имеют дополнительных статусов и связанности с задачами (заблокирована, дублирует). Поэтому в названии задачи можно было встретить конструкцию «LOCK».
    • Нет общего пула задач, и задач в разработке. Для пула использовалась «Итерация бесконечность». Откуда каждую неделю не самым удобным образом набирали задачи на итерацию.
    • Нет удобных вещей: фильтров по задачам (очень важно! нельзя посмотреть статистику всех важных ошибок по всем проектам), цветовых схем (чтобы задачи 0го приоритета сразу бросались к глаза).
    • Никакого воркфлоу. Задачу может создавать кто угодно, закрывать кто угодно. Отследить тестируется она или нет — нельзя. (А как быть тем у кого процесс разработки достаточно жесткий и состояний много: создана, утверждена, выполняется, заблокирована, тестируется, закрыта, возвращена, отклонена?).
    Плюсы
    • Язык разработки — Java, на котором мы разрабатываем свои продукты, что создавало принципиальную возможность его дорабатывать самим, пара мелких вещей действительно


    Теперь о Redmine


    Redmine is a flexible project management web application. Written using Ruby on Rails framework, it is cross-platform and cross-database.
    Redmine — гибкое средство управления разработкой ПО. Оно разработано на платформе RoR и может использовать различные БД (SQLite, MySQL, PostgreSQL).
    Redmine с первого взгляда понравился тем, что позволяет гибко настраивать почти всё из интерфейса, тем, что в нём уже есть много полезного, но в то же время нет ничего сверхненужного.

    Краткие возможности Redmine
    • Справочники. Справочник — это список малоизменяемых служебных или пользовательских сущностей, которые можно менять из интерфейса. Можно настроить следующие вещи:
      • Список типов задач («Ошибка», «Рефакторинг», «Саппорт», «Новая функциональность» и т.д.)
      • Список статусов задач («Создана», «Выполняется», «Заблокирована» и т.д)
      • Возможные роли сотрудников в проектах (Менеджер, Разработчик, Тестировщик)
      • Приоритеты задач.
      • Категории (определяются в рамках проектов). Фактически — модули или подсистемы в рамках проекта для дополнительного разбиения задач
      • Flex-атрибуты — для задачи, проекта, пользователя и отчёта по времени можно добавить полей: Например «Расположение в офисе» для пользователя, или «контактное лицо со стороны клиента» по проекту.
      • Воркфлоу задач — связь статуса—типа задачи—роли—возможного перехода. Определяет кто, в каком состоянии(задачи(:), какой тип задачи в какой статус может переводить. Например: Заводить задачи может лишь «менеджер» и «представитель клиента», при чём «представитель клиента» лишь задачи типа «ошибка». Окончательно закрывать задачи может лишь «тестировщик» и т.д.
    • Мультипроектность. В отличие от популярного Trac, Redmine «из коробки» поддерживает мультипроектность. Кроме этого проекты могут быть вложенными. Сценарий использования, например, следующий: Проект «Название компании CRM» — проект для продукта и внедрений CRM системы. Вложенные проекты «Внедрение CRM в „Рогах“», «Внедрение CRM в „Копытах“».
    • Ролевая система прав. Роли, кроме участия в воркфлоу, могут иметь различные права в системе. Настраивается растановкой нескольких десятков галочек. Redmine может использоваться и как внешний портал для клиентов — нужно лишь настроить роль «Клиент».
    • Настраиваемый список задач. Безусловно, главное окно системы для менеджера — список задач. Он обеспечивает:
      • Настройку списка колонок по умолчанию (не нужна колонка — сняли галочку и её не видно).
      • Сортировку по колонкам
      • Фильтрацию. Фильтрация возможна по нескольким полям, например: «Ошибки 0го приоритета, назначенные на Василия Пупкина, относящиеся к модулю „Аутентификация и права доступа“ в статусах „Передана в тестирование“ или „Закрыта“». Созданные фильтры можно сохранить для себя (чтобы не настраивать лишний раз) или для всех участников проекта для быстрого доступа. Например — «открытые задачи 0го приоритета».
    • Уведомления по RSS или E-mail
      • Каждый список (в том числе фильтрованный) можно получать в виде CSV, PDF, RSS. Сценарий, например такой: Тестировщик создаёт себе фильтр «Задачи в статусе „Отправлено в тестирование“, подписывается на RSS» и всё — новые задачи будут ему падать автоматически, никаких тебе сложных или суррогатных вещей — получай новые и тестируй.
      • Уведомления по email. При изменении задач, оценки, добавления коментариев и т.д. система спамит в почту пользователям, которых это касается. Разработчикам не придётся писать «Я закрыл задачу». За него это напишет Redmine.

    • Интеграция с SCM (Системами управления кодом) — SVN, CVS, Git, Mercurial, Bazaar и Darcs
      • Настройка хранилища для каждого проекта.
      • Веб-интерфейс просмотра хранилища. Система создаёт веб-интерфейс для просмотра хранилища кода, истории изменений как в виде коммитов, так и для файлов, способна сравнивать версии (для небинарных файлов) и показывать diff'ы.
      • Отслеживание коммитов. Указав в комментарии к коммиту «id 333» (шаблон настраивается), разработчик может автоматически привязать коммит к задаче. При просмотре коммита можно будет перейти на описание задачи, а в карточке задачи будет отображаться список коммитов.
      • Автоматический переход в «закрытый» статус при коммите. Если же разработчик напишет «fixed 333» (шаблон настраивается) то коммит не просто привяжется к задаче, но и переведёт задачу в нужные статус — например в «Передано в тестирование» — ему не нужно будет лезть в Redmine.
    • Задачи. На карточке задачи кроме описанного выше отображаются история обсуждений (которые можно получать в виде RSS), списки связанных ревизий, история изменений версий, оценки и др. параметров.
    • CSS. Отдельного внимания заслуживает CSS-стили. Система поддерживает темы оформления (Они же скины), которые задаются с помощью CSS. Внутри CSS применён вполне здраво, я пока не нашёл того объекта, чьего оформления нельзя было бы сменить с помощью CSS. Изменения в нашем скине касаются в основном списка задач (это основное окно менеджера проектов. Сделано: Цветовая индикация статусов (Заблокирована — красный, тестируется — зелёный, закрыта — серый). Цветовая и яркостная индикация приоритетов — (0—самый яркий, 1—менее яркий, все после 2го — одинаковые). Увеличен шрифт в полях ввода описания задач — там удобней (:
    • Система плагинов. Redmine имеет систему плагинов, которые можно писать самостоятельно. Сейчас имеется 10 плагинов, хотя буквально месяц назад было 3 или 4.
    • Неплохой поиск
    • Формирование Roadmap. Показывается общая статистика, и имеется подробная страница для каждой версии.
    • Сводка по проекту. В сводке отображается общая обзорная статистика решения задач в проекте.
    • Персональная (персонализируемая) страница. На персональной странице отображаются назначенные задачи и некоторые другие блоки, которые пожелает видеть сотрудник: календарь, затраты времени, документы, новости, отслеживаемые задачи.


    Другие полезные вещи, которые у нас не используются (Пока)

    — Интеграция с Mylyn. Mylyn — плагин для Eclipse IDE, забирающий задачи разработчика из трекера и показывающий их прямо в IDE. Интеграция — громко сказано, но есть инструкции как их подружить вместе.
    — Новости — позволяют публиковать проектные новости, которые можно получать в виде RSS. Например — чтобы автоматически публиковать их на внешнем сайте компании в разделе продукта.
    Проектные вики — для ведения всего, что может быть полезно — документации, реквизитов доступа, и т.д. В trunk—версии вики существенно лучше, чем в последнем 0.7.3 релизе — есть иерархия страниц, «хлебные крошки» в навигации и т.д. Планирую перетащить с MoinMoin вики, которая используется сейчас, на в Redmine — всё в одном месте — лучше.
    Интеграция с LDAP. Redmine поддерживает интеграцию с контроллером домена по протоколу LDAP.
    Форумы. В рамках проектов для обсуждений можно создать форумы (вполне стандартная функциональность: обсуждения с уведомлениями на e-mail, RSS, подписка на разделы, темы). В trunk-версии вроде бы можно отвечать на уведомления и ответы будут размещены на форуме — можно сделать некий аналог рассылок.
    — Документы. Имеется хранилище документов — список html-файлов по авторам. Что-то типа плейн-списка вики-статей
    — Файлы. Хранилище файлов, отнесённых к версии продукта. Показывается список, и число загрузок — может использоваться для хранения выкаченных версий продуктов.
    — Самостоятельная регистрация пользователей. Redmine используется внутри компании, поэтому саморегистрация не имеет смысла.
    Активность. Лента, в которую публикуются изменения задач, коммиты, и т.д.
    Журнал изменений (Changelog). Некоторые типы задач (например «Функции» и «Ошибки») можно отметить как «заносимые в журнал изменений, changelog будет сформирован автоматически.
    — Автоматическое построение календаря и диаграммы Ганта.
    — Аватары пользователей из сервиса Gravatar

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

    Есть мелочи, которых не хватает и которые понятно как сделать, но руби-программистов у нас нет. Даже, с учётом того, что эти хотелки — около 20 строк кода :)
    — Есть желание, чтобы параметр «готовность» вычислялся автоматически исходя из оцененного и затраченного времени — очень лениво его заполнять руками.
    — Хочется более удобной формы комментариев к задаче — просто отдельной ссылкой, не через «обновить задачу»

    Более сложные вещи — хочется также:
    — Тонкую настройку уведомлений — сейчас система достаточно некисло спамит — уведомляет обо всех изменениях задач (комментарии, оценка, и прочее). Хотелось бы видеть настройку категорий спама.
    — Интеграции форумов с почтой достаточной, чтобы можно было отказаться от списков рассылок.
    — Профилей пользователей в рамках системы — чтобы там отображались отчёты по затраченному времени не в рамках проекта, а по всем, назначенные задачи (опять же по всем проектам) и прочее.

    Минусы Redmine

    Достаточно небольшое (по сравнению с тем же Trac) коммьюнити. Соответственно небольшое число плагинов (hack в терминологии Trac).
    Один (в основном) разработчик — из-за этого сравнительно низкая скорость развития (лично для нас это не очень важно, потому как наши потребности покрыты процентов на 90).

    Первая (и все последующие дозы) — бесплатно.

    Специально для Хабра.

    Комментарии 24

      0
      Если есть вопросы — задавайте, постараюсь ответить.
        0
        Мы используем Redmine, но «синтегрировать» не смогли. Инструкция на сайте кривая (вполне возможно), и не работотает пока синхронизация тикетов и ревизий (например, «закрыл тикет в такой-то ревизии»), только ручками. И работа с MyLin пока не нативная (нет реализации адаптера для Redmine, только generic adapter можно использовать)
        Вообщем, системка, что-надо под наши скромные задачи.
        0
        кстати, спасибо за статью. По Вашей ссылке зашел на страницу плагинов. Некоторые нашел полезными для себя.
        0
        Отличная статья. Обширно, но без воды, понятным языком и с поясняюшими ссылками.
        В общем примерный хабропост. Автору кармы, а сам пойду придумывать можно ли ето прикрутить к обыденной провайдерской реальности и хоть както угоманить тот зоопарк который творится в техподдержке и серверной.
          0
          Отлично. Т.к. голосовать уже поздно, добавил кармы. Спасибо.
            0
            Сейчас кстати приделываю к нему кастомную авторизацию.
              0
              Не в рейтинге статьи же цель :)
              0
              Ну раз уж вы предлагаете задавать вопросы, то воспользуюсь случаем:
              1. В упор не вижу как сменить у тикета статус…
              2. Не отображается пункт RoadMap (это «Оперативный план, я так пологаю») — www.redmine.org/projects/roadmap/redmine
              Что делать? ))
                0
                1. Нажать «Обновить» (Почти все изменения делаются через этот пункт) — там будет поле статуса. Если права на смену есть (смотрите настройки воркфлоу и ролей) — его можно будет сменить. Картинку надо?

                2. Да, оперативный план — это Родмап. Возможно у вас нет версий в проекте? Родмап без версий лично мне совсем непонятней.
                  0
                  Большое спасибо!
                  С тикетами сам разобрался. А вот с оперативным планом — нет. Что значит без версий? Это в «админке» где то надо включить или дистрибутив такой неполноценный?
                    0
                    Зайдите в свойства проекта, гляньте версии. Например 0.1, 0.2. Роадмап, вроде, должен появиться.
                0
                Насчет неудобности интерфейса XPlanner — кому как. Для меня, например, он показался очень даже легким в освоении. У нас была небольшая команда разработчиков (менее 10 человек), расположенная в рамках одного офиса, и XPlanner был очень эффективным средством. Уведомления там есть, да.

                >>Каждый вечер разработчик пишет в рассылку отчёт по задачам

                У нас каждый день в начале рабочего дня были пятиминутки, где каждый из разработчиков в том числе отчитывался о сделанном за предыдущий день

                >>При коммите в качестве комментария писался Id задач
                Мы делали в виде Id задачи + название задачи, так было вполне удобно

                Пул задач — мы тоже делали отдельную итерацию, из которой переносили. Насчет неудобства процесса не соглашусь — нажать move и пару раз щелкнуть мышью — в чем проблема?

                Ролей editor-а и viewer-а в xplanner-е нам хватало: PM после короткого обсуждения создавал/перебрасывал истории в новую итерацию, затем разработчики самостоятельно распределяли задачи в историях. И это вполне успешно работало.

                В итоге мне XPlanner кажется идеальным решением для маленьких команд, где не требуется активного обмена e-mail-ами и т п. Для большой команды, а также на стадии поддержки проекта — это уже далеко не лучшее решение.
                  0
                  Я руковожу небольшой компанией и ищу универсальную pm/crm систему. Подскажите, используете ли вы Redmine еще и в качестве helpdesk'а?
                    0
                    Используем.
                    У нас два редмайна — внутренний и внешний (внешний — чтобы выставить потом в DMZ, вообще легко можно обойтись одним). Там настройкой ролей можно запретить клиентам что-то править, а лишь писать новые задачи, например.
                    Следует понимать то, что вам нужно от helpdesk'а. Никаких серьёзных вещей, которые должны быть в системах Service Deskа в Redmine нет (эскалации, например). Если практики из ITIL вам не нужны, если процесс у вас не слишком жёсткий — то добро пожаловать, Redmine можно и нужно использовать.
                    0
                    redmine кушает 200 метров оперативки — это нормально? Это только после первого открытия…
                      0
                      У нас сейчас — 76, при всех работающих в нём. Надо смотреть настройки, я не специалист в RoR.
                        0
                        Можно узнать версию redmine и метод запуска? (passenger, mongrel)
                          0
                          0.9 бранч (месяца 1.5 назад чекаутили), монгрел, постргес, Linux.
                            0
                            чекнул 0.9, через монгрел запустил, (mysql как бд), еще больше кушать стал. Обидно, без напильника не заведешь нормально.
                              0
                              Никакого напильника не применял вообще, потому как не знаю напильники. Может быть особенности руби или соединения с БД? У нас используется PostgreSQL.
                                0
                                Вполне может быть. Постегры под рукой нет, но проверял на sqlite еще — эффект тот же. Работать то оно работает нормально, это да, но кушает будь здоров, уже до 400 разросся.
                                  0
                                  попробуйте поставить gem mysql:
                                  # gem install mysql
                                  Это должно ужать его в памяти, гем mysql работает эффективнее встроеного средства.
                                  использую redmine + mongrel, жрет 120 метров, но стабильно.
                                    0
                                    Дожал до 112 метров на sqlite, все ок =)

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

                    Самое читаемое