Невозможный треугольник код-ревью

внешний интерфейс Google Открытый исходный код

Код-ревью — одно из важных средств обеспечения качества кода, но во многих R&D-командах оно часто не используется по разным причинам. Почему это так? В этой статье мы надеемся использовать очень простую точку зрения, чтобы понять это явление и, соответственно, дать некоторые идеи по оптимизации.

Вид

Наше мнение можно выразить одним предложением, т.Код-ревью очень сложно выполнить одновременно три условия: высокий охват, сильную привязку и низкие накладные расходы.. Что означают эти три условия?

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

аргумент

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

  • удовлетворить обоихвысокий охвата такжесильная связующая силаВремя проверки не поддается контролю: студенты, которые внесли нетривиальный код в некоторые проекты с открытым исходным кодом, которые подчеркивают качество кода, должны знать, что даже простое исправление, его PR может отклоняться от метода реализации и понимания сопровождающего. Открытое состояние в течение длительного времени (широко известное как несовместимое), не говоря уже о новых функциях и API.
  • удовлетворить обоихвысокий охвата такженизкие накладные расходыОбзор легко превратить в формальность: если в системе указано, что все коды должны быть проверены, а продвижение версии нельзя затягивать, то пока времени немного мало, обзор станет ежедневным ответом LGTM. (Выгляди хорошо для меня).
  • удовлетворить обоихсильная связующая силаа такженизкие накладные расходыТрудно охватить всю кодовую базу: обычно в выпуске есть несколько совершенно новых функций. Если рецензенты не участвуют в разработке новой функции, то полностью просмотреть тысячи строк кода для новой функции примерно так же сложно, как открыть проект с открытым исходным кодом, который вы не читали, и сразу указать в нем на ошибки. .

компромисс

Если выше, три не могут иметь оба, как мы должны сбалансировать это? В нынешней среде, быстрый итерационный характер большинства программных проектов и нашего желания «выйти с работы рано»низкие накладные расходыЭто условие часто трудно пожертвовать. затем впокрытиеа такжесвязующая силаКак выбрать между? Вернемся к теме «что делает код-ревью». Мы знаем, что проверка кода может:

  • Уменьшить ловушки в коде
  • Улучшение качества кода для рецензентов
  • Ознакомьте членов команды с кодом

Если сам обзор бесполезен, то вышеперечисленные преимущества, естественно, просто пустая болтовня. Поэтому нам пока трудно сдатьсясвязующая силатребования. Итак, как улучшить это времяпокрытиеэта проблема?这里给出两点不成熟的想法供参考。

Во-первых, нас может вдохновить опыт команды Google Subversion: они рассматривают проверку кода как часть команды, наряду с обменом мгновенными сообщениями, собраниями и документацией.способ общения, а не процесс. Таким образом, методы коммуникации могут учиться друг у друга, чтобы повысить эффективность команды. Фактически,Проблема «нечитаемости» при просмотре новых функций может быть облегчена документацией на этапе проектирования.: Документация и рецензирование — это тоже общение «один ко многим», и очевидно, что обсуждать решение в документе проще, чем обсуждать детали напрямую. Совершенно новая функция, разработка которой занимает около 2 недель.问题定义 → 基本思路 → 实现概述 → 改进优化Длина документа, написанного структурированным образом, должна составлять всего около тысячи слов. Время, необходимое для написания документа, не должно быть в том же порядке, что и время разработки. Это также может сэкономить время, чтобы сообщить об этой функции другим учащимся. лицом к лицу, когда документ отсутствует (конечно, также требуется документация для требований, с которыми можно легко справиться, что немного громоздко).

Кроме того,Проблема охвата проверки кода также может быть оптимизирована с помощью определенных соглашений о представлении.. переведено авторомconventional-commitsВ спецификации к каждому коммиту можно получить доступ через файл видаfix / feat / chore / refactorРазличные типы коммитов можно различать, чтобы получить детализированную удобочитаемую историю коммитов. Итак, при гранулярности обзора запроса на включение / запроса на слияние, почему спецификация не может применяться одинаково? Если так различать виды PR, то тут простор для фантазии:

  • Ресурсы обзора могут быть сначала сосредоточены наrefactorа такжеperfНа PR-обзоре.
  • дляfeatСуществует большое количество новых кодовых PR, просто предоставляют документ, который гарантирует, что члены команды понимают, что нужно только для обеспечения приемлемой схеме, гарантированного неявным соглашением стиля кода, именования, пути и т. Д.
  • Мы можем выборочно игнорировать подпрограммы, которых может быть много на этапе тестирования.fixАналогичен PR, но дополнен после выхода версииhotfixПиар-подобный, все еще нуждается в проверке.
  • без ущерба для качества кодаchoreа такжеdocПиар-подобный обзор можно игнорировать.

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

P.S. В нашей базовой команде Xiamen front-end tool (редактор) не хватает людей, заинтересованных в тыканииздесьУзнайте подробности га.