← 中文资源

简体中文版本

Pull Request 评审工作流

让 PR 小而单一,公平分摊评审负载,落实响应时限,并把阻断性发现与建议分开。

阅读英文原文

目标

评审退化有三个根因:diff 大到装不进脑子、负载集中在一个人身上、每条评论都像否决权。限制尺寸、轮转分摊、显式区分阻断与建议——修的是根因而不是症状。标记制度还是一种善意:作者能廉价地采纳建议、专门地辩论阻断点。

步骤要点

  1. 约束 PR 尺寸与目的:设软上限(如 400 行改动)与单一目的规则,并给真正的大变更提供文档化路径(堆叠 PR 或特性切片)。
  2. 公平分配评审:轮转加负载均衡而不是靠自愿,跟踪每人每周评审数防止资深者包揽一切。
  3. 落实首响时限:约定一个工作日内首次响应,超时进团队指标而非针对个人升级。
  4. 区分阻断与建议:评审者必须标记评论类型,合并条件只看阻断集,建议永不设卡。
  5. 度量评审回路:跟踪首响中位数、复审轮数与超龄 PR,每月按痛点调一个流程变量。

排错提示

评审总落在同一人头上是轮转缺失,把每人的周评审数做成可见指标;每条评论都引发辩论是没打类型标记,blocking 与 suggestion 必须显式标注;大 PR 被草草扫过就是该切片了,堆叠 PR 是沟通选择不是功能牺牲。

适用边界

尺寸限制对机械性重构(批量改名、格式化)应豁免并配自动验证;评审 SLA 受团队时区与值班安排影响,跨时区团队要放宽首响窗口。

代码示例

policy:
  soft limit: 400 changed lines (median target: 180)
  large change: stacked PRs (base <- feature-slice-1
                <- feature-slice-2)
  rotation: round-robin, load-balanced
    (reviewer A: 11, B: 9, C: 10 this week)
  SLA: first response within 1 business day
  comment types: [blocking] / suggestion:
    "blocking: this swallows the error"
    "suggestion: could name this variable `attempts`"

metrics (monthly):
  median first response: 4.1h (target: 1 day)  OK
  median re-review rounds: 1.6
  PRs aging > 3 days: 2 (was 14)