作者: 耳朵里有风
一、代码审查概述
代码审查 3W
What: 什么是代码审查
对计算机源代码系统化审查,常用软件同行评审。
Why: 为什么做代码审查
代码审查的好处
-
提高代码质量
-
上下文共享
-
帮助新人融入
-
帮助开发人员成长
-
影响力建设
代码审查的代价
- 专门的时间和精力: 选择合适的代码审查方式
- 可能引起团队成员间的不适:沟通技巧,正向反馈
When: 什么时候审查
- 原则上有代码变更就可以进行代码审查
- 集中式(沟通高效,代价大)、异步式(随时进行),通常建议每天预留时间段进行;
代码审查工具
Git Gerrit(无代码源,讨论、异步,开源免费) Upsource(讨论、异步,10人付费)
代码审查流程
- 范根检查法: 规划- 概述- 准备 - 审查会议 - 调整、修复- 规划/跟进、一般不会使用。
- 轻量级审查流程
- 结对编程:编码过程中审查
- 同步代码审查: 编码完成后
- 异步代码审查: 比较适合异地或者团队时间不好协调的场景
二、如何审查
需要关注什么
-
编码风格: 驼峰?4空格还是Tab,一行多长,不用拼音命名,unix换行符。 大部分是可以用工具检测(阿里插件,sonarlint),少数再人工check.
-
命名规范: 命名合理可读?例如当前日期 bad: date, good: currentDate
-
功能性: 代码是否符合用户意图
- 输入输出,流程是否正确
- 边界是否处理妥当
- 是否有高并发的安全问题
-
测试覆盖:是否有测试保证
- 测试时间占开发时间 20-40%
- 集成度高: UI测试, 低:单元测试,中: 接口测试
- JACOCO可以用来统计代码覆盖率
-
复杂度
- 圈复杂度: V(G)= 判定节点数+1,通常在10以内(代码抽取、反向表达、单一职责、使用多态都可以降低复杂度)
-
注释
- 帮助理解代码、正确使用
- 好的代码不需要注释? 代码可读性媲美自然语言时可不写。
- 对外公共接口、模块、系统描述需要注释
- 宁缺毋滥(注释和代码有出入)
-
设计
- 提升稳健性、可读性、可维护性、扩展性
- 不要过度设计(比如:事不过三)
-
安全性
- 源码中是否包括凭证
- 敏感数据是否加密存储
- 输出是否安全(按需返回)
- 输入是否安全(如非法值处理)
- 权限管控是否正确(尽量不使用权限叠加)
- 安全审查工具: sqlmap owasp(依赖安全检查),WebCruiser
-
性能
如何提高审查效率
- 作者
- 变更描述要清楚(提交代码描述真实有效)
- 单次改动不要太大(小步提交)
- 积极接收反馈
- 审查者
- 度量标准(标准统一,不要轻易变化)
- 审查速度(要及时)
- 给予良好的反馈(不要只说坏不说好)
此博客为原创文章,未经本组织允许,不得用于商业用途以及传统媒体。网络媒体或个人转载请注明出处和链接,否则属于侵权行为。
网友评论