代码审查哨兵

Polar Sponsor
爱发电 赞助
.NET 9.0

代码审查哨兵——在代码合并前执行五维度质量审查,以"高级工程师是否会批准"为标准把关每次提交。适用于PR审查、变更评估、质量门禁、代码健康度审计、新人指导等场景。正确性/可维护性/安全性/性能/可测试性全面覆盖,支持严重度标签与拆分策略,让代码腐化止于合并前。触发关键词:代码审查、代码review、合并前审查、代码质量、PR审查、五维审查、代码健康度、变更尺寸、代码拆分、质量门禁

代码审查哨兵

功能概述

代码审查哨兵是一项面向实际任务的技能,主要用于在代码合并前执行结构化质量审查;以"高级工程师是否会批准这次合并"为标准,从五个维度全面把关;

核心要点

  • 变更概览与尺寸评估 : git diff 获取变更 + 统计规模 + 尺寸分级(理想 ~100 行/可接受 100-300/需拆分 >300)+ 变更分类;
  • 五维度审查 :正确性(逻辑/边界/错误处理/回归)+ 可维护性(命名/职责/重复/复杂度)+ 安全性(注入/权限。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

代码审查哨兵

在代码合并前执行结构化质量审查。以"高级工程师是否会批准这次合并"为标准,从五个维度全面把关。

核心能力

  • 变更概览与尺寸评估:git diff 获取变更 + 统计规模 + 尺寸分级(理想 ~100 行/可接受 100-300/需拆分 >300)+ 变更分类
  • 五维度审查:正确性(逻辑/边界/错误处理/回归)+ 可维护性(命名/职责/重复/复杂度)+ 安全性(注入/权限/密钥/依赖)+ 性能(计算/查询/内存/阻塞)+ 可测试性(覆盖/路径/可 mock)
  • 严重度标签体系:Blocking(阻塞)/ Should Fix(建议修复)/ Nit(小问题)/ Optional(可选)/ FYI(参考)/ Praise(表扬)
  • 拆分策略:按功能/按层/按文件拆分 + 先重构后功能 + 确保子 PR 独立可编译可测试
  • 审查报告输出:总体评估 + 五维度评分(0-10)+ 问题清单 + 改进建议 + 亮点表扬

适用场景

场景 输入 输出
PR 审查 PR diff + 上下文 五维度审查报告 + 问题清单 + Approve/Request Changes
变更评估 代码变更量 + 文件清单 尺寸评估 + 拆分建议 + 审查优先级
质量门禁 CI/CD 触发的 diff 自动化质量检查 + Blocking 问题拦截
代码健康度 代码库全量/抽样 健康度评分 + 趋势分析 + 改进建议
新人指导 新成员提交的 PR 建设性反馈 + 学习建议 + 亮点表扬

不适用于:

  • 自动化静态分析(用 ESLint/SonarQube/Snyk 等工具)
  • 安全渗透测试(属专业安全审计)
  • 性能基准测试(属性能测试工具,如 JMeter/k6)
  • 代码风格格式化(用 Prettier/Black 等工具自动处理)

使用流程

Step 1: 获取变更概览

  • 执行 git diff 或读取 PR diff
  • 统计变更规模:新增行数 / 删除行数 / 涉及文件数
  • 变更尺寸评估:
    • 理想:~100 行(易审查、易回滚)
    • 可接受:100-300 行(需分段审查)
    • 需拆分:> 300 行(建议拆分为多个 PR)
  • 变更分类:新功能 / Bug 修复 / 重构 / 配置 / 文档

Step 2: 五维度审查

维度一:正确性

  • 逻辑是否正确实现需求
  • 边界条件是否处理(空值/零值/极值/并发)
  • 错误处理是否完整(异常捕获/错误传播/降级)
  • 是否引入回归

维度二:可维护性

  • 命名是否清晰表达意图
  • 函数/类职责是否单一
  • 是否存在重复代码(应抽象)
  • 复杂度是否可控(圈复杂度 < 10)
  • 注释是否解释"为什么"而非"是什么"

维度三:安全性

  • 输入是否校验(防注入/XSS)
  • 权限检查是否到位
  • 密钥/凭证是否泄露
  • 依赖是否有已知漏洞
  • 是否遵循最小权限原则

维度四:性能

  • 是否有不必要的计算/查询
  • N+1 查询问题
  • 内存泄漏风险
  • 大数据集处理是否分页/流式
  • 是否阻塞主线程/事件循环

维度五:可测试性

  • 是否有对应的测试
  • 测试是否覆盖关键路径
  • 是否易于编写测试(依赖注入/可 mock)
  • 测试是否快速且稳定

Step 3: 标注严重度

  • Blocking:必须修复才能合并(安全漏洞/逻辑错误/数据丢失风险)
  • Should Fix:强烈建议修复(性能问题/边界缺失/可维护性差)
  • Nit:吹毛求疵的小问题(命名偏好/格式微调)
  • Optional:可选的改进建议(重构建议/优化方向)
  • FYI:仅供参考的信息(相关知识/未来注意)
  • Praise:值得表扬的写法(优秀设计/清晰注释)

Step 4: 拆分策略(当变更过大时)

  • 按功能拆分:一个 PR 一个功能点
  • 按层拆分:数据层/业务层/接口层分开
  • 按文件拆分:独立文件变更独立 PR
  • 先重构后功能:重构 PR 先合并,再提功能 PR
  • 拆分顺序:确保每个子 PR 独立可编译可测试

Step 5: 输出审查报告

  • 总体评估:Approve / Request Changes / Needs Discussion
  • 五维度评分:每维度 0-10 分
  • 问题清单:按严重度排序
  • 改进建议:具体可执行的修改建议
  • 亮点表扬:值得学习的优秀写法

示例

示例 1:用户注册功能 PR 审查

输入:

PR: 添加用户注册功能
变更:+180 行 / -5 行 / 3 文件
文件:
  - src/auth/register.ts (新增注册逻辑)
  - src/api/routes.ts (添加 POST /register 路由)
  - src/db/users.ts (添加 createUser 方法)

输出:

# 代码审查报告:用户注册功能

## 总体评估:Request Changes
- 变更尺寸:180 行(可接受)
- 五维度评分:正确性 7/10 | 可维护性 8/10 | 安全性 4/10 | 性能 7/10 | 可测试性 3/10

## 问题清单(按严重度排序)

### Blocking(必须修复)

**[B1] 密码明文存储**
- 文件:`src/db/users.ts:15`
- 问题:`createUser` 直接将密码存入数据库,未哈希
- 风险:数据库泄露后所有密码暴露
- 建议:使用 argon2 哈希后再存储
```typescript
import argon2 from 'argon2';
const hashedPassword = await argon2.hash(password);
// 存储 hashedPassword 而非 password

[B2] 缺少输入校验

  • 文件:src/auth/register.ts:8
  • 问题:未校验 email 格式和 password 强度
  • 风险:脏数据入库 + 弱密码风险
  • 建议:使用 zod/joi 校验
const schema = z.object({
  email: z.string().email(),
  password: z.string().min(8).regex(/[A-Z]/).regex(/[0-9]/),
});

Should Fix(强烈建议修复)

[S1] 缺少速率限制

  • 文件:src/api/routes.ts:45
  • 问题:注册接口无速率限制,可被暴力注册
  • 建议:添加 IP 级速率限制(5 次/15 分钟)

[S2] 缺少单元测试

  • 文件:无
  • 问题:注册逻辑无测试覆盖
  • 建议:补充测试用例(正常注册/重复邮箱/弱密码/无效邮箱)

Praise(值得表扬)

[P1] 错误处理清晰

  • 文件:src/auth/register.ts:25
  • 表扬:错误分类明确(VALIDATION_FAILED/EMAIL_EXISTS),包含 requestId,便于排查
### 示例 2:大 PR 拆分建议

**输入**:

PR: 重构用户模块 + 添加 OAuth 登录 + 修改数据库 Schema 变更:+850 行 / -320 行 / 18 文件

**输出**:
```markdown
# 拆分建议

## 评估
- 变更尺寸:850 行(需拆分)
- 涉及多个独立功能,建议拆分为 4 个 PR

## 拆分方案

### PR 1: 数据库 Schema 变更(独立先合并)
- 文件:`src/db/schema.ts`, `migrations/001_users_oauth.sql`
- 行数:~80 行
- 说明:纯 Schema 变更,向后兼容(新增字段),可独立合并

### PR 2: 重构用户模块(依赖 PR 1)
- 文件:`src/db/users.ts`, `src/auth/user-service.ts`
- 行数:~250 行
- 说明:提取 UserService,为 OAuth 做准备,无功能变更

### PR 3: OAuth 登录功能(依赖 PR 2)
- 文件:`src/auth/oauth.ts`, `src/api/routes.ts`
- 行数:~300 行
- 说明:核心功能 PR,添加 Google/GitHub OAuth

### PR 4: 测试与文档(依赖 PR 3)
- 文件:`tests/auth.test.ts`, `docs/oauth.md`
- 行数:~220 行
- 说明:补充测试用例与 OAuth 接入文档

## 合并顺序
PR 1 → PR 2 → PR 3 → PR 4
每个 PR 独立可编译可测试,降低审查难度与回滚风险。

错误处理

错误场景 原因 处理方式
无法获取 diff git 命令失败或 PR 不存在 检查 git 仓库状态 + 确认 PR 编号 + 提供文件路径手动审查
变更过大 > 1000 行单 PR 建议拆分 + 提供拆分方案 + 优先审查 Blocking 问题
跨语言审查 多语言混合 PR 按语言分组审查 + 标注语言特定问题
缺少上下文 无需求文档或关联 issue 标注"假设" + 请求补充上下文 + 基于代码本身审查
误报问题 LLM 理解偏差 标注"需人工确认" + 提供依据 + 允许作者解释
审查超时 大型 PR 审查耗时 分段审查 + 优先 Blocking + 异步输出报告

依赖说明

运行环境

  • Agent 平台:Claude Code / Cursor / Codex / Gemini CLI / Windsurf 等支持 SKILL.md 的任意 Agent
  • 操作系统:Windows / macOS / Linux
  • 运行时:需要 Agent 支持 exec(命令行执行)能力(执行 git diff)

依赖项

依赖项 类型 是否必需 获取方式
Git 工具 必需 git 命令行(获取变更差异)
LLM API API 必需 由 Agent 内置 LLM 提供代码分析
静态分析工具 工具 可选 ESLint/SonarQube/Snyk(补充自动化检查)

API Key 配置

  • 本 Skill 无需额外 API Key 配置
  • 代码审查由 Agent LLM 完成,API Key 由 Agent 平台托管
  • 若集成 GitHub/GitLab API(可选),Token 通过环境变量注入,Skill 内零硬编码

可用性分类

  • 分类:MD + EXEC
  • 说明:纯 Markdown 方法论,需要 exec 能力执行 git diff 获取变更,审查本身由 Agent LLM 完成

常见问题

Q1: 代码审查哨兵与 ESLint/SonarQube 有何区别?

A: ESLint/SonarQube 是自动化静态分析工具,基于规则匹配发现已知模式问题(如未使用变量、复杂度过高)。代码审查哨兵是LLM 驱动的语义审查,能理解业务逻辑、跨文件上下文、设计意图。两者互补:静态分析快速拦截常见问题,哨兵深入审查语义与架构。

Q2: 审查标准是否过于严格?

A: 标准可配置。Blocking 仅针对"必须修复才能合并"的问题(安全漏洞/逻辑错误/数据丢失)。Should Fix 是建议,不阻塞合并。Nit 是小问题,可选修复。团队可根据成熟度调整阈值。

Q3: 如何避免审查中的"误报"?

A: 所有问题标注依据(代码行/风险说明/建议方案)。作者可对问题回复"需讨论"或"误报",审查者确认后调整。LLM 不确定时标注"需人工确认",避免过度自信。

Q4: 大 PR(> 500 行)如何高效审查?

A: 1)先看变更概览与尺寸评估;2)优先审查 Blocking 问题;3)按文件/模块分段审查;4)提供拆分建议(如示例 2);5)异步输出完整报告,避免阻塞。

已知限制

  • 依赖 LLM 能力,复杂业务逻辑理解可能不如领域专家深入
  • 无法执行代码运行时验证(如实际测试、性能基准),仅静态审查
  • 跨仓库依赖分析能力有限(仅审查当前 diff,不追踪外部依赖变更)
  • 性能取决于底层 LLM,大 PR 审查可能耗时较长
  • 不替代人工审查的"经验判断"(如架构合理性、产品需求匹配度)

安全

  • API Key 零暴露:本 Skill 不涉及外部 API 调用,无需配置密钥
  • 密钥泄露检测:审查时强制检查代码中是否硬编码密钥/令牌/凭证
  • 最小权限原则:审查代码是否遵循最小权限(如数据库用户、API 角色)
  • 输入校验检查:强制审查输入校验(防 SQL 注入/XSS/CSRF)
  • 依赖漏洞扫描:提醒检查依赖是否有已知 CVE(建议配合 Snyk/Dependabot)
  • 敏感信息提醒:审查时如发现敏感信息(密钥/客户数据),提醒立即移除并轮换

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

0

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

0

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

0

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习