项目经验_之_CodeReview
前言
Github:https://github.com/HealerJean
一、为什么要 CodeReview
CodeReview
是开发过程不可或缺的重要一环,如果将代码发布比作一个工厂的流水线,那么CodeReview
就是流水线接近于重点的质检员,他要担负着对产品质量的保障工作,将“缺陷”从众多的“产品”中挑出,反向推动“生产方”改进生产质量。
1、改善代码质量:
通过
CodeReview
机制,可以让团队其他同学帮忙协助把关代码质量,发现代码中潜在的质量问题,并给出改进建议,从而推动团队整体代码代码质量的提升。
2、知识共享,统一认知
CodeReview
过程是知识碰撞的过程,是学习别人的知识体系促进自我成长的过程,通过CR
这样的过程能够将不同成长阶段的成员之间知识水位尽量拉齐,能够有效的提升团队编程的整体水平。
3、识别潜在安全:
通过
CodeReview
能够及时发现代码中潜在的安全问题和性能问题例如:
SQL
注入问题、方案安全漏洞问题、部分业务场景查询实现性能较差等问题。
二、代码审查中需要检查的内容
1、设计
比如:这个更改是否遵循我们期望的架构,或者它是否与系统的其他部分集成良好?它的组件之间是否具有高内聚性和低耦合性?
2、实现
我们检查解决方案是否在逻辑上正确,如果代码比应有的复杂,等等。这段代码是否必要?我们还要检查是否使用了良好的设计模式。以及关键的内容。
3、测试
我们检查是否所有测试都通过了,我们是否对所有代码路径和行为使用单元测试,并对外部系统(数据库、文件系统等)使用集成测试。我们是否检查了所有边界条件和代码覆盖率在
60
-80%
之间?
4、文档
我们的
PR
描述添加了吗?我们的解决方案在存储库的README.md
或其他地方是否有文档更新?
5、代码风格
我们是否遵循了项目的代码风格?您是否知道命名是否良好?开发人员是否为类、方法等选择了确切的名称?代码是否易读?
三、良好实践
关注点分类 | 关注点细分 | 核心关注点 | 常见问题 |
---|---|---|---|
代码规范与质量 | 命名 | 变量命名、方法命名、类命名、包命名 | 命名拼写错误、命名与实际含义不符(超出或小于)、用词不准 |
注释 | 是否有注释、注释是否合理 | 通篇无注释、注释不准确 | |
日志打印 | 日志打印级别、日志打印参数、日志格式、异常打印、是否应该打印日志 | 日志打印级别误用、日志参数未打印、日志格式不规范、异常信息未打印、打印日志过多 | |
异常处理 | 异常是否抛出、是否规范的异常编码等 | 异常该抛出未抛、肆意的使用RuntimeException 等 |
|
逻辑正确 | 业务逻辑是否正常 | 空指针问题、逻辑不正确等 | |
代码风格一致 | 代码风格与应用整体风格一致 | 代码风格不一致(如) | |
代码复杂度 | 圈复杂度 | 大量嵌套if导致非常复杂等 | |
架构设计 | 关注分层 | 分层是否合理、是否存在跨层调用 | 分层混乱、跨层调用 |
关注扩展性 | 扩展适配 | 硬编码扩展性低 | |
业务域划分 | 业务域划分清晰 | 业务域划分混乱 | |
性能问题 | 慢 SQL |
索引设计、是否存在慢SQL语法 | 索引未设计、慢SQL用法如like %xxx语句等 |
缓存设计 | 添加缓存、是否存在缓存击穿问题 | 该加而未加缓存、缓存击穿问题等 | |
安全性问题 | 是否存在安全风险 | 文件上传验权、越权访问问题 | 文件上传未验权、越权访问数据等 |