代码检视的新姿势!在IDEA中得到沉浸式Code Review新体验
大家好,好久不见,又见面了。
在消失的这段时间里,我做了件大事,见证了儿子的出生并陪伴其一天天的成长。停止更文的200多天里,还能得到小伙伴们持续的支持,让我备受鼓励。对一个技术人员而言,分享技术观点,并能得到同行小伙伴的认可与称赞,这本身就是一件值得开心的事。



三月三日天气新,长安水边多丽人。
在大多数古诗词中,水边就是一个邂逅爱情的神奇地方,尤以《诗经》为甚,比如大家耳熟能详的所谓伊人,在水一方。时光荏苒,沧海桑田,在那从古流到今的江河之上,总归是留下了他们的相思。
与诗词世界的水边多丽人相比,码农的世界似乎又是另一番景象、更多地是常在河边走、哪有不湿鞋。经常在所谓的“屎山”代码中修修补补,总会有踩不尽的坑。这个时候,代码review便成了开发团队中质量保证的关键一环,很多做的比较好的团队,也会有定期代码review的制度。
停更小时的这段时间里,我还干了一件小事,将几年前开发的一个IDEA的Code Review工具插件给重构了一版,还配套上对应的服务端,从一个单机版本地review工具,摇身一变成为了支持团队协同作业的检视平台。

自己使用了一段时间,也开源有一段时间了,收到了很多积极的反馈。所谓独乐乐不如众乐乐,这里给大家介绍并分享下,希望能够帮助到奋战在code review一线的朋友们。
最纯粹的代码检视能力
在自己的日常工作中有很大一部分时间都是用来检视团队的代码,各种检视工具也都体验了一下。市面上已有一些成熟的代码review系统,比如基于git提交记录进行的在线review操作(如MR单里面进行review,或者是gerrit的入库前review),或者是其余的一些开源的web界面端review系统,其功能虽然强大,但是使用上总是不够方便:
- 代码不同于小说审稿,纯文本类型的阅读式review模式,很难发现逻辑层面的问题,想跳转到某个具体方法中看下实现细节都不行
- 代码review完成之后,针对评审意见的逐个确认、跟踪闭环也比较麻烦
- 代码开发与代码review相互分离,平时写代码的时候发现个有问题的逻辑,不能方便的记录并传递、跟进其闭环
- ...
对于大部分程序员来说,在IDE中查看代码才是最佳模式,IDE才能给人阅读代码的熟悉体验。通过在IDE中进行查看、跳转、搜索、分析调用,这样才更有利于检视出深层的代码逻辑问题。此外,平时开发过程中,如果写代码的时候发现一些问题点,如果可以直接在IDE中记录下来,然后交由对应责任人去修改,这样的代码review体验岂不是更方便、更高效?
基于此想法,利用业余时间开发了IDEA配套的代码review插件,上到应用市场之后,也收获了相对比较高的评分,也收到很多同学的私信赞扬,说明程序员“苦code review久矣”!
看了下应用市场的下载统计,海外的使用记录竟然也有不少,难怪之前收到一些建议要求做国际化适配的(我的代码比我先去了漂亮国o(╯□╰)o)~


简单才是硬道理
既然都已经集成在IDEA中了,那么使用起来,主打的就是一个简单。
当我们阅读代码的时候,发现有问题或者有疑问的点时,只需要选中有问题的代码片段,然后按一下alt+a即可打开评审意见窗口,然后记录下评审意见,保存即可。

风水轮流转,当我们被别人提了评审意见的时候,只需要按住alt按钮,并点击对应记录,便可以弹出确认窗口,对评审意见进行确认与答复。

已添加的评审意见,会显示在IDEA窗口的下方表格中,双击评审意见表格中黄色的区域,可以直接在表格中修改对应字段的值;而双击评审意见表格中白色区域,可以直接跳转到评审意见对应的代码位置。 代码中被提过评审意见的地方,代码行号旁边会有对应标识提醒(刚添加评审意见之后不会出现,必须要关闭当前类再次打开的时候才会出现)

IDEA本地的评审数据,支持一键导出到Excel表格中,进而可以用于发送或者归档等操作。同时,支持将本地Excel表格中内容导入到IDEA中,方便在IDEA中进行跳转查看意见内容,这个比较适合使用单机版本的同学,两个人之间交换评审意见。

主打的就是个性化
不同公司对代码review的要求也各不相同,可能会涉及到代码review的时候需要记录各种特征字段,比如问题归属版本、代码分支、严重级别等等。在最初的插件版本中,因为就是自己业务写着方便自己使用的,所以很多代码检视属性字段都是固定的。本次重构版本中,全面支持了检视字段随意定制能力,您可以通过简单的配置来定制满足您的个性化诉求,让代码检视活动更加契合您团队的气质。
V4.0.1开始支持评审字段内容的自定义能力,在设置中可以进行调整。

