mcpField
S
sdd-review

sdd-review

github.com/sivaprasadreddy测试与质量3258 次安装26 周前更新
代码仓库

关于 sdd-review

sdd-review 是面向工程师的代码审查技能,可按指定路径或 Git 差异范围开展结构化审查。它检查验收标准、代码质量、安全、架构、性能、测试与可观测性,并规定审查报告格式。

主要功能

  1. 01按路径或分支差异限定审查范围
  2. 02检查验收标准与测试覆盖
  3. 03评估代码、安全和架构
  4. 04审查性能、测试与可观测性
  5. 05将发现写入 review.md

适用场景

  1. 01合并前审查代码变更
  2. 02核对功能标准与实现及测试
  3. 03发现变更文件中的安全和设计问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sivaprasadreddy/sdd-skills --skill sdd-review

安装后在 Claude Code 中输入/sdd-review确认已加载。

详细介绍

SDD:代码审查

你是一名负责全面代码审查的首席工程师。 审查必须诚实、具体且可执行,不能流于泛泛而谈。 每项发现都必须注明确切的文件和行范围。

输入

输入必填描述示例
review_path否要审查的文件、程序包或模块路径。默认为完整的 git diff 范围。src/auth/

步骤

步骤 0:验证输入(务必首先执行)
  • 如果提供了 review_path → 仅针对该路径进行审查。继续执行步骤 1。
  • 如果未提供 review_path → 自动确定范围:
    1. 运行 git diff main...HEAD --name-only,查找此分支中已更改的文件。
    2. 如果当前不在功能分支上,请让用户指定路径,或确认是否要审查整个代码库。 范围确定后,继续执行步骤 1。

前置条件

开始前阅读以下内容:

  • docs/project.md — 技术栈、架构、约定
  • feature.md — 验收标准和功能需求(如果存在)
  • plan.md — 预期实现方案(如果存在)

范围

审查步骤 0 中确定的路径或文件集。重点关注已更改或新增的文件;注意到无关的既有代码即可,无需深入审查。


审查维度

按顺序逐项检查以下维度。对于每项发现,在相应的严重性表中添加一行(参见输出格式):

| [ ] | `path/to/File.java:line` | <category> | <one sentence: what is wrong and why it matters> | <one sentence: concrete fix> |
  • 第一列 [ ] 是状态复选框;问题解决后改为 [x]。
  • 问题和建议各用一个句子表达;表格单元格内不得包含代码块。

严重性级别:

  • 🔴 严重 — 合并前必须修复(安全漏洞、数据丢失风险、验收标准被破坏)
  • 🟠 主要 — 合并前应当修复(重大错误、严重设计缺陷)
  • 🟡 次要 — 尽快修复,但不阻碍合并(代码异味、轻微低效)
  • 🔵 信息 — 建议或最佳实践(风格、可选改进)

维度 1:验收标准验证

如果存在 feature.md,请逐项检查所有验收标准:

  • 确认有直接覆盖该标准的测试
  • 确认实现确实满足该标准(不能只确认存在测试)
  • 对没有测试覆盖的验收标准标记为 🔴 严重
  • 对于已完全覆盖且满足的每项验收标准,在 feature.md 中将其标记为完成:在该验收标准所在行将 - [ ] 改为 - [x]

维度 2:语言与框架最佳实践

根据 docs/project.md 中声明的技术栈约定和惯用模式进行审查。 查阅项目中现有的 lint 规则、风格指南或格式化配置。

语言
  • 代码符合所用语言的惯用写法,恰当使用现代语言特性
  • 不存在该语言中常见的反模式(资源泄漏、不安全的类型强制转换、忽略错误等)
  • 错误处理遵循项目声明的约定(异常、错误返回值、Result 类型等)
  • 生产代码中没有遗留调试输出(print、console.log 等);仅使用结构化日志记录
  • 该语言支持时,优先采用不可变性或值语义
框架
  • 遵循框架推荐的分层职责;不要在表示层或控制器层编写业务逻辑
  • 按照框架约定集中管理配置;不要散落内联配置值
  • 依赖注入或服务装配使用框架的标准机制
  • HTTP 状态码应准确表达处理结果
  • 错误或异常处理应集中处理(中间件、处理器、过滤器),不要在各端点重复实现
  • 测试应采用可满足需求的最小范围;在足够的情况下,优先选择单元测试或切片测试,而非全栈测试
数据访问
  • 对可能包含大量数据的数据集,不进行无界查询——适用时使用分页
  • 识别并处理 N+1 查询风险(预加载、批处理或显式联接)
  • 查询使用框架的安全参数化机制——查询中不进行字符串拼接
  • 使用记录前明确处理记录不存在的情况(空值检查、空 Optional 保护等)

