二、如何做好CodeReview?

202 阅读4分钟

- Live and Learn - (9).png

Code Review目的与目标

目的:

提升代码可维护性,复用性、鲁棒性(健壮性)、可阅读性

目标:

1.review代码是否符合目录设计约束(每个目录下存在解决具体哪些功能的代码,不可乱写代码)

2.review代码的逻辑缺陷以及边界情况的

3.reivew解决功能的通用性,是否可剥离出通用代码

4.代码实现是否阅读起来无障碍

基本流程

本文后续主要讨论merge前的code reiew

工具选择

  • gitlab. 直接可用,无学习成本

什么时候发起/通过/合并代码

发起:提测时(通过自测后)发起,测试和review过程并行
通过:所有comment改完之后(与测试进展无关),reviewer在gitlab上点赞表示通过
合并代码:author自行决定合并代码时机

谁来看

优先服务owner,其次其他熟悉这段业务的人

分级标准

Areview内容适用场景
不review-半夜hotfix找不到人review
快速review只看文件级的整块功能改动
检查merge request checklist
检查新增和改动的配置
倒排期需求
强临时性需求
正常需求要求压缩review时间
标准review见“reviewer职责”,业务逻辑正确性审查是optional大部分场景

常见问题和解决思路

  • 业务排的紧,有些甚至是倒排,没时间review
    • 敏捷和质量需要做平衡,可以进行一些分级约定
  • 需求本身具有很强临时性
    • 同上
  • 改动量很小,没必要再involve另一个人看
    • 既然改动量小,CR势必也能很快看完
  • 改动量巨大,没人有空去看
    • 控制改动量大的代码在少量场景(新服务,重构)
    • 上述分级约定
  • 这个模块我自己最资深,谁也看不了
    • 人人都会犯错且有知识盲区,不用紧张

Merge request checklist

在repo中新建如下文件:.gitlab/merge_request_templates/standard.md,点merge request时即可出现下拉选项

- [ ] 新增package| 描述功能
- [ ] 新增route | 描述功能
- [ ] 新增http接口
- [ ] 新增打点 | 描述功能
- [ ] 新增component | 描述功能
- [ ] 改动原有component | 描述改动点
- [ ] 改动通用函数 | 描述改动点
- [ ] 是否会对其他业务模块产生影响 | 描述影响范围

author职责

description规范

  1. Title描述本次merge request的功能/功能集合

  2. Description中,对于多个功能,分多行描述细节 (一般建议一次merge只有一个功能)

  3. Description中,对于复杂设计,专门指出或提供链接

  4. 业务风险点评估

    • 基础函数更改时,该函数被调用的所有地方都是可能存在的风险点

      • 在基础函数中修改参数时,需要充分考虑所有调用方正常流程是否会被影响
    • 在一个流程中插入新的函数,需要评估该函数是否会影响后面的流程

      • 函数是否有副作用
      • 函数调用失败是处理异常还是抛出异常
    • 考虑业务影响范围,本次代码改动有可能会对哪些业务造成影响

Review过程注意点

  • 发起review时建议微信通知一下,不然容易被遗漏

  • 必须保证自行reviewdiff,经验表明:此举能大量减少低级错误

  • author对上线时间负责,有义务催促reviewer完成review,若reviewer较忙可以换人

  • 对于reviewer的每一个comment,都应该回复:done或做解释

  • merge条件

    • 获得赞后

reviewer职责

审查内容

  • 业务层面

    • 业务划分是否合理。
    • 业务是否易理解,逻辑是否正确
  • 设计层面

    • 组件设计是否合理或者是否有更好的设计
    • 目录结构设计是否合理
  • 实现层面

    • 语言风格规范应由lint保证,看的时候不必刻意检查,但发现问题要提
    • 关注是否符合组内开发规范
    • 关注项目代码结构是否符合规范
    • 关注变量、函数命名是否合理
    • 复杂的、特殊的代码段是否有注释
    • 是否有性能问题
  • 健壮性:错误处理、业务逻辑的边界和基本的安全性

    • 边界异常是否完备
    • review阶段是否发现明显bug(一般不以发现bug为目的)

Review过程注意点

  • 对于复杂业务,先看详细设计文档,找author做简单交流
  • 有争议的点,多走动讨论
  • 确保commentsclose了再给赞