在字段自定义的界面中,对配置文件进行修改,增加或者删除字段值,修改完成之后点击保存即可。
重要
配置操作前,请先了解下配置字段中每个字段的具体含义,以免配置错误影响插件功能。具体说明,可以点此了解
如果配置错误导致插件功能出现问题,您可以点击配置界面左下角的
恢复默认配置按钮,恢复到插件默认状态,然后重新去修改配置即可。
虽迟但到的团队协同
随着使用的同学数量增加,也收到越来越多的同学反馈希望加一个团队协作能力,这样可以方便团队内评审活动的开展。于是乎,在原有的本地review功能基础上,增加了插件配套的服务端交互能力,这样就实现了团队内成员间代码review意见的管理、统计以及彼此的协同。
团队协同版本的整体交互示意图,如下示意:

与本地单机版本不同,如需在团队中进行协作,需要团队自行部署私有化的代码检视协同服务端(毕竟代码是公司的核心资产,本地化部署可以解决所有代码管理的后顾之忧,不用担心源码泄漏),然后就可以很愉快的在团队内互(xiang)相(hu)检(shang)视(hai)了。
在开启团队协同前,需要打开IDEA插件界面进行网络版本配置。点击settings按钮,打开设置界面,可以切换界面中英文显示,然后切换到网络版本:

在网络版本中,输入搭建好的服务端地址,点击连接测试成功后,再输入账号和密码,点击登录测试,验证成功后即可点击下方的保存按钮。

设置完成后,会自动从服务端拉取已经配置好的评审字段配置信息、以及服务端的项目信息列表等。使用过程中用户也可以手动点击同步配置按钮,从服务端拉取最新的配置信息。

到这里,如果上述操作都是成功的,就已经大功告成了。 下面就可以开始使用了。 评审完成之后,点击提交服务端,可以将本地的评审意见内容提交到服务端(如果有配置webhook通知,还会收到相关消息推送,可以自行扩展推送到企业微信、钉钉或者公司内部的IM工具中)

选择具体项目以及拉取范围后,点击服务端下载可以从服务端拉取评审意见到本地IDEA中。比如别人给我提了评审意见,我可以拉取到自己的IDEA中,双击跳转到对应的代码位置,进行问题的确认处理,确认完成后,可以在本地IDEA中对评审意见进行答复,答复完成后提交本地数据到服务端,完成整个review过程的闭环。

怎么样,是不是很简单?

Last but not least, 如何获取
终于说到最核心的问题了。
如果你已经被上面的介绍所吸(xi)引(nao),并且迫不及待的想要试用的话,一种最简单的方式,就是在IDEA的plugin marketplace中搜索Code Review关键字,找到Code Review Helper插件并安装。

如果您需要在团队中来使用本插件,您可以选择部署配套的服务端,来实现团队成员之间的协同配合。具体部署方式,可以点此查看。
如果您有兴趣进行二次开发定制,也可以从上面地址中,找到对应的插件以及服务端的开源代码路径。
当然咯,在使用过程中,如果发现有bug或者有功能建议,欢迎提issue单,或者联系本人、一起深入地聊聊,时间允许的情况下,响应还是蛮快的,哈哈。。

好啦,就聊到这里吧。从这篇文章开始,恢复日常的更文,如有兴趣,欢迎关注。
我是悟道,聊技术、又不仅仅聊技术~
如果觉得有用,请点赞 + 关注让我感受到您的支持。也可以关注下我的公众号【架构悟道】,获取更及时的更新。
期待与你一起探讨,一起成长为更好的自己。

