代码审查的方式
代码审查主要有两种方式:
1. pre-push:在提交合并代码之前,先进行审查,通过和才能合并。这是一种非常严格的审查方式,可以确保每个发布的代码都是已经被审查过的。这种放到在github上维护的开源项目极其合适,代码的所有者可以确保代码是在自己的控制范围。
2. post-push:代码提交后,再审查之前的代码。这是非常宽松的审查方式,审查的效果肯定是打折扣的,但是好处是可以忽略一些不必要的审查以节约时间。其实在国内这种没有太多工程师文化的地方,这种方式是比较好在早期推行的。
Pre-Push规范工具:
阿里出的Java开发手册发布之后,发布了配套的代码检查插件,在Intellj 和 Eclipse中都有。以Intellj 为例,Preferences -> Plugins -> Browse repositories... 搜 Alibaba 即可。安装完成之后需要重启IDE。
插件按照阿里Java开发手册对代码进行校验。
安装完成之后会出现右键菜单:
点击扫描之后的结果是:
在编辑器中也会有直接提示,依据轻重缓急,出现黄色警告或者红色警告,鼠标移动到上面之后,会出现提示信息。点击 more 会有详情,有时候还会有代码样例。
Pose-Push Review工具
这个事情在团队中实行的话,是一定需要有个工具的,相关的工具有很多,审查方式也各有偏重。这里工具主要是解决了这几个问题:
1. 有一个更为直观的界面查看diff。
2. 可以基于工具进行简单的标记和通知,直接把标记写在代码里更利于沟通。
3. 可以知道哪些提交时已经被谁审查过了,方便审查的协作。
这里例举一些,供参考选择。
1. Gerrit:google的产品,名气很大,但是这个东西设计理念比较陈旧,据说也没有什么维护了,不推荐。
2. github pull request:这个当然很好,典型的pre-push方式,但是个人用也没太多协同的事情,团队用又觉得贵。其实感觉用bitbucket会经济实用些。
3. phabricator:facebook内部使用并开源出来的工具,大而全,功能超级强大,但相对的就是非常复杂,界面设计非常欧美的风格,运行速度也有点慢。
4. gitlab:如果是自己搭建的git server,这个是不错的选择,相当于自己弄了个github,就是配置环境会比较多工作量。
5. upsource:JetBrains的产品,只有post-push的方式,但是从安装、界面、到使用都是挺不错的,唯一问题就是10个人以上要收费,而且还很贵。
Upsource很符合轻量级 Code Review 的场景。
Upsource的安装和配置
Upsource是JetBrains出品的专业CodeReview工具,其安装配置简单,
专注于代码浏览与审查,免费版支持 admin + guest + 8个用户。对于小团队来说是很好用的。此外,支持跟第三代码审查工具的集成,比如SonaQube。
Upsource 的安装和配置是非常简单的,下载安装包Zip文件,解压到特定目录。然后用 /bin/upsource.sh start 命令来启动就可以了,然后根据跳出来的输出的地址(主机名:8080)来打开Web端配置页面。需要注意的是,第一次启动速度是非常慢的,需要配置初始环境。Upsource非常好的解决了安装问题,配置、数据、日志都放在同一个目录中,即解压出来的原始目录,这大大简化了使用。
另外在服务器上启动过程中,遇到过一个坑,启动过程中报错,导致每次启动到过程中都会出错退出。系统为CentOS 7.2,Upsource版本为:upsource-2017.2.2398。Google也没有发现解决方案,最终换成:upsource-3.5.3616(2016-11月版)问题得以解决。而Mac上则可以直接启动,没有任何问题。
Upsource很依赖内存,官方推荐需要8G内存才能安装,虽然不会全部用掉,但是整体需要大于8G。
jetbrains.jetpass.dao.api.FieldException: Field Service::redirectUris is not a valid URIs set
。。。。
Caused by: jetbrains.exodus.database.exceptions.SimplePropertyValidationException: redirectUri should be valid uris set but was http://127.0.0.1:8080/~generatedTree
。。。。
* Error while starting JetBrains Upsource 2017.2: HTTP 400 Bad Request
[2017-10-23 11:24:15,327] * Stopping Upsource Frontend
|
安装完成之后,就是配置项目和用户:
通过 http://
:/administration 来进入项目和用户管理页面。
单击 Users 就进入用户管理界面,增加用户的操作很简单,不截图说明了。组和角色通常不用设置。
点击 Create project 进入项目设置:
特别注意:我们最好能够保持 Git项目名、IDEA项目名、Upsource项目名三者一致,这样就可以完全依赖自动配置了。此外,如果用Git连接 + SSH key的方式来连接版本控制,对于Mac和Linux,SSH Key 存储在 用户主目录的.ssh文件夹中,即 ~/.ssh/id_rsa 文件。填入GIt地址,上传Key然后点击 Test Connection。
解释一下 Code review ID pattern,在做 CodeReview 过程中每次 Review 都需要一个ID,系统会根据这个 Pattern 来自动生成。
完全配置完成之后,点击 create project 之后就会在后台创建相关信息,这也需要一点时间,页面上会提示在这个过程中不要重启 Upsource。
在项目和用户创建完成之后,就能为用户配置项目权限了。 http://
:/administration 来进入项目和用户管理页面,单击 Users,在众多的用户中,选择任何一个点进去,看到如下界面。可以配置项目的管理员权限。
除了Web端的工具之外,Upsource作为JetBrains的产品,自然跟相关的IDE是紧密集成的。在Intellj IDEA中配置插件:Preferences -> Plugins -> Browse repositories... 搜 Upsource 即可。安装完成之后需要重启IDE。由于这个插件是官方提供的,所以安装相当于升级,会对注册信息做校验,可能需要重新注册。
Preferences -> Tools -> Upsources -> connection, 填入Upsource的连接方式,然后点击 Test Connection, 会自动跳转到Web页面进行授权登陆。该过程只需要执行一次即可,授权会保存起来。
配置完之后,在IDEA右下角会出现 UP 的图标,这个图标点击之后会出现一些常见的设置,包括当前项目是对应的 Upsource 中的哪一个。在IDEA项目名和Upsource项目名一致的情况下,插件会自动配置好项目关联,否则需要手动选择。
Upsource 的使用
打开 http://
: 进入主页面,可以看到主页左边为项目列表,右边为最近活动列表。选择任何一个项目,点击进入项目主页,会看到最近的Commit列表和最近的活动列表。
这里的功能分成两大块:CodeReview 和 代码统计。
进入核心的Review功能:单击任何一个Commit。左边是提交列表,点开可以看到修改详情,这个和IDEA的GitReivew工具体验是一致的,非常清晰好用。同时还提供了 对比 和 查看原始文档的功能。
在修改详情的行号处,随着鼠标悬停会有一个Edit按钮,点击就可以增加 Comment 了。增加的评论可以被回复、修改、标记完成、增加标签,而且这个评论会被实时同步到IDE中,这样开发人员就能在IDE中进行查看和操作了。在输入 Comment 的时候,可以通过 @ 符号来指定接收人。
除了Review功能之外,项目统计功能也有一定用,在项目主页点击 Analytics 进入代码活动统计:
可以看到有几个核心功能:
Commit Activity:提交历史记录,可以根据提价数量来进行统计。
Project Treemap:可以根据 子项目、包、文件夹 等对 文件数量、文件大小 进行统计,并用图的方式显示出来。个人觉得这个还是很有用的。
File History:按照时间线来列举提交的文件。感觉没什么用。
Code Review:这个项目的 Review 记录,按照时间来进行显示。
Reviewers Graph:显示 审核人 和 代码作者之间的关系图。
参考:
如何提高团队代码质量——代码审查的实践 http://developer.51cto.com/art/201505/475312.htm
User Guide: Review vs Audit https://secure.phabricator.com/book/phabricator/article/reviews_vs_audit/
CodeReview工具:UpSource+SVN+Idea搭建与使用 http://www.zhimengzhe.com/linux/209113.html
阿里Java开发手册 https://yq.aliyun.com/articles/215391?spm=5176.100240.searchblog.58.Nfg1hd
插件使用指南 https://yq.aliyun.com/articles/225187?spm=5176.100240.searchblog.9.Nfg1hd