前言

你是否曾写过一个很简单的需求或者优化?而且你认为不需要审查,就可以直接合并到主分支。可能过了几天或者几周,你突然意识到你犯了一个明显的或是不应该的错误。如果有其他人来审查代码,那这个问题可能就会被发现并及时处理。

CodeReview(代码评审)是一种用来确认方案设计和代码实现的质量保证机制,通过这个机制我们可以对代码、测试过程和注释进行检查,主要用来在软件工程开发过程中改进代码质量。

可能大家会认为必须是领域内的专家或者资深工程师才能审查别人的代码,但是以笔者的经验来看:其实并不是这样的,评审人并不需要完全理解该项目的业务需求或者有多么丰富的编码经验,只需要为本次代码评审提供新的、合理的、符合规范的视角。

下面笔者以自己的实际经验来和大家分享一下,如何做好项目开发中的代码评审。


一、为什么要做

代码评审首要目的就是为我们带来一双新的眼睛,从新的视角去看待那些潜在的问题。

以笔者目前所在的团队来说,代码审查是开发过程中的关键步骤。通过尽早发现和解决问题,不仅能提高产品的质量,还能确保代码的一致性和可靠性,它还能让开发团队对产品的构建方式与产品所需要的标准达成一致。

因此,尽管代码评审可能在当前会比较费时费力,但随着时间的推移,代码审查发挥的作用会越来越明显。


二、有哪些好处

CodeReview 习惯的保持、积极参加团队的 CodeReview,起码能有以下几点显而易见的好处:

  • 提升代码质量:代码评审可以帮助团队成员发现潜在的缺陷、漏洞和性能问题,从而确保代码的稳定性和可维护性。通过评审,团队成员可以互相学习,借鉴他人的优秀实践,提高自己的编码水平。
  • 促进团队协作:代码评审是一种提高团队协作的方式,有助于团队成员更好地了解彼此的工作内容和进度。在评审过程中,团队成员可以互相交流、分享经验,从而提高整个团队的技术水平和解决问题的能力。
  • 保证项目进度:代码评审可以及时发现和解决问题,避免在项目后期出现严重的技术债务。通过评审可以确保项目按计划推进,提高开发效率。
  • 培养团队文化:代码评审有助于培养团队的学习氛围和进取精神。通过互相评审,团队成员可以共同进步,形成积极向上的团队文化。

三、具体怎么做

3.1评审条件

  • 前置条件:代码已通过 Alibaba Java Coding Guidelines(idea 插件)的代码检查;
  • 大型项目:增加/修改超过 10 个文件或超过 200 行代码的,需组织 CodeReview 会议,邀请相关同事及高级/资深开发同事参与;
  • 小型项目:小需求修改如:少于 10 个文件变更或少于 100 行代码的),至少需要 1~2 位同事帮忙 Review 并提出修改建议;
  • 重点逻辑:建议邀请负责过该项目的同事共同 Review 一下,或者在开发的时候结对 Review。

3.2评审重点

  • 完整性检查:功能点、业务日志、异常日志等
  • 一致性检查:代码逻辑是否符合设计文档,代码风格是否统一等
  • 正确性检查:技术选型、注释是否准确、变量的定义和使用等
  • 可修改性检查:如魔法值 123,使用专门的常量类或枚举等
  • 可预测性检查:死循环、无穷递归、数组越界、空指针等
  • 可理解性检查:命名规则、注释是否清晰、git 提交记录描述等
  • 逻辑性检查:实现不过于复杂、代码拆分、可读性、扩展性等
  • 安全性检查:包括防止注入攻击、保护敏感数据、接口鉴权等

3.3评审形式

  • 会议评审:将相关评审人员集中在一起,通过会议讨论的方式进行代码评审,如无其它紧急情况,建议每月一次。此方法适用于中小型团队或重要的代码更改。

    如:

    • 部门负责人组织评审会议,时间可以固定在当月的某一天,大约 15-20 分钟;
    • 地点可以选择一个小的会议室,大约能容纳 10-15 个人,需要有投影设备;
    • 与会人员可以是部门的整个后端团队,拟定一个主评审人,大家都可以参与讨论
  • 随机抽查:随机选择一部分代码进行评审,以验证代码的质量和规范性。这种方法可以作为团队日常工作的一部分。

  • 工具支持:使用代码评审工具来自动化一些评审过程,例如代码静态分析工具和代码规范检查工具。这些工具能够提供一些有关代码质量的重要指标,并帮助识别潜在的问题。


四、还可以怎么做

4.1提出亮点

  • 不仅要提出需要改进的地方,也要提出本次代码评审的亮点,具体可以从以下几点入手:

    • 性能优化:是否有对性能有优化,合理使用数据库连接、时/空间复杂度、内存操作等;
    • 设计模式:是否有抽象出通用的设计模式,显著提高模块的复用率、扩展性等;
    • 工具/插件:是否有能提高效率的工具类,包括可以发布的插件以及自定义注解等。

