Beta Code Review

Polar Sponsor
爱发电 赞助
.NET 9.0

系统化代码审查模式,涵盖安全性、性能、可维护性、正确性与测试,附带严重等级和结构化反馈指导

代码检讨检查列表 : 深思熟虑, 结构化的代码检讨方法

功能概述

代码检讨检查列表 : 深思熟虑, 结构化的代码检讨方法是一项面向实际任务的技能,主要用于系统化地通过每个维度而不是随机扫描;OpenClaw / Moltbot / Clawbot.;

核心要点

  • Review Viments.。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。

使用与执行

该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

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

代码审查清单

采用全面、结构化的方式审查代码。请系统性地逐项检查每个维度,而非随机浏览。

安装

OpenClaw / Moltbot / Clawbot

npx clawhub@latest install code-review

审查维度

维度 关注点 优先级
Security 漏洞、认证、数据泄露风险 Critical
Performance 响应速度、内存使用、可扩展性瓶颈 High
Correctness 逻辑错误、边界情况、数据完整性 High
Maintainability 可读性、代码结构、面向未来的设计 Medium
Testing 测试覆盖率、测试质量、可靠性 Medium
Accessibility WCAG 合规性、键盘导航支持、屏幕阅读器兼容性 Medium
Documentation 注释、API 文档、变更日志条目 Low

安全审查清单

对每一处变更均需检查以下安全漏洞:

  • SQL 注入 — 所有数据库查询均使用参数化语句或 ORM;禁止将用户输入直接拼接到 SQL 字符串中
  • XSS — 用户提供的内容在渲染前必须进行转义或净化;如使用 dangerouslySetInnerHTML 或其等效机制,须有充分理由且确保安全
  • CSRF 防护 — 状态变更类请求必须携带有效的 CSRF Token;Cookie 的 SameSite 属性已正确设置
  • 认证(Authentication) — 每个受保护的端点在处理请求前,必须验证用户是否已通过身份认证
  • 授权(Authorization) — 对资源的访问必须严格限制在当前请求用户的权限范围内;杜绝 IDOR 类漏洞
  • 输入校验 — 所有来自外部的输入(URL 参数、Header、请求体、文件上传等)均需在服务端进行类型、长度、格式及取值范围校验
  • 密钥管理(Secrets Management) — 源码中不得硬编码 API Key、密码、Token 或其他凭证;所有密钥应通过环境变量或密钥管理服务(Vault)注入
  • 依赖安全性 — 新增依赖必须来自可信源、处于活跃维护状态,且无已知 CVE 漏洞
  • 敏感数据处理 — PII(个人身份信息)、Token、密钥等不得记录到日志、不得出现在错误消息中、不得返回至 API 响应体
  • 速率限制(Rate Limiting) — 公共接口与认证接口均需配置合理速率限制,防止暴力破解与滥用
  • 文件上传安全 — 上传文件须校验类型与大小,存储路径须位于 Web 根目录之外,并以安全的 Content-Type 头提供服务
  • HTTP 安全响应头 — 已正确配置 Content-Security-Policy、X-Content-Type-Options、Strict-Transport-Security 等安全头

性能审查清单

  • N+1 查询 — 数据库访问模式已优化为批量查询或 JOIN;避免在循环中逐条发起查询
  • 非必要重渲染 — 组件仅在其相关状态或属性变更时才触发重渲染;对可测量收益的场景应用 memoization
  • 内存泄漏 — 事件监听器、订阅、定时器与周期任务均在组件卸载或资源销毁时被正确清理
  • 构建包体积 — 新增依赖支持 Tree-shaking;大型库采用动态加载;禁止仅为单个函数而引入整库
  • 懒加载(Lazy Loading) — 计算密集型组件、路由及首屏以下内容均已启用懒加载 / 代码分割
  • 缓存策略 — 开销较大的计算结果与 API 响应均已配置合适的缓存机制(如 memoization、HTTP 缓存头、Redis)
  • 数据库索引 — 查询中涉及过滤与排序的字段均已建立索引;新增查询已通过 EXPLAIN 进行验证
  • 分页机制 — 列表类端点与查询均已启用分页或游标式分页;禁止无限制的 SELECT *
  • 异步操作 — 耗时较长的任务已交由后台作业或队列处理,避免阻塞请求线程
  • 图片与静态资源优化 — 图片尺寸适配、采用现代格式(WebP/AVIF),并依托 CDN 分发

