开发提效

GitHub Copilot 代码审查与重构技巧

文章目录 / 点击展开

GitHub Copilot 适合把“读懂变更、列出风险、补充测试”变成结构化流程,但不应替代评审者做最终判断。可靠做法是先限定审查范围,再要求它引用具体文件和代码证据,最后用测试验证建议。

审查前先准备上下文

不要一上来让 Copilot “审查整个仓库”。先提供本次 PR 的目标、变更文件、不可改变的行为和验证命令。大型改动应按模块分批审查。

建议准备以下信息:

  • 需求或缺陷说明,以及明确的验收标准。
  • PR diff、受影响的入口和数据结构。
  • 项目的测试、格式化和静态检查命令。
  • 安全、兼容性、性能等特殊约束。

Copilot 的官方能力和支持范围会变化,启用前可核对 GitHub Copilot 文档。涉及私有代码时,还要确认组织策略和数据使用设置。

第一步:让 Copilot 解释变更

先验证它是否理解代码,而不是直接索要修改方案。

请根据当前 diff 说明:
1. 这次变更解决什么问题;
2. 数据从哪里进入、经过哪些函数、在哪里输出;
3. 哪些现有行为可能受到影响;
4. 哪些判断仍缺少上下文。
每条结论必须引用文件名和函数名,不要猜测未展示的实现。

如果解释与需求不一致,先补充上下文。模型连变更目的都没有理解时,后续风险判断通常不可靠。

第二步:按风险类别审查

把泛泛的“有什么问题”拆成四类:正确性、安全性、性能和可维护性。要求只报告有代码证据的问题,并区分“必须修复”和“建议改进”。

审查当前变更,只报告能够从代码中证明的问题。
按以下格式输出:严重程度、文件与函数、触发条件、影响、最小修复、验证方法。
优先检查:空值与边界、权限绕过、错误处理、并发状态、资源释放、查询次数和兼容性。
不要把个人风格偏好当作缺陷。

对高风险发现应回到代码中复核触发路径。Copilot 可能把理论风险当成真实问题,也可能忽略框架已经提供的保护。

第三步:先补回归测试

发现缺陷后,不要立即接受大段重构。先让 Copilot提出能稳定复现问题的最小测试,再确认测试在修复前失败、修复后通过。

测试至少覆盖正常输入、边界值、异常输入和历史回归场景。生成的断言必须验证业务结果,不能只断言函数“没有抛错”。

第四步:执行小步重构

重构提示中明确“保持外部行为不变”,并限制每次只处理一个问题。适合交给 Copilot 的任务包括提取重复逻辑、缩小函数职责、补充类型约束和统一错误映射。

每一步都运行原有测试,并查看 diff 是否包含无关格式化、命名变化或依赖升级。需要大范围架构调整时,应先写迁移计划,而不是在同一个 PR 中边生成边试错。

合并前检查清单

  • Copilot 的结论是否引用了具体代码位置。
  • 所有高风险问题是否能用测试或复现步骤证明。
  • 是否检查了权限、敏感信息和错误日志。
  • 新测试是否包含有效断言,而非只追求覆盖率。
  • 重构是否保持接口、数据格式和错误行为兼容。
  • diff 中是否出现与目标无关的改动。
  • CI、格式化、类型检查和测试是否全部通过。

常见问题

Copilot 能自动批准 PR 吗

不建议。它可以提供第二视角,但业务上下文、风险接受和发布责任仍应由人承担。高风险仓库还应要求至少一名独立评审者。

为什么要先解释变更再审查

解释阶段可以暴露上下文缺失和理解偏差。直接让模型找问题,容易得到与真实目标无关的通用建议。

重构建议很多时应该一次完成吗

不要。先处理有明确收益且能验证的改动,保持提交小、测试完整、可以单独回滚。

可以结合 Cursor 结对编程工作流 完成代码修改,再用 ChatGPT 开发工作流 做独立方案复核。