Все репозитории кода должны использовать шаблоны запросов на слияние.
Моя цель в этой статье - убедить вас в истинности приведенного выше утверждения. Давайте копаться!
Профессиональный мир сложен
Начнем с небольшого контекста. Профессиональный мир сложен. Взгляните практически на любую отрасль, и вы обнаружите в ней сложность. Рассмотрим, например, медицину, авиацию и строительство. Эти поля могут показаться совершенно разными, но у них также много общего.
Во-первых, каждое поле содержит слишком много информации, чтобы ее мог знать любой человек. Врачи специализируются и сверхспециализируются, чтобы занять определенную нишу. Врач может быть кардиохирургом, педиатром или врачом по лечению ушей, носа и горла. Пилоты самолетов могут быть знакомы с элементами управления всего лишь на паре моделей самолетов, хотя в мире существуют тысячи различных моделей самолетов. В строительстве есть архитекторы, инженеры-строители, сантехники, плотники, специалисты по отоплению и кондиционированию воздуха, электрики и многие другие. Ни один человек не знает всего, что нужно знать о своей обширной сфере деятельности.
Во-вторых, каждое поле требует срочной работы. Хирургу, возможно, потребуется отреагировать на уравновешенного пациента во время неудачной операции. Пилоту может потребоваться быстро отреагировать на аварийное предупреждение или мигающий сигнал на его приборной панели. А подрядчики, работающие над крупным проектом, должны координировать работу множества разных команд, чтобы гарантировать, что нужные вещи будут выполнены в нужное время.
В-третьих, каждая область требует определенной степени подготовки и навыков. Чтобы овладеть любой из этих профессий, нужно время.
Четвертая общность
Есть также четвертая общая черта каждого из этих полей: все они используют контрольные списки.
Почему? Потому что они работают.
Давайте посмотрим на пример в каждом поле.
Авиация: модель 299 Боинга
В 1935 г. проводились соревнования по военно-летной деятельности. Исход конкурса определил, какие производители самолетов выиграют крупные государственные контракты, и бомбардировщик Boeing Model 299 получил преимущество. Он был больше и быстрее, чем остальные его конкуренты, и был очевидным выбором.
Однако в тот день случилась катастрофа. Пилот Model 299 разбился, в результате чего погибли двое из пяти членов экипажа. Репортеры сочли эту модель «слишком большим самолетом для одного человека». Это было слишком сложно для человека.
В ответ Boeing составил контрольный список для пилота. Этот контрольный список содержал невероятно простые пункты, например, убедиться, что тормоза отпущены, а двери заперты. Но с помощью этого простого контрольного списка пилотам удалось пролететь на Boeing Model 299 в общей сложности 1,8 миллиона миль без единой аварии (Манифест контрольного списка, страницы 32–34).
Контрольные списки работают.
Медицина: Отделения интенсивной терапии
Давайте посмотрим на другой пример. В 2001 году исследователи из больницы Джона Хопкинса обнаружили, что простое включение медсестер и врачей в отделениях интенсивной терапии (ОИТ), создающих свои собственные контрольные списки того, что, по их мнению, необходимо делать каждый день, «улучшило последовательность оказания помощи до такой степени, что средняя продолжительность лечения. количество пациентов, остающихся в отделении интенсивной терапии, сократилось вдвое »(Манифест контрольного списка, стр. 39).
Одна из наиболее частых причин заражения пациентов в отделении интенсивной терапии возникает при инфицировании их центральной линии, что может произойти, если центральная линия не размещена или о ней не заботятся должным образом. В 2006 году было опубликовано исследование, которое показало, что в отделениях интенсивной терапии в Мичигане, которые следовали контрольному списку центральной линии, уровень инфицирования центральной линии снизился на 66% в течение первых трех месяцев после введения контрольного списка (Манифест контрольного списка, стр. 44).
Контрольные списки работают.
Строительство: конфликты планов строительства
Давайте теперь взглянем на последний пример из области строительства. Руководителям проектов во время строительства приходится спорить с разными сложностями: как убедиться, что нужные дела делают нужные люди в нужное время? И как вы справляетесь с конфликтами между планами строительства, представленными каждой группой подрядчиков?
У менеджеров строительных проектов есть программное обеспечение для обнаружения конфликтов в различных строительных планах. Если светильник предполагается разместить там, где должна идти и опорная балка, придется это доработать. Они используют программное обеспечение с контрольными списками, чтобы убедиться, что нужные люди говорят, все уведомлены и планы корректируются, чтобы все остались довольны.
С помощью этого программного обеспечения и этих контрольных списков можно строить небоскребы.
Контрольные списки работают.
Применение этих уроков в области разработки программного обеспечения
Итак, как мы можем применить эти уроки к нашей собственной сфере деятельности? Что ж, оказывается, инженеры-программисты сталкиваются с множеством тех же проблем, с которыми сталкиваются врачи, пилоты и строительные бригады.
Мы также работаем в области, в которой слишком много информации, которую может знать любой человек. Мы специализируемся на интерфейсных инженерах, бэкэнд-инженерах и инженерах по надежности сайта. Даже в этих областях мы специализируемся на супер-специализации. Один инженер может хорошо разбираться в React, но быть новичком в Angular. Другой инженер мог бы отлично улучшить общесистемную производительность, но очень мало знал о веб-доступности.
Мы также занимаемся срочной работой. В большинстве случаев это может быть не вопросом жизни и смерти, но у нас есть сроки, которые необходимо соблюдать, и контракты с клиентами, которые необходимо соблюдать.
Наконец, наша работа требует обучения и навыков. Не каждый инженер поступает в университет, чтобы получить степень в области информатики, но каждый инженер тратит годы на обучение и совершенствование своего дела.
Таким образом, похоже, что нам тоже может быть полезно использовать контрольные списки.
Шаблоны мерж-реквестов
Шаблоны запросов на слияние (MR) (или шаблоны запросов на вытягивание, если вы используете GitHub), представляют собой форму контрольного списка. Шаблоны MR предлагают инженерам предоставить соответствующие данные для MR.
Шаблоны MR гарантируют, что мелочи не будут упущены. Подобно тому, как контрольные списки пилотов обеспечивают отпускание тормозов и запирание дверей, шаблоны MR гарантируют, что модульные тесты написаны и что другие простые, но важные элементы не забыты.
Шаблоны MR помогают облегчить общение и сделать процесс проверки кода более эффективным за счет его стандартизации.
Ниже показано, как может выглядеть пример шаблона MR:
Вы заметите, что шаблон MR начинается с собственного контрольного списка. Мы хотим убедиться, что инженер, отправляющий код, написал модульные тесты и сам проверил код, прежде чем запрашивать проверку кода. Это конкретное репо содержит код внешнего интерфейса, поэтому многие из следующих пунктов касаются проблем внешнего интерфейса. Мы хотим обеспечить кроссбраузерную совместимость изменений, доступность кода и перевод любого пользовательского текста с помощью нашей службы локализации. Наконец, мы добавляем напоминание о необходимости добавлять или обновлять документацию.
Затем мы просим разработчика включить краткое описание того, какие изменения вносятся в этот MR. Это помогает обеспечить контекст для инженера, просматривающего код.
Затем у нас есть раздел, в котором можно включить ссылки на заявку в ваш инструмент отслеживания заявок, например Jira или Workfront. Таким образом, любой, кто просматривает этот MR, может взглянуть на исходный запрос на работу, чтобы увидеть еще больше контекста или предыстории.
После этого идет раздел с планом тестирования, который включает шаги, как кто-то может вручную проверить изменения, которые вы вносите. Другими словами, это предоставляет очень простой способ проверить, выполняет ли код то, что, по словам разработчика, должен делать.
Наконец, мы включаем раздел для снимков экрана или видео, чтобы продемонстрировать код в действии, если это будет актуально или полезно для MR.
Примеры сценариев, в которых полезны шаблоны мерж-реквестов
Теперь, если кажется, что для каждого MR требуется много информации, будьте уверены, что заполнение займет всего около двух минут. Давайте посмотрим на некоторые преимущества использования шаблона MR.
Когда вы просматриваете код, нет ничего более разочаровывающего для рецензента, чем когда вам дают MR без абсолютно никакого контекста. Что пытается решить этот код? Это исправляет ошибку? Добавляете новую функцию? Почему это было написано вообще? Шаблоны MR помогают обеспечить столь необходимый контекст.
Что еще более важно, шаблоны MR помогают установить стандарт базовой производительности. Когда вы включаете элемент «Я написал модульные тесты» в свой шаблон MR, это устанавливает ожидание, что все MR должны иметь модульные тесты. Он также служит напоминанием о том, что нужно проверить важные элементы. Вы удивитесь, как часто даже опытные профессионалы пропускают рутинные дела.
В качестве второго сценария подумайте о том, когда вы, как разработчик, работаете над исправлением ошибки где-нибудь в своем приложении. Эта часть кода, возможно, не менялась месяцами или годами, и у вас может не быть особого контекста. Если вы похожи на меня, первое, что вы можете сделать, это открыть в своей среде IDE инструмент git blame, чтобы узнать, когда и кем в последний раз были внесены изменения. Затем вы можете найти прошлые MR и посмотреть, какие изменения были внесены и почему. Представьте себе разочарование, когда вы поднимаете старый MR, а контекст не предоставляется! С другой стороны, представьте, что вы цените красиво заполненный шаблон MR, который дает вам именно ту историю и контекст, которые вы искали.
Мое приглашение к вам
На этом, думаю, я закончу свою позицию. Но прежде чем мы подведем итоги, я хотел бы оставить вас с приглашением: добавьте шаблон запроса на слияние в свои репозитории на работе. Вы будете удивлены, насколько они действительно полезны.
Точное содержание вашего шаблона MR может отличаться от того, что было представлено здесь. Не стесняйтесь адаптировать этот пример к своим потребностям. Просто помните, что ваш MR-шаблон должен быть коротким, точным и практичным.
Решение возможных проблем
Наконец, если вы чувствуете, что шаблоны МРТ не стоят вашего времени, помните, что даже некоторые хирурги обижены предложением о том, что им нужен контрольный список, чтобы хорошо выполнять свою работу. Но оказывается, что да. И все мы тоже.
Заключение
Контрольные списки работают. Шаблоны мерж-реквестов работают. Они помогают создать основу для более высокой производительности и помогут поднять качество вашей кодовой базы. В конце концов, просто отметить галочкой поля - это не конечная цель, а принятие культуры командной работы и дисциплины.