我们如何做Code Review

简介: 我们如何做Code Review

提到Code Review(CR),就和单元测试一样,虽然一直在提倡,大家也都知道他的重要性,但是实践起来总是差点意思,有个说法是CR就和鬼一样,一直有他的传说,但一直没有见到过。本文梳理下团队目前在做的CR实践,做点沉淀。

01

目标是什么?


任何活动都有它的目标,CR也不例外,对于CR,团队给出的目标是:为了保证公司整体代码的健康状况随着不断迭代,始终保持一个较高的水平,希望通过规范化代码评审及其过程,可以提高代码质量、减少错误、促进团队合作和知识分享,提高软件开发的效率和质量。

 

从这个目标中,就可以看出CR的种种好处(其实大家都能看得到,只是无法保证落地):

 

  1. 统一代码风格:虽然实现一个需求有各种各样的方式,但统一的代码风格有助于团队间的沟通交流,也有助于快速分析确认问题,所以在CR的过程中,非常重要的一项内容就是统一代码风格,包含命名规范、循环规范、复杂度规范等,需要团队提前声明并达成一致。

  2. 提升能力:“Talk is cheap, show me the code”,不论是参与评审代码的人,还是被评审的人,都会在一次次的CR中提升自己,因为CR的过程就是发现自己不足的过程。

  3. 知识共享:在评审过程中遇到好的实现,就可以快速推广,遇到常见的问题,就可以提前避免,让个人的经验快速变成团队经验。我们的新人加入团队后,有件事就是查看过程的CR记录,了解团队的沉淀。

 

02

有效地保障机制

 

 

如上图所示,为了保证CR的持续落地,形成规范,团队建立了有效的机制来保障这一活动不走样,不流于形式:

 

  1. 代码规范:通过学习《阿里JAVA开发手册》,结合团队自身的特点,重新定义的更有效的代码规范,并导入到 SonarQube中,变成静态扫描规范,融入CI过程中,每次Commit必须通过增量扫描。

  2. 工具使用:除了CI的扫描外,还需要在本地进行一些常规的扫描,快速发现问题并解决问题,如sonarLint插件、P3C插件等,在本地自行检查代码是否合规范


  3. 代码评审:双周举行一次线上/线下代码评审,至少一名技术委员会成员参与,重点关注代码规范、逻辑异常、代码优化、代码缺陷及性能风险等方面的问题,问题统一记录。


  4. 复盘交流:跟踪代码评审是否落地、发现问题是否及时修复。分享评审过程中的典型问题,共同学习和成长。

 

03

评审过程中的策略


在评审过程中,要特别注意不能把代码问题升级成为人的问题,组织者要特别注意引导和及时地提醒,在评审过程中,建议:


  1. 不是每个人的经历都跟你一样: 有些东西对你来说是常识,但有些人可能并不知道,即使他们的能力并不差。你可以说这些东西是常识,但不要显露出嘲笑或高人一等的姿态。

  2. 礼貌用语: 使用礼貌用语(比如“请”)表示对代码提交者的尊重,特别是当你要他们在细节上做出一些调整(比如格式化)时。

  3. 避免夸大: 简单一点,把你的顾虑和问题说出来,这样有助于你获得期望的结果。

 

04

成果展示


CR在团队中的落地已经有一段时间了,这个活动将持续进行下去,目前发现的问题数如下:

 

可以看到,评审过程发现的代码缺陷和性能类其实并不多,更多的是集中在代码规范和代码优化上,这也符合对CR的预期。不能寄希望于CR能发现多少缺陷,因为这本身就是类似于静态代码检查。


代码评审记录表如下图所示:


 

05

CR的积极意义大家都懂,如何落地取决于团队的负责的决心及团队成员对代码的自我要求程度。取决于你做不做。

 

共勉。

相关文章
|
人工智能 vr&ar
AIGC领域又有大动作了!AI视频“黑马”Morph Studio 来袭,1080P高清画质视频免费生成!
AIGC领域又有大动作了!AI视频“黑马”Morph Studio 来袭,1080P高清画质视频免费生成!
656 2
WK
|
开发者 Python
Python 设计规范
Python的设计规范覆盖了代码布局、命名、注释、函数编写及模块化设计等多个方面,旨在提升代码的可读性与维护性。其中包括缩进、行宽、空行等布局要求;变量、函数、类等命名规则;单行与多行注释说明;函数长度与职责划分;模块的单一职责、开放封闭与依赖倒置原则;避免硬编码并使用有意义的命名;以及遵循PEP 8官方编码标准,以确保代码风格的一致性。遵循这些规范能帮助开发者编写更高质量且易于维护的Python代码。
WK
951 2
|
存储 人工智能 自然语言处理
Cursor这类编程Agent软件的模型架构与工作流程
编程Agent的核心是一个强大的大语言模型,负责理解用户意图并生成相应的代码和解决方案。这些模型通过海量文本和代码数据的训练,掌握了广泛的编程知识和语言理解能力。
1314 1
|
Oracle 关系型数据库 数据库
[windows]远程桌面失败提示CredSSP加密修正
[windows]远程桌面失败提示CredSSP加密修正
3351 6
|
缓存 网络协议 前端开发
Web 性能优化|了解 HTTP 协议后才能理解的预加载
本文旨在探讨和分享多种预加载技术及其在提升网站性能、优化用户体验方面的应用。
Web 性能优化|了解 HTTP 协议后才能理解的预加载
|
自然语言处理
怎样能写出完美的Prompt
【8月更文挑战第20天】怎样能写出完美的Prompt
|
存储 数据库 数据库管理
SQLite支持哪些数据类型?
【7月更文挑战第31天】SQLite支持哪些数据类型?
1717 8
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
【7月更文挑战第15天】Python的协程与异步函数优化Web性能,通过非阻塞I/O提升并发处理能力。使用aiohttp库构建异步服务器,示例代码展示如何处理GET请求。异步处理减少资源消耗,提高响应速度和吞吐量,适用于高并发场景。掌握这项技术对提升Web应用性能至关重要。
378 10
|
供应链 JavaScript Shell
供应链投毒预警 | 恶意NPM包利用Windows反向shell后门攻击开发者
本周(2024年02月19号),悬镜供应链安全情报中心在NPM官方仓库(https://npmjs.com)中发现多起NPM组件包投毒事件。攻击者利用包名错误拼写方式 (typo-squatting)在NPM仓库中连续发布9个不同版本的恶意包,试图通过仿冒合法组件(ts-patch-mongoose)来攻击潜在的NodeJS开发者。
428 2
|
网络协议 Ubuntu Linux
Linux系统之mtr命令的基本使用
【7月更文挑战第5天】Linux系统之mtr命令的基本使用
591 4