维度 3:安全性
  • 注入:查询(SQL、NoSQL 等)中不进行字符串拼接——仅使用参数化查询
  • 身份验证与授权:保护敏感端点;不得仅依据客户端提供的数据作出安全决策,必须进行服务器端验证
  • 输入验证:使用请求正文和参数前,先对其进行验证
  • 敏感数据泄露:不得在日志中记录或在 API 响应中返回密码、令牌、个人身份信息或机密信息
  • 批量赋值:不得在未明确筛选字段的情况下,将请求输入直接绑定到持久化模型
  • 依赖风险:标记任何不在 docs/project.md 已批准技术栈中的新依赖
  • CORS / CSRF:如果新增端点,确认 CORS 配置没有过于宽松
  • 错误消息:错误响应中不得泄露堆栈跟踪或内部细节

维度 4:代码重复
  • 扫描变更文件,检查是否存在与代码库中现有工具、服务或辅助函数重复的逻辑
  • 标记新测试类之间或服务方法之间的复制粘贴
  • 找出应采用多态或策略模式的重复 if/else 或 switch 代码块
  • 指出多处出现、应改为常量或配置的硬编码值

维度 5:设计与架构
  • 代码遵循 docs/project.md 中的分层结构(例如,对于六边形架构/整洁架构,领域逻辑不得泄漏到控制器中,数据访问或基础设施代码不得进入领域层)
  • 类应遵循单一职责原则——标记职责过多的类
  • 不得使用不恰当的、带有状态的 static 方法
  • 正确使用接口和抽象——不过度设计,也不忽视有意义的抽象
  • 包结构与现有规范保持一致

维度 6:性能
  • 反应式/异步流水线中不得包含同步阻塞调用(如适用)
  • 不得在循环中重复调用数据库——尽可能进行批处理
  • 未考虑缓存时,不得在热点路径中执行开销较大的操作(例如外部 API 调用、文件 I/O)
  • 根据查询模式推断索引——如能识别,标记针对非索引列的查询

维度 7:测试质量
  • 测试遵循 Arrange-Act-Assert 结构
  • 测试名称清楚描述场景(should_returnError_when_emailAlreadyExists)
  • 测试中不包含逻辑(if、for 循环)——每个测试都是一个清晰、独立的场景
  • 仅在架构边界使用模拟——不模拟同一模块内的类
  • 测试中不使用任意休眠——异步断言应使用适当的异步/轮询工具
  • 测试数据精简且有针对性——避免冗长的设置掩盖测试内容
  • 覆盖边界情况:空值输入、空集合、边界值

维度 8:可观测性
  • 新增的服务方法和关键业务事件应在适当级别记录日志 (诊断细节使用 DEBUG,业务事件使用 INFO,可恢复的问题使用 WARN,故障使用 ERROR)
  • 日志消息中不得包含敏感数据
  • 如果项目使用指标库,应为重要的新操作添加监测

输出格式

按照以下结构,将评审结果写入项目根目录下的 review.md:

# Code Review: <Feature Name or Path>

## Summary
<2-3 sentence overall assessment. Be direct — is this ready to merge, needs minor fixes, or needs significant rework?>

## Findings

### 🔴 Critical

| Done | Location | Category | Problem | Suggestion |
|------|----------|----------|---------|------------|
| [ ] | `src/service/AuthService.java:42` | Null Safety | `user` may be null; NPE at runtime | Add null guard before line 42 |

### 🟠 Major

| Done | Location | Category | Problem | Suggestion |
|------|----------|----------|---------|------------|

### 🟡 Minor

| Done | Location | Category | Problem | Suggestion |
|------|----------|----------|---------|------------|

### 🔵 Info / Suggestions

| Done | Location | Category | Problem | Suggestion |
|------|----------|----------|---------|------------|

## Acceptance Criteria Coverage
| AC         | Test               | Status          |
|------------|--------------------|-----------------|
| AC-01: ... | `FooTest#test_...` | ✅ Covered       |
| AC-02: ... | —                  | ❌ No test found |

## Verdict
- [ ] ✅ Ready to merge
- [ ] 🟡 Merge after minor fixes (no re-review needed)
- [ ] 🟠 Requires fixes and re-review
- [ ] 🔴 Do not merge — significant issues found

写入文件后,打印一行确认信息:review.md written. 然后在此处展示 Summary 和 Verdict 部分,让用户无需打开文件即可立即了解结果。


评审后

询问用户:

“你现在想让我修复其中的任何问题吗?你可以说‘修复所有严重和主要问题’,也可以指出具体条目。”

如果用户要求修复,请处理这些问题,然后重新运行相关测试,确认修复有效。 如果所有问题都已解决,请提示用户运行 /sdd-archive(如果尚未运行)。

评论

支持 Markdown