Back to skills
extension
Category: Development & EngineeringNo API key required

代码审查

Conduct code reviews following Sentry's engineering practices. Used for reviewing pull requests, checking code changes, or providing feedback on code quality. Covers security, performance, testing, and design reviews.

personAuthor: jakexiaohubgithub

Sentry 代码审查

审查 Sentry 项目代码时请遵循以下指南。

审查清单

识别问题

在代码变更中寻找以下问题:

  • 运行时错误:潜在的异常、空指针问题、越界访问
  • 性能:无界的 O(n²) 操作、N+1 查询、不必要的内存分配
  • 副作用:影响其他组件的意外行为变更
  • 向后兼容性:没有迁移路径的破坏性 API 变更
  • ORM 查询:复杂的 Django ORM 可能导致意外的查询性能
  • 安全漏洞:注入、XSS、访问控制缺陷、密钥泄露

设计评估

  • 组件交互是否逻辑合理?
  • 变更是否与现有项目架构一致?
  • 是否与当前需求或目标存在冲突?

测试覆盖

每个 PR 都应有适当的测试覆盖:

  • 业务逻辑的功能测试
  • 组件交互的集成测试
  • 关键用户路径的端到端测试

验证测试是否覆盖了实际需求和边界情况。避免在测试代码中使用过多的分支或循环。

长期影响

当变更涉及以下内容时,标记为需要高级工程师审查:

  • 数据库 Schema 修改
  • API 契约变更
  • 新框架或库的引入
  • 性能关键代码路径
  • 安全敏感功能

反馈指南

语气

  • 保持礼貌和同理心
  • 提供可操作的建议,而非模糊的批评
  • 不确定时用疑问句表达:"你是否考虑过...?"

批准

  • 仅剩轻微问题时即可批准
  • 不要因为代码风格偏好而阻止 PR
  • 记住:目标是降低风险,而非追求完美代码

需要标记的常见模式

Python/Django

# 错误示例:N+1 查询
for user in users:
    print(user.profile.name)  # 每个用户单独查询

# 正确示例:预取关联数据
users = User.objects.prefetch_related('profile')

TypeScript/React

// 错误示例:useEffect 中缺少依赖
useEffect(() => {
  fetchData(userId);
}, []);  // userId 不在依赖中

// 正确示例:包含所有依赖
useEffect(() => {
  fetchData(userId);
}, [userId]);

安全

# 错误示例:SQL 注入风险
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")

# 正确示例:参数化查询
cursor.execute("SELECT * FROM users WHERE id = %s", [user_id])

参考资料