# 代码审查

> 按照 Sentry 工程实践进行代码审查。用于审查拉取请求、检查代码变更或提供代码质量反馈。涵盖安全性、性能、测试和设计审查。

- Skill: `diegosouzapw/skill-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add diegosouzapw/skill-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/diegosouzapw/skill-2/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: diegosouzapw (https://skillmd.com/u/diegosouzapw)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/diegosouzapw/skill-2

---


# Sentry 代码审查

审查 Sentry 项目代码时请遵循以下指南。

## 审查清单

### 识别问题

在代码变更中寻找以下问题：

- **运行时错误**：潜在的异常、空指针问题、越界访问
- **性能**：无界的 O(n²) 操作、N+1 查询、不必要的内存分配
- **副作用**：影响其他组件的意外行为变更
- **向后兼容性**：没有迁移路径的破坏性 API 变更
- **ORM 查询**：复杂的 Django ORM 可能导致意外的查询性能
- **安全漏洞**：注入、XSS、访问控制缺陷、密钥泄露

### 设计评估

- 组件交互是否逻辑合理？
- 变更是否与现有项目架构一致？
- 是否与当前需求或目标存在冲突？

### 测试覆盖

每个 PR 都应有适当的测试覆盖：

- 业务逻辑的功能测试
- 组件交互的集成测试
- 关键用户路径的端到端测试

验证测试是否覆盖了实际需求和边界情况。避免在测试代码中使用过多的分支或循环。

### 长期影响

当变更涉及以下内容时，标记为需要高级工程师审查：

- 数据库 Schema 修改
- API 契约变更
- 新框架或库的引入
- 性能关键代码路径
- 安全敏感功能

## 反馈指南

### 语气

- 保持礼貌和同理心
- 提供可操作的建议，而非模糊的批评
- 不确定时用疑问句表达："你是否考虑过...？"

### 批准

- 仅剩轻微问题时即可批准
- 不要因为代码风格偏好而阻止 PR
- 记住：目标是降低风险，而非追求完美代码

## 需要标记的常见模式

### Python/Django

```python
# 错误示例：N+1 查询
for user in users:
    print(user.profile.name)  # 每个用户单独查询

# 正确示例：预取关联数据
users = User.objects.prefetch_related('profile')
```

### TypeScript/React

```typescript
// 错误示例：useEffect 中缺少依赖
useEffect(() => {
  fetchData(userId);
}, []);  // userId 不在依赖中

// 正确示例：包含所有依赖
useEffect(() => {
  fetchData(userId);
}, [userId]);
```

### 安全

```python
# 错误示例：SQL 注入风险
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")

# 正确示例：参数化查询
cursor.execute("SELECT * FROM users WHERE id = %s", [user_id])
```

## 参考资料

- [Sentry 代码审查指南](https://develop.sentry.dev/engineering-practices/code-review/)

