mirror of
https://github.com/yyhuni/xingrin.git
synced 2026-01-31 11:46:16 +08:00
3.5 KiB
3.5 KiB
trigger, description
| trigger | description |
|---|---|
| manual | 进行代码审查的时候,必须调用这个规则 |
0. 逻辑正确性 & Bug 排查 (最高优先级,必须手动推演)
目标:不依赖测试,主动发现“代码能跑但结果错”的逻辑错误。
- 手动推演关键路径:
- 选 2~3 个典型输入(含边界),在脑中或纸上一步步推演代码执行流程。
- 输出是否符合预期?每一步变量变化是否正确?
- 常见逻辑 bug 检查:
- off-by-one:循环、数组索引、分页
- 条件逻辑错误:
and/or优先级、短路求值误用 - 状态混乱:变量未初始化、被意外覆盖
- 算法偏差:排序、搜索、二分查找的中点处理
- 浮点精度:是否误用
==比较浮点数?
- 控制流审查:
- 所有
if/else分支是否都覆盖?有无“不可达代码”? switch/match是否有default?是否漏 case?- 异常路径会返回什么?是否遗漏
finally清理?
- 所有
- 业务逻辑一致性:
- 是否符合业务规则?(如“订单总额 = 商品价 × 数量 + 运费 - 折扣”)
- 是否遗漏隐含约束?(如“用户只能评价已完成的订单”)
一、功能性 & 正确性 (阻塞性问题必须修复)
- 需求符合度:是否100%覆盖需求?遗漏/多余功能点?
- 边界条件:
- 输入:
null、空、极值、非法格式 - 集合:空、单元素、超大(如10⁶)
- 循环:终止条件、off-by-one
- 输入:
- 错误处理:
- 异常捕获全面?失败路径有降级?
- 错误信息清晰?不泄露栈迹?
- 并发安全:
- 竞态/死锁风险?共享资源是否同步?
- 使用了
volatile/synchronized/Lock/atomic?
- 单元测试:
- 覆盖率 ≥80%?包含正向/边界/异常用例?
- 测试独立?无外部依赖?
二、代码质量与可读性
- 命名:见名知意?遵循规范?
- 函数设计:
- 单一职责?参数 ≤4?建议长度 <50行(视语言调整)
- 可提取为工具函数?
- 结构与复杂度:
- 无重复代码?圈复杂度 <10?
- 嵌套 ≤3层?使用卫语句提前返回
- 注释:解释为什么而非是什么?复杂逻辑必注释
- 风格一致:通过
Prettier/ESLint/Spotless自动格式化
三、架构与设计
- SOLID:是否符合单一职责、开闭、依赖倒置?
- 依赖:是否依赖接口而非实现?无循环依赖?
- 可测试性:是否支持依赖注入?避免
new硬编码 - 扩展性:新增功能是否只需改一处?
四、性能优化
- N+1查询?循环内IO/日志/分配?
- 算法复杂度合理?(如O(n²)是否可优化)
- 内存:无泄漏?大对象及时释放?缓存有失效?
五、其他
- 可维护性:日志带上下文?修改后更干净?
- 兼容性:API/数据库变更是否向后兼容?
- 依赖管理:新库必要?许可证合规?
审查最佳实践
- 小批次审查:≤200行/次
- 语气建议:
“建议将函数拆分以提升可读性”而非“这个函数太长了” - 自动化先行:风格/空指针/安全扫描 → CI工具
- 重点分级:
- 🛑 阻塞:功能错、安全漏洞
- ⚠️ 必须改:设计缺陷、性能瓶颈
- 💡 建议:风格、命名、可读性