代码检视的新姿势!在IDEA中得到沉浸式Code Review新体验的更多相关文章
- Android中的沉浸式状态栏效果
无意间了解到沉浸式状态栏,感觉贼拉的高大上,于是就是试着去了解一下,就有了这篇文章.下面就来了解一下啥叫沉浸式状态栏.传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别.这一样就在一定 ...
- 新姿势!Redis中调用Lua脚本以实现原子性操作
背景:有一服务提供者Leader,有多个消息订阅者Workers.Leader是一个排队程序,维护了一个用户队列,当某个资源空闲下来并被分配至队列中的用户时,Leader会向订阅者推送消息(消息带有唯 ...
- 开发中Design Review和Code Review
一.Design Review 详解 翻译为设计评审,也就是对需求设计进行审核,防止出现异常问题,例如下面的这些 可用性 外部依赖有哪些?如果这些外部依赖崩溃了我们有什么处理措施? 我们SLA是什么? ...
- 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用
0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...
- JSON CSRF新姿势
以前做渗透测试,遇到过很多次POST数据为JSON数据的CSRF,一直没有搞定,最近发现一个新姿势, 本文作者:Mannix@安全文库 微信公众号:安全文库 测试的时候,当应用程序验证了Cont ...
- bzoj1656: [Usaco2006 Jan] The Grove 树木 (bfs+新姿势)
题目大意:一个n*m的图中,“.”可走,“X”不可走,“*”为起点,问从起点开始绕所有X一圈回到起点最少需要走多少步. 一开始看到这题,自己脑洞了下怎么写,应该是可过,然后跑去看了题解,又学会了一 ...
- Java计时新姿势
为获得更好的阅读体验,请访问原文:传送门 前言: 最近公司来了个大佬,从他那里学到不少东西,其中一个就是计时 的新姿势「StopWatch」,赶紧来一起了解了解吧! 一.最简单的计时 在我们的程序中不 ...
- NET Core 3.0 AutoFac替换内置DI的新姿势
原文:NET Core 3.0 AutoFac替换内置DI的新姿势 .NET Core 3.0 和 以往版本不同,替换AutoFac服务的方式有了一定的变化,在尝试着升级项目的时候出现了一些问题. 原 ...
- Python一键转Jar包,Java调用Python新姿势!
粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 本文结构: 需求背景 进击的Python Java和Pytho ...
- 【漏洞复现】PHPmyadmin 4.8.1后台Getshell新姿势
原文地址:https://mp.weixin.qq.com/s/HZcS2HdUtqz10jUEN57aog 早上看到群里在讨论一个新姿势,phpmyadmin后台getshell,不同于以往需要知道 ...
随机推荐
- Blazor实战——Known框架增删改查导
本章介绍学习增.删.改.查.导功能如何实现,下面以商品资料作为示例,该业务栏位如下: 类型.编码.名称.规格.单位.库存下限.库存上限.备注 1. 前后端共用 1.1. 创建实体类 在KIMS项目En ...
- 聊聊CSS 缓动函数的新成员linear()
CSS 缓动函数是一种用于控制 CSS 动画过渡效果的函数,可以让动画变得更加自然.这篇文章将介绍一种新的 CSS easing function,即 linear(),它可以模拟出更复杂的缓动效果, ...
- drf多方式登录接口(手机号、邮箱、验证码)登录
题目 ##### 3 多方式登录接口#### -使用auth的user表扩写 -用户名+密码 -手机号+密码 -邮箱+密码 -签发token逻辑,放在序列化类中写 方式一: serializer.py ...
- 前端八股文everybody准备好了没
引言 由于最近比较忙活没时间学习新东西,现在得空想着能不能好好整理出一些有用的东西,让记忆深刻一点,免得到时候实习找工作面试的时候一问三不知,也希望大家能指正出错误和对大家有点帮助,一起进步,加油奥里 ...
- 使用yaml进行数据驱动
一.需求描述 1.请求登陆接口,从登陆接口的响应头数据中获取token值,并写入yml文件: 2.读取写入yml文件中的token值作为下个接口的传参,请求查询物料列表接口,查看查询结果. yaml_ ...
- Volo.Abp升级小记(二)创建全新微服务模块
@ 目录 创建模块 领域层 应用层 数据库和仓储 控制器 配置微服务 测试微服务 微服务注册 添加资源配置 配置网关 运行项目 假设有一个按照官方sample搭建的微服务项目,并安装好了abp-cli ...
- STL-stack(ACM)
1.没有.clear()操作,需要手动pop() 重构函数(默认) stack<int> a; 基础操作 a.push() // 入栈 a.pop() // 弹出栈顶元素 a.empty( ...
- S32DS学习日志:debug文件和烧录的.hex文件
工程导入之后先clean一下,重新编译生成的文件默认在Production文件下面,得重新设置 折腾半天用jlink烧录没反应,原来是这里错了. production下的文件是用来用来集成bootlo ...
- Helm实战案例一:在Kubernetes上使用Helm搭建Prometheus Operator监控
目录 一.系统环境 二.前言 三.Prometheus Operator简介 四.helm安装prometheus-operator 五.配置prometheus-operator 5.1 修改gra ...
- 使用Docker将Vite Vue项目部署到Nginx二级目录
Vue项目配置 使用Vite创建一个Vue项目,点我查看如何创建 配置打包路径 在Nginx中如果是二级目录,例如/web时,需要设置线上的打包路径 在项目跟路径下创建两个文件:.env.produc ...