实战 A3:Codex 代码审查与质量保障——从 Pre-PR 自查到 Security 插件

实战教程系列 系列 A:A1 配置实战 | A2 日常开发 | A3 审查与质量 ← 本文 | A4 自动化 CI/CD | A5 大型项目


# Codex 代码审查 ## Pre-PR 自查 - /diff 确认改动 - /review 代码审查 - 手动 + 测试验证 ## Security 插件 - 自动扫描集成 - 误报处理策略 - OWASP Top 10 ## 多层次审查 - 轻量 onChange 审查 - 深度 Pre-PR 审查 - review_model 选择 ## 社区反馈 - 常见误报类型 - 优化 Prompt 技巧 - CI 集成模式

案例 1:Pre-PR 自查四步流程

完成开发后、创建 PR 前,跑这个四步自查:

Step 1: /diff       — 确认改动范围
Step 2: /review     — Codex 代码审查
Step 3: 手动检查     — 业务逻辑正确性
Step 4: 运行测试     — 完整测试套件

Pre-PR 自查完整流程

flowchart TB A[完成开发] --> B[diff 确认改动] B --> C{有意外文件?} C -->|是| D[回退改动] D --> B C -->|否| E[review 审查] E --> F[手动检查] F --> G[运行测试套件] G --> H{全部通过?} H -->|是| I[提交 PR] H -->|否| J[修复测试] J --> G

第一步:/diff——确认没有意外改动

/diff

在实际案例中,开发者经常在这一步发现:

  • 编辑器自动格式化引入的不相关文件改动
  • 调试代码(console.log)没删干净
  • 意外修改了其他模块的 import

第二步:/review——让 Codex 自己审查自己

/review

Codex 使用 review_model 配置的模型(通常是 gpt-5.5)审查当前改动。输出按优先级排列:

  • Critical:可能导致运行时错误的逻辑问题
  • High:性能问题、安全风险
  • Medium:代码风格、可读性
  • Low:建议性改进

实际案例:一个订单计算模块的审查发现:

[High] 订单总价计算可能溢出:total = price * quantity 未检查溢出
[Medium] calculateDiscount 函数缺少对负价格的防御
[Low] 建议提取 MAGIC_NUMBER_100 为常量

第三步:手动检查清单

Codex 的审查可以找到代码质量问题,但无法判断业务逻辑是否正确。手动确认:

  • 需求文档中的每个验收条件是否满足
  • UI 交互是否符合设计稿
  • 异常情况的处理是否符合产品预期

第四步:完整测试套件

让 Codex 运行测试并报告结果:

运行完整的测试套件:bun run test && bun run test:e2e
报告测试结果。如果有失败,分析原因并修复。

案例 2:Security 插件的实际使用

安装和配置

在插件商店搜索并安装 Codex Security。安装后连接 GitHub 组织,选择要扫描的仓库。

两种扫描模式

Diff 扫描(日常使用):

$codex-security:security-diff

只扫描当前未提交的改动,速度块,适合日常提交前使用。

仓库扫描(定期使用):

$codex-security:security-scan

全仓库扫描,包括威胁建模、发现挖掘、攻击路径分析。适合里程碑节点或安全审计。

实际发现案例

在一个 Go 后端项目中,Security 插件发现了:

[Validated] SQL Injection in services/orders/repository.go:45
  Attack Vector: 用户输入的 order_id 直接拼接到 SQL 查询中
  Reproduction: 已验证——输入 "1; DROP TABLE orders;--" 可执行任意 SQL
  Fix: 使用参数化查询替代字符串拼接

[Validated] Missing Auth Check in services/users/handler.go:102
  Attack Vector: DELETE /api/users/:id 未验证调用者是否有权删除该用户
  Fix: 添加 JWT 中间件验证调用者身份和权限

误报处理

Security 插件有两个阶段:

  1. 模型排名(可能包含误报)
  2. 自动验证(在干净容器中复现,验证通过的标记为 Validated)

对于标记为 Validated 的发现,基本可以信任。对于未验证的发现,手动确认。


案例 3:多层次的审查策略

将 Codex 的审查与人工审查结合,建立分层防线:

L1: Codex /review          → 自动,每次提交前
L2: Codex Security diff    → 自动,涉及数据处理的提交
L3: Codex Security scan    → 定期,每周或里程碑
L4: 人工 Code Review       → PR 阶段,聚焦架构和业务逻辑
L5:  Claude Code 交叉审查  → 关键模块,深度分析

这种分层策略确保:

  • 低成本的检查(L1-L2)每次都跑
  • 中等成本的检查(L3)定期跑
  • 高成本的检查(L4-L5)按需跑

社区常见问题

Q: /review 和 Security 插件的结果冲突怎么办?

A: Security 插件的 validated 发现优先——它在隔离容器中验证过。如果 /review 发现的问题 Security 没发现,手动确认后修复两者。

Q: Security 扫描太慢了怎么办?

A: 日常用 security-diff(只扫 diff),周末或里程碑用 security-scan(全仓库)。不要在每次提交时跑全仓库扫描。

Q: review_model 应该用什么模型?

A: 用你可用的最强推理模型。审查是一次性成本,值得用最好的模型。

下一章:A4: Codex 自动化与 CI/CD 集成

实操清单

  • 搭建 Pre-PR 自查四步流程:/diff/review → 手动检查 → 运行测试
  • config.toml 中配置 review_model 为最强推理模型
  • 安装 Codex Security 插件,连接 GitHub 仓库
  • 日常提交前运行 $codex-security:security-diff-scan
  • 里程碑节点运行 $codex-security:security-scan(全仓库扫描)
  • 对 Validated 发现创建修复 PR,对未验证发现手动确认
  • 建立多层审查防线:L1 自动 /review → L2 Security diff → L3 Security scan → L4 人工 → L5 交叉审查