正确性审查清单

  • 边界情况(Edge Cases) — 已处理空数组、空字符串、零值、负数及最大值等场景
  • 空值处理(Null/Undefined Handling) — 对可能为空的值访问前均已做显式检查;通过可选链(Optional Chaining)或防护条件(Guard Clause)避免运行时错误
  • 差一错误(Off-by-One Errors) — 循环边界、数组切片、分页偏移量及范围计算均已验证
  • 竞态条件(Race Conditions) — 对共享状态的并发访问已通过锁、事务或原子操作保障一致性
  • 时区处理(Timezone Handling) — 时间戳统一以 UTC 存储;展示层负责时区转换
  • Unicode 与编码(Unicode & Encoding) — 字符串操作兼容多字节字符;文本编码明确指定为 UTF-8
  • 整数溢出 / 精度问题(Integer Overflow / Precision) — 大数运算或货币计算已选用合适类型(如 BigInt、Decimal)
  • 错误传播(Error Propagation) — 异步调用及外部服务抛出的错误已被捕获并妥善处理;Promise 不会被静默吞没
  • 状态一致性(State Consistency) — 多步状态变更具备事务性;部分失败后系统仍保持有效状态
  • 边界值校验(Boundary Validation) — 已对合法取值范围的边界值(最小值、最大值、恰好等于阈值)进行测试

可维护性审查清单

  • 命名清晰性(Naming Clarity) — 变量、函数与类名具有描述性,能直观体现其设计意图
  • 单一职责(Single Responsibility) — 每个函数 / 类 / 模块仅承担一项职责;单一关注点的修改不会波及无关代码
  • DRY 原则 — 重复逻辑已提取为通用工具;复制粘贴的代码块已合并
  • 圈复杂度(Cyclomatic Complexity) — 函数分支逻辑简洁;深度嵌套结构已重构
  • 错误处理(Error Handling) — 错误在恰当边界被捕获,附带上下文记录,并以有意义的方式向上暴露
  • 废弃代码清理(Dead Code Removal) — 已移除注释掉的代码、未使用的导入、不可达分支及过时的功能开关
  • 魔法数字与字符串(Magic Numbers & Strings) — 字面量值已提取为具语义的命名常量
  • 风格一致性(Consistent Patterns) — 新增代码严格遵循现有代码库约定
  • 函数长度(Function Length) — 函数足够简短,可一目了然;过长函数已拆解
  • 依赖方向(Dependency Direction) — 依赖关系指向内层(如 infrastructure → domain);核心业务逻辑不反向依赖 UI 或框架层

测试审查清单

  • 测试覆盖率(Test Coverage) — 新增逻辑路径均有对应测试;关键路径同时覆盖正常流程与异常场景
  • 边界情况测试(Edge Case Tests) — 测试覆盖边界值、空输入、null 值及错误条件
  • 非脆弱测试(No Flaky Tests) — 测试确定性强;不依赖时间、外部服务或共享可变状态
  • 测试独立性(Test Independence) — 每个测试独立构建并销毁自身状态;测试执行顺序不影响结果
  • 有意义的断言(Meaningful Assertions) — 断言聚焦于行为与结果,而非实现细节
  • 测试可读性(Test Readability) — 测试遵循 Arrange-Act-Assert 模式;测试名称准确描述场景与预期结果
  • 模拟规范性(Mocking Discipline) — 仅对外部边界(网络、数据库、文件系统)进行模拟
  • 回归测试(Regression Tests) — Bug 修复必须包含复现原问题并验证已解决的测试用例

审查流程

分三轮通读代码,切勿试图一次完成全部审查。

轮次 关注点 耗时 重点检查项
第一轮 高层结构 2–5 分钟 架构适配性、文件组织、API 设计、整体方案合理性
第二轮 逐行细节 主要耗时 逻辑错误、安全问题、性能缺陷、边界情况
第三轮 边界情况与加固 5 分钟 故障模式、并发问题、边界值、缺失测试

第一轮(2–5 分钟)

  1. 通读 PR 描述及关联 Issue
  2. 浏览变更文件列表 —— 变更范围是否合理?
  3. 评估整体方案 —— 这是否是解决该问题的恰当方式?
  4. 确认变更未导致架构漂移(Architectural Drift)

