我们如何做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的积极意义大家都懂,如何落地取决于团队的负责的决心及团队成员对代码的自我要求程度。取决于你做不做。

 

共勉。

相关文章
|
供应链 安全 Shell
供应链投毒预警 | 开源供应链投毒 202401 最新月报来啦!
悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库,结合程序动静态分析方法对潜在风险的开源组件包进行分析和监测,捕获大量开源组件恶意包投毒攻击事件。2024 年 1 月份,悬镜供应链安全情报中心在 Npm 官方仓库(https://www.npmjs.com/)和 Pypi 官方仓库(https://pypi.org/)上共捕获 675 个不同版本的恶意投毒包,其中 Npm 仓库投毒占比 90.48%, Pypi 仓库投毒占比 9.52%, 从每日捕获的投毒包数据来看,Npm 仓库仍然是开源组件投毒的重灾区。
502 1
|
JavaScript 前端开发 安全
15个最佳的代码评审(Code Review)工具
  代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能。代码审查程序以各种形式,如结对编程,代码抽查等。在这个列表中,我们编制了15个最好的代码审查工具,这将有助于开发者节省代码审查时间。
5061 0
|
安全 Java 测试技术
code review 正确方式
code review 正确方式
357 1
|
Java 网络安全
几个基于springboot在线服务过段时间突然停掉的原因
几个基于springboot在线服务过段时间突然停掉的原因
478 0
|
前端开发 JavaScript Java
SpringCloudGateway网关服务实现文件上传功能
SpringCloudGateway网关服务实现文件上传功能
398 9
|
Oracle 关系型数据库 数据库
[windows]远程桌面失败提示CredSSP加密修正
[windows]远程桌面失败提示CredSSP加密修正
2852 6
|
自然语言处理
怎样能写出完美的Prompt
【8月更文挑战第20天】怎样能写出完美的Prompt
|
开发框架 安全 IDE
|
编解码 监控 前端开发
Sentry 监控 - Alerts 告警
Sentry 监控 - Alerts 告警
1038 0
Sentry 监控 - Alerts 告警
|
存储 监控 安全
System.getProperty()方法总结
System.getProperty()方法总结

热门文章

最新文章