拉取请求审查

发布: (2025年12月2日 GMT+8 06:16)
6 min read
原文: Dev.to

Source: Dev.to

你应该进行 PR 评审吗?

当然。

两层级评审流程

Software Engineering at Google 中,他们描述了一个两层级的评审流程:

  1. 语言评审 – 关注语言的使用,确保一致性和共享语义。
  2. 功能实现评审 – 检查功能的正确性和设计。

有时同一个人可以兼顾两个层级(例如,同时是 Python 审批组成员的工程师)。

目标是让代码库中的语言使用保持一致,补充自动化的 lint 工具。

人工评审的挑战

一位 Google 工程师曾报告说,一个 PR 被卡了整整一个月。设计阶段提出的反馈基本被忽视,但在 PR 提交时,许多评审者却给出了非常具体的意见。这凸显了时间点和期望会产生摩擦。

自动化人类难以处理的部分

Lint、Prettify 等

如果你使用 GitHub,可以通过 GitHub Actions 设置 lint、格式化(如 Prettier)以及类型检查(针对动态类型语言)。半天的工作就足以:

  • 添加这些 Action,
  • 将它们设为必需检查,
  • 保护主分支。

你还可以采用一套风格指南来处理需要判断的决定(例如,在 Python 中何时避免列表推导式,或何时即使函数技术上只做“一件事”也要拆分)。将这些约定文档化可以避免在每个 PR 中重复讨论。

测试与测试覆盖率

为 PR 添加以下检查:

  • 测试执行 – PR 必须通过所有测试。
  • 覆盖率指标 – 追踪代码库被测试覆盖的程度。

最初,只在测试失败时阻止 PR,并收集覆盖率数据。随后,引入一个低覆盖率阈值并逐步提升。此类自动化减少了对显而易见的正确性问题进行人工审查的需求。

手动评审不该是什么

在许多组织中,缺乏自动化工具会导致出现类似 “分支受保护,必须有人批准 PR” 的规则。搭建自动化通常只需几天,但团队可能因为不熟悉或想快速交付而跳过。用人工关卡取代自动化恰恰是降低交付速度的做法。

手动评审 不应 成为所有本可以自动化的检查的“兜底”。只要可以自动化,就去实现;代码贡献是应用的血液,所以应优先考虑提升流畅性的自动化。

手动评审应关注的内容

手动评审属于 无形 的范畴——它是为作者提供 思考伙伴 的机会。正如 Simon(前同事)所说:

“你在提供上下文、经验和建议,帮助作者得到一个优秀的答案……这不是关于正确性,而是引导作者考虑他们可能未曾想到的权衡,同时赋予他们最终决定的权力。”

这与 Dawna Markova 在 Collaborative Intelligence 中提出的 “思考伙伴” 概念相呼应。

给评审者的引导性问题

  • 变更是否体现了预期的权衡?
  • 代码是否易读、易维护,并对未来的贡献者友好?
  • 它是否在复杂度与正确性之间取得了恰当的平衡?

这些讨论是 交流,而非正式的变更请求。它们帮助作者确认或重新评估自己的决定。

当评审者带来历史背景——对子系统的了解、用户反馈或支持经验——评审就会成为一次强有力的知识共享时刻。相反,缺乏业务背景的评审者可能会揭示隐藏的假设(例如 “我们一直都是这么做的”),促使作者重新思考。

更广泛的影响

如果审慎进行,PR 评审可以成为:

  • 知识共享的渠道,
  • 整个组织技能提升的手段,
  • 构建关系和决策能力的练习。

它们从守门人转变为协作改进。你的经验可能不同,这本身就很有价值——欢迎分享你的观点。关键是把 PR 评审视为 有意图、具战略性的实践,而不是事后才想到的事。

Back to Blog

相关文章

阅读更多 »

大多数技术问题都是人际问题

我曾在一家公司的工作,该公司背负着巨大的技术债务——数百万行代码,没有单元测试,基于已经远远超出其生命周期的框架……

从开源维护者那里得到 NO

Forem 标志 https://media2.dev.to/dynamic/image/width=65,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%...