闲扯code review

今天早上要开会,所以文章早点放出来。

如果说git终于让工程师在合作撰写代码的过程中找回了丢失已久的乐趣,那么,code review的过程还是让人相当地抓狂。我用过的所有code review的工具,没有一款能让code review的过程轻松起来。

公司内部使用的工具自不必说,那是反人类的极致体验。

reviewboard和gerrit不那么反人类,但submit review和review的流程也不太方便,而且体验并不一致。submit review可以在命令行下方便地完成,但review需要点开邮件通知里的链接才能查看。如果你一直在代码上工作,而不查邮件,你可能会miss掉一些review。

不过,这些体验上的问题都是细枝末节。目前已有的code review工具的最大问题是:它不是写给程序员用的!慢着,这话听着好耳熟?没错,Linux Tolvalds在撰写git的时候,就说svn最大的问题是这玩意儿不是写给程序员用的。

如果要我设计一款code review工具,它的使用体验会类似这样:

Submit code review

$ git commit -a
$ git push

Done! 不需要更多的流程了。

这里面隐含了如下步骤:

  • git commit时会弹出一个form,所有项目都正确填写才能提交。
  • git push时会将diff push到review server上,review server会根据修改了那些文件确定出reviewers,然后从中round robin选两到三人进行review。

与之最接近的体验是gerrit:

$ git commit -a
$ git push origin HEAD:refs/for/master

但,HEAD:refs/for/master究竟是什么,我想没多少人能搞懂。如果配置了一个repo必须要经过code review后才能push到服务器,那么,为何不直接把git push用做review的命令?

Review the code

蒂尔原则:code review应该和repo紧密相连,而不是那该死的邮件。

当reviewer在同样的repo下运行git status时,会有如下提示:

$ git status
# On branch master
nothing to commit, working directory clean
You have 2 reviews:
  6ae24fe: PR12345 - can not connect to server, by Tyr Chen
  723e9e2: PR12346 - Tracking feature 123: add queue support, by Tyr Chen
You must run "git review <review-id>" to do review.

这个提示很恼人,一般git用户都会尽快完成review以便让git status的输出看上去干净些。如果review长时间得不到处理,其颜色每隔4个小时变红一些,直至鲜红。

Reviewer可以运行git review进行代码review:

$ git review 6ae24fe

根据配置,这条命令会自动调出对应的代码比较工具,比如说vimdiff。如果没有指定,则会输出标准的git diff

代码阅读完毕,可以使用:

$ git review 6ae24fe --approve|reject

这会弹出一个form,填写review的意见。

被round robin出的2-3个reviewers必须全部approve,这个review才算通过。如果某个reviewer在72小时内还没有review代码(可能休假去了),则相应的review自动被approve,review的注释是:"review skipped automatically due to XXX not-responding"。这就像信用记录,对于一个程序员来说,如果他review别人的代码总出现这样的日志,自己脸上也挂不住。

此外,review服务器还记录和索引每个review,方便日后检索。以后如果哪个问题是由某次不正确的修改导致的,那么能够很快查询到是谁批准了这段代码。

最后,review的数据最好能做visualization,每个程序员都能看到他的历史review图表(这个可以做得非常有意思),也可以看到各种各样的统计信息(比如说团队里提交代码的排行榜,review通过率排行榜,review大牛排行榜等等),让冷冰冰的code commit和code review活泼起来。

原文发布于微信公众号 - 程序人生(programmer_life)

原文发表时间:2014-02-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

机器学习为核心,DeepMind助力谷歌开发的安卓 9「Pie」今日上线

今年 5 月份,谷歌 I/O 大会宣布推出安卓 9,而后经过数月的测试,谷歌收获了大量的反馈。此外,还有小米、Oppo 等 7 家设备制造商也将测试版本放到了他...

11910
来自专栏企鹅号快讯

Python 开源项目 Top30 值得收藏

编译 | AI科技大本营 参与 | SuiSui 继推出2017年机器学习开源项目Top 30榜单后,Mybridge AI又推出了一个Python开源项目To...

464100
来自专栏AI科技大本营的专栏

从15000个Python开源项目中精选的Top30,Github平均star为3707,赶紧收藏!

翻译 | AI科技大本营(ID:rgznai100) 参与 | SuiSui 继推出2017年机器学习开源项目Top 30榜单后,Mybridge AI又推出了...

46460
来自专栏王清培的专栏

.NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)

阅读目录: 1.背景介绍 2.在业务层中加入核心领域模型(引入DomainModel,让逻辑、数据有家可归,变成一个完整的业务对象) 3.统一协调层Applic...

26370
来自专栏斑斓

设计匠艺 | 小即是美之二

小的益处还有一点,它可以使得我们在架构决策或技术选型时,可以变得更加从容。 譬如说,因为某些原因我们需要将整个企业系统从WebLogic上迁移到JBoss上,无...

33150
来自专栏Sign

creator创建小游戏子域排行榜

cocos官方有对应的子域接入教程: ? https://github.com/cocos-creator/creator-docs/blob/master/z...

98780
来自专栏PHP在线

PHP将死。何以为继?

是到了PHP落幕的时候了。就在我这个顽固的PHP分子正要把一个现有的Ruby on Rails代码库转换成PHP时,我要说这样的话。 历史在重演 我认为PHP将...

39360
来自专栏水击三千

数据库设计(一) 需求分析

目前,大多数的应用系统都属于数据库应用程序,都离不开数据库的支持。数据库设计方案的优劣对于应用程序的运行至关重要。数据库设计过程就是针对具体的应用环境,设计优化...

333100
来自专栏SDNLAB

网络可编程与验证

作者简介:唐昊,现就职于华为,从事云网络研发工作。本文所有观点仅代表作者个人观点,与作者现在或者之前所在的公司无关。

28420
来自专栏服务端技术杂谈

架构细节 | 看看 Medium 的开发团队用了哪些技术?

image.png 说到底,Medium是个社交网络,人们可以在这里分享有意思的故事和想法。据统计,目前累积的用户阅读时间已经超过14亿分钟,合两千六百年。 ...

44760

扫码关注云+社区

领取腾讯云代金券