第二轮(审查主要耗时)

  1. 自上而下逐行阅读每个文件 Diff
  2. 对照上述各清单逐项核查每个函数变更
  3. 验证所有 I/O 边界处的错误处理逻辑
  4. 对任何引发疑虑的内容及时标记 —— 信任你的直觉

第三轮(5 分钟)

  1. 思考该代码在生产环境中可能发生的故障场景
  2. 检查此前标记路径是否补充了相应测试
  3. 验证回滚安全性 —— 此变更能否在不丢失数据的前提下安全回退?
  4. 确认文档与变更日志(Changelog)是否按需更新

严重程度分级

为每条评论标注严重程度,便于作者快速识别哪些问题会阻断合并。

等级 标签 含义 是否阻断合并?
Critical [CRITICAL] 存在安全漏洞、数据丢失风险或导致生产环境崩溃 是
Major [MAJOR] 存在 Bug、逻辑错误或显著性能退化 是
Minor [MINOR] 有助于降低未来维护成本的改进建议 否
Nitpick [NIT] 风格偏好、命名建议或微小清理项 否

务必在每条评论开头添加严重程度标签,消除理解歧义。

反馈撰写规范

基本原则

  • 具体明确 — 指出确切行号,并解释问题本质,而非简单断言“此处有误”
  • 阐明原因 — 说明潜在风险或后果,而非仅复述规则
  • 提供方案 — 尽可能给出具体修改建议或可运行的代码片段
  • 以问代令 — 对主观判断点使用提问语气:“您觉得……如何?”
  • 肯定亮点 — 明确指出简洁的实现、巧妙的优化或完备的测试
  • 区分阻断与非阻断项 — 使用严重程度标签帮助作者快速识别优先级

示例评论

反面示例:

此处有误,请修正。

正面示例:

[MAJOR] 此查询将用户输入直接拼接进 SQL 字符串(第 42 行),存在 SQL 注入风险。建议改用参数化查询:

SELECT * FROM users WHERE id = $1

反面示例:

为何未补充测试?

正面示例:

[MINOR] 新增的 calculateDiscount() 函数包含多个分支路径,建议补充零数量与负价格等边界情况的测试用例,以防回归。

反面示例:

我会用不同方式实现。

正面示例:

[NIT] 当前实现效果良好。另一种思路是将重试逻辑抽离为共享的 withRetry() 封装器 —— 此为可选优化,可后续跟进。

审查反模式

避免以下常见误区,以免浪费时间并损害团队信任:

反模式 说明
走形式审批(Rubber-Stamping) 未经审阅即批准。制造虚假信心,导致缺陷流入生产环境。
伪优先级争论(Bikeshedding) 花费 30 分钟争论变量命名,却忽视一个潜在竞态条件。
因风格阻断(Blocking on Style) 拒绝批准仅因格式问题 —— 此类问题应由 Linter 自动强制执行。
过度管控(Gatekeeping) 强行要求采用个人偏好的实现方式,而提交方案本身完全正确。
路过式审查(Drive-by Reviews) 仅留下一条模糊评论便不再跟进。请承诺全程参与闭环。
范围蔓延审查(Scope Creep Reviews) 提出与当前 PR 无关的重构需求,此类工作应拆分为独立 PR。
滞留式审查(Stale Reviews) 任由 PR 悬置数日。应在 24 小时内完成审查,或主动移交他人。
情绪化表达(Emotional Language) 使用“这很糟糕”或“明显错误”等表述。请批评代码,而非开发者本人。

绝对禁止事项

  1. 绝对禁止未逐行审阅即批准 —— 走形式审批比不审查危害更大
  2. 绝对禁止仅因风格偏好阻断 PR —— 交由 Linter 自动约束;人工审查聚焦逻辑正确性
  3. 绝对禁止未标注严重程度的反馈 —— 模糊性将导致无效返工
  4. 绝对禁止未说明原因即要求修改 —— “请修复此处”无法传递任何知识
  5. 绝对禁止单次审查超过 400 行 —— 理解力急剧下降;大 PR 应拆分为多次审查
  6. 绝对禁止跳过安全审查清单 —— 一个遗漏的漏洞,其危害远超百条风格建议
  7. 绝对禁止人身攻击 —— 审查对象是代码,不是开发者;请始终假定对方善意

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

0

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

0

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

0

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

0

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

0

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

0

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

0

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

0

15

热门下载

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

精品课程

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

共6课时 | 54.7万人学习

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

共89课时 | 134.1万人学习