Вместо предисловия
И снова доброго времени суток!Продолжаю цикл заметок об основах управления конфигурацией программных средств. Чтобы долго не пересказывать краткое содержание предыдущих двух серий, предлагаю ссылки на них:
- Цикл статей по основам Software Configuration Management. О том, что такое СМ, каковы его задачи и за что отвечает в рамках проекта CM-инженер.
- Software Configuration Management // Конфигурации и baselines. О том, что такое рабочий продукт в терминах SCM, что такое конфигурация, как она стабилизируется, а так же что такое базовые конфигурации — baselines.
Отслеживание запросов на изменение
Для начала, как вообще возникают изменения на проекте? Вариантов всего несколько:
- создается новая функциональность продукта;
- функциональность или внутренняя структура изменяются в ходе плановых доработок (например, рефакторинга);
- исправляются найденные ошибки.
Изменяться может любой рабочий продукт – это могут быть как исходные коды, так и требования, тесты – в общем, всё то, что перечислялось в предыдущих материалах. Важно, что это всё изменяется и надо производимые изменения контролировать.
В зависимости от вида и продукта изменения различается и источник его запроса. В случае новой функциональности это будет, скорее всего, один из менеджеров или конечный пользователь. При рефакторинге – технический руководитель или разработчик проекта. При исправлении ошибки – любой пользователь системы, но, как правило, это тестер.
Итак, есть потребность в изменениях, и есть тот, кто эту потребность озвучит. Остается начать движение. Началом движения является подача запроса на изменение. Запрос на изменение – это предложение об усовершенствовании продукта, выраженное в виде записи в системе отслеживания запросов на изменения. В англоязычных источниках такие запросы называются change request (CR). Встречается также термин problem or change request (PCR). В дальнейшем будем использовать аббревиатуру CR (читается «сиар»).
В свою очередь, система отслеживания запросов на изменения – это программная среда, позволяющая производить учет предложений на изменения продукта и управление ответственностью за них. Ключевые слова во всей цепочке терминов – запрос, изменение, и отслеживание ответственности. В русскоязычных источниках часто используется термин «система отслеживания ошибок». В англоязычной литературе встречаются change request management system, bugtracking system, issue tracking system.
Как правило, хранилищем в подобных системах выступает БД, где один CR – это одна запись (чаще — связанный набор записей) в ней. CR после заведения имеет следующую обязательную информацию:
- кто завел запись (submitter);
- краткое название записи (subject);
- использованная версия изменяемой системы;
- подробное описание запроса или проблемы.
- описание ожидаемого поведения системы (для ошибок);
- конфигурация ПО и аппаратной части;
- фрагменты журнала работы системы («логи»).
- конечный автомат (finite state-machine, или машина состояний), где каждое состояние характеризуется своим набором полей;
- запись, у которой по ходу работы меняют содержимое имеющихся полей и к которой добавляют комментарии.
Посмотрим на типовой сценарий. Запись заведена, нужно начинать работать. Однако никакие изменения не должны вноситься бесконтрольно. Поэтому перед началом работы нужно получить одобрение менеджмента, который отвечает за функциональность, затронутую запросом на изменение. Роль менеджмента выполняет Configuration Control Board (группа контроля конфигурации) – группа, обладающая в рамках проекта правами на управление изменениями в рамках проекта. Также иногда используется термин Change Control Board и сокращение CCB.
Простой сценарий
Для дальнейшей работы возьмем систему отслеживания в виде машины состояний – так будет более наглядно. Набор состояний на схеме 1 – минимально необходимый, он может быть расширен до большего размера и разбит на нескольких шаблонов жизненных циклов. Этот набор возьмем для дальнейшего описания.
![Схема 1. Жизненный цикл запроса на изменение](https://habrastorage.org/getpro/megamozg/post_images/b6a/057/86e/b6a05786e5b5794598f7a8d5efc9c6c1.png)
Схема 1. Жизненный цикл запроса на изменение
Первое состояние, в которое попадает любая запись, начальное. На приложенной схеме это New. На этом этапе создатель записи вносит все начальные данные, требуемые проектным процессом разработки. Далее CR попадает в поле зрения CCB. Оно принимает решение, кому из разработчиков отдать проблему для решения.
Для того, что отдать CR в работу, запись переводится в следующее состояние – Assigned («приписано к ответственному»). Одновременно запись «назначается» на разработчика – т.е. он становится за неё ответственным.
Однако приписать задачу кому-то – ещё не означает, что задача сразу же начнет решаться. На одного разработчика ведь может быть назначено несколько задач – одна важней другой и все надо сделать ещё вчера. Поэтому когда разработчик на самом деле начинает заниматься задачей – он переводит запись в состояние Opened («работа начата»). CCB, отслеживающее работу, видит, что задача взята в оборот. Сама задача при этом, как правило, остается «приписанной» к разработчику.
По ходу работы ответственные могут меняться, в зависимости от того, кто владеет кодом, который влияет на описанное в CR поведение. Переназначения делает CCB. Кроме того, может выясниться, что проблема уже кем-то найдена и на неё был заведен свой CR. В этом случае проблема дуплицируется, т.е. закрывается и в соответствующем поле добавляется номере записи, которая была заведена ранее. С этого момента запись считается закрытой. Может также выясниться, что описанная проблема не является ошибкой в работе (т.е. это WAD, works as designed) или же запрошенная функциональность не может быть реализована в силу разных причин. В этом случае запись терминируется, т.е. закрывается с комментариями о том, почему работа над проблемой продолжена не будет.
Если же всё-таки работа продолжается, то рано или поздно она заканчивается – разработчик внёс необходимые изменения и готов отдать их на дальнейшую интеграцию. В этот момент он переводит запись в состояние Resolved («исправлено» или «решение найдено»). Этим шагом назначенный для решения снимает с себя ответственность и показывает те изменения, которые, по его мнению, должны решить задачу. В этом состоянии CCB вновь должна назначить ответственного. Он проверит, что задача, поставленная в CR, действительно решена правильно и всё работает как минимум не хуже, чем было до её решения. Поэтому на этом этапе ответственным назначается или кто-то из тестеров, или же сам автор записи. После назначения проверяющий («верификатор», «verifier»), которым зачастую является автор запроса, начинает проверку. Результатом является 2 исхода:
- перевод в начальное состояние, если задача не решена;
- перевод в состояние Closed («закрыто»), если исправлена ошибка или работает новая функциональность, описанная в запросе.
Об реализации и тонкой настройке
Кстати, стоит добавить, что системы отслеживания запросов на изменения также используются как системы назначения и отслеживания задач на проекте. Ведь любая задача, возникающая на проекте, требует отслеживания со стороны руководства. Да и результат большинства задач – это, опять же, какие-то изменения. Поэтому логично для всех целей использовать одну систему. Иногда системы отслеживания задач ещё называют общим термином help desk. Однако, смысл от этого неменяется — я их также причисляю к системам отслеживания запросов на изменение.
Если предложенный жизненный цикл не подходит по каким-то причинам, большинство систем отслеживания позволяют этот цикл модифицировать и создавать несколько его видов – столько, сколько нужно для решения повседневных задач. Кстати, именно поэтому часто создают отдельные шаблоны для отслеживания разработки новой функциональности и для отслеживания процесса исправления ошибок. Просто потому, что при разработке новых возможностей требуется ещё и разработка требований, дизайна, тестов – и для этого вводятся промежуточные состояния или поля для перечисленных целей.
Моё мнение — надо выбирать системы, позволяющие гибко задавать цикл работ. Хотя бы для того, чтобы заложенная когда-то кем-то неведомым схема работы не стала для вашего проекта догмой. Со временем за её рамки трудно выйти из-за ограничений инструментария и проекту начинает становиться «тесно». Так что гибкая настройка — наш выбор!
Реализация систем отслеживание запросов на изменения – едва ли не любимейшее занятие программистов всего мира. Кто-то считает, что его система-то уж точно затмит все имеющиеся. Кто-то уверен, что в остальных чего-то не хватает из того, что надо ему. А кто-то просто делает это ради собственного удовольствия. Каждому – своё. Если кто не захочет изобретать своё двухколесное средство передвижения, может ознакомиться с существующим велопарком. Ну и подобрать бицикл, что лучше всего подходит для его задачи. К слову, автору довелось принять некоторое участие в разработке упомянутого в приведенном списке eTraxis. Его и порекомендую, пользуясь случаем.
А как же CM-инженеры?
Запросы на изменение отслеживать научились. Какова роль CM-инженеров проекта? На них лежит ответственность за:
- внедрение систем отслеживания в процесс разработки;
- разработку политик использования этих систем;
- отслеживание выполнения установленных правил.
Немало копий ломается над первой задачей — ведь систем много, и надо выбрать оптимальную. Есть у меня пара советов на этот случай, соответствующий материал даже написан… однако опубликован он будет чуть позже, следите за обновлениями :)
Ссылки для расширения кругозора
- http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_systems — сравнение систем учета запросов на изменение.
- http://www.etraxis.org/ — система отслеживания запросов, в создании которой автор принимал активное участие.
- Также смотрите ссылки в предыдущих статьях, ссылки на них присутствуют в начале заметки.
В следующей части будет расказано о, пожалуй, самом важном проявлении практик SCM — контроле версий. Кстати, там снова будет затронуто отслеживание запросов на изменения — без него никуда.
Так что, продолжение следует.