实战 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 插件有两个阶段:
- 模型排名(可能包含误报)
- 自动验证(在干净容器中复现,验证通过的标记为 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: 用你可用的最强推理模型。审查是一次性成本,值得用最好的模型。
实操清单
- 搭建 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 交叉审查