4.2轮流评审

  • 需要注意的是,主评审人应该是团队里的每一位成员,而不是仅由部门领导或资深工程师来担任,理由如下:

    • 集思广益:每次的代码评审最重要的是引入新的视角来看待潜在的问题,每个人都会有自己的视角,这样有助于团队统一认识;
    • 机会平等:年轻的工程师们虽然可能经验不足,但干劲儿可能比较足,如果能借此机会得到一些锻炼,那么对团队来说会是一件好事。

4.2文档沉淀

  • 有了以上的种种具体做法,那么最终还是要把结果文档化、持久化的,具体可以:

    • 评审会议前由主评审基于模板去拟好一篇文档在会上展示,包括给出代码片段、改进建议、提出亮点等,方便会上大家及时讨论补充;
    • 会后可以上传到团队的文档空间或者工作集当中,方便团队成员随时学习、回顾。

五、文章小结

关于如何做好项目开发中的 CodeReview(代码评审)就和大家分享到这里,希望能对大家有一些帮助。

写在最后,文章如有不足和错误,还请大家指正。或者你有其它想说的,也欢迎大家在评论区交流!

【团队建设】如何做好团队开发中的 CodeReview(代码评审)?的更多相关文章

  1. 完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络]

    完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络] 地址:http://blog.csdn.net/qq_35101189/article/details/53729720?ref=m ...

  2. NC65在日常开发中常用的代码写法

    标题 NC65开发相关代码 版本 1.0.1 作者 walton 说明 收集NC在日常开发中常用的代码写法,示例展示 1.查询 1.1 通过BaseDAO查询结果集并转换 //通过BaseDAO进行查 ...

  3. Java开发中程序和代码性能优化

    现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升, 但是我觉得在开发中注意这些,更多的是可以保持一种性能优先的意识,对一些敲代码时间比 ...

  4. android开发中调用python代码(带参数)

    android开发主要用到的是java代码,但是当开发涉及到一些算法时,往往用python可以提高软件的运行速度,也更加便捷,这里分享自己项目调用python代码的方式,主要有以下几个步骤(个人方法, ...

  5. java开发中JDBC连接数据库代码和步骤

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

  6. 【转】Java开发中JDBC连接数据库代码和步骤总结

    (转自:http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html) JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含7个 ...

  7. 完整java开发中JDBC连接数据库代码和步骤

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

  8. 完整java开发中JDBC连接数据库代码和步骤 JDBC连接数据库

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

  9. (转)完整java开发中JDBC连接数据库代码和步骤

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

  10. JavaScript开发中常用的代码规范配置文件

    一.jsconfig.json { compilerOptions: { target: 'es6', experimentalDecorators: true, allowSyntheticDefa ...

随机推荐

  1. Golang支持重试的http客户端ghttp

    简介 官方仓库:https://github.com/GuoFlight/ghttp 重试的逻辑依赖了github.com/avast/retry-go 入门 client := ghttp.Clie ...

  2. Oracle自动化编译无效对象

    问题描述:使用存储过程的方式对oracle数据库的无效对象,如视图或者同义词进行定期的编译,让他变成一个有效的对象,加上定时任务可以实现自动化的处理.同时在数据库内部创建一个记录表,用来记录被编译过的 ...

  3. 解析QAnything启动命令过程

    一.启动命令过程日志 启动命令bash ./run.sh -c local -i 0 -b hf -m Qwen-1_8B-Chat -t qwen-7b-chat.输入日志如下所示: root@MM ...

  4. 【ClickHouse】1:clickhouse安装 (CentOS7)

    一:安装clickhouse 官网地址:https://clickhouse.tech/#quick-start 按照官网提供的方法快速安装:(依次执行) sudo yum install yum-u ...

  5. AJAX基础+Axios快速入门+JSON使用+综合案例

    目录 1. AJAX 1.1 概述 1.1.1 作用 1.1.2 同步和异步 1.2 快速入门 1.2.1 服务端实现 1.2.2 客户端实现 1.3 案例 1.3.1 需求 1.3.2 分析 1.3 ...

  6. Luogu P5745 区间最大和

    原题链接:Luogu P5745 区间最大和 初看这道题,

  7. 做独立开发者,能在 AppStore 赚到多少钱?

    成为一名独立开发者,不用朝九晚五的上班,开发自己感兴趣的产品,在AppStore里赚美金,这可能是很多程序员的梦想,今天就来盘一盘,这个梦想实现的概率有多少. (Solo社区 投稿) 先来了解一些数据 ...

  8. Asp .Net Core 系列:基于 T4 模板生成代码

    目录 简介 组成部分 分类 Visual Studio 中使用T4模板 创建T4模板文件 2. 编写T4模板 3. 转换模板 中心控制Manager 根据 MySQL 数据生成 实体 简介 T4模板, ...

  9. django 如何查询汇总的求和时避免没有数据导致的错误

    django 如何查询汇总的求和时避免没有数据导致的错误 在 Django 中,如果你希望对某个字段进行求和操作,并在没有数据时返回默认值,可以使用 aggregate 结合 Coalesce 函数. ...

  10. oeasy教您玩转vim - 90 - # 语法定义syntax

    ​ 内容查找 grep 回忆 我们这次研究了一下配色方案 murphy虽然配色好看 但是对于java的支持并不好 我们对于murphy进行了修改 增加了String.StorageClass颜色的定义 ...