代码评审

代码评审(CodeReview),顾名思义是对代码进行评审,是软件工程的活动之一。

通过代码评审可以保证代码质量,促进团队知识共享……好处多多。

版本控制与代码评审

软件工程的各个活动总是离不开工具的支持。

代码评审工具首先必须和版本控制工具相结合的。

现在主流的两种版本控制工具:SVN和GIT。

GIT有个Google开发的代码评审工具Gerrit,可以在提交前进行代码评审,评审通过之后才允许提交到版本库。

其次,代码托管平台GitLab(号称是GitHub的开源实现)也可以用来进行代码评审(把代码fork过去,用pull request的方式实现代码评审)。

如果版本控制工具是GIT,当然优先选择用Gerrit或者GitLab来尝试做代码评审了。

但是如果版本控制工具是SVN呢?这目前还没有发现很好的解决方案。

所以问题来了,在技术选型上,该选择什么工具来进行代码评审呢?

代码评审工具选型

关于代码评审,有很多支持工具,可以查看: 简单实用的Code Review工具

开源的代码评审工具有: ReviewBoard、 Facebook Phabricator、 Codestriker、 Groogle、 Rietveld、JCR(Java Code Reviewer)、 Jupiter、 ReviewClipse

商业版的代码评审工具有: Atlassian Crucible、 Jetbrains Upsource

曾了解过上述大多数工具的使用,曾试过Crucible、Jupiter、ReviewBoard,最终综合考量(如:流行度、易用度、文档完善度)选择了ReviewBoard。

ReviewBoard简介

ReviewBoard是个开源的、可扩展的、友好的基于Web的代码评审工具,是用Python框架Django开发的。

ReviewBoard的官方网站:https://www.reviewboard.org,其title为: Take the pain out of code review | Review Board

Take the pain out of code review 可以翻译为:从代码评审的痛苦中解脱出来

ReviewBoard的源码托管在GitHub上: https://github.com/reviewboard/reviewboard

ReviewBoard的源码也是通过ReviewBoard来进行评审的: https://reviews.reviewboard.org/

ReviewBoard的DEMO: http://demo.reviewboard.org/,可以通过DEMO简单体验下ReviewBoard的基本使用

ReviewBoard官方指南介绍

要了解ReviewBoard,最好的方式莫过于阅读官方指南: https://www.reviewboard.org/docs/,ReviewBoard的官方指南有:

User Guide(用户指南), Administration Guide(管理员指南),Web API Guide(Web API指南),Extending Review Board(扩展ReviewBoard)和 Frequently Asked Questions(常见问答FAQ)。

用户指南的提纲:开始(包括代码评审的介绍、一般工作流、账户设置)、使用评审请求(评审请求的创建、修改、发布、关闭等)、评审、搜索、使用MarkDown。

管理员指南的提纲:安装、升级、优化、管理员UI、配置、扩展和站点管理。

Web API是RESTful架构,使得ReviewBoard可以用各种编程语言来集成。

ReviewBoard安装及创建站点

ReviewBoard的安装在互联网上有很多博文分享,笔者的建议是 以官方指南为准,同时可以参考互联网上的博文分享

例如,2.0版本在linux下安装指南: https://www.reviewboard.org/docs/manual/2.0/admin/installation/linux/

在安装完之后,是创建ReviewBoard站点:https://www.reviewboard.org/docs/manual/2.0/admin/installation/creating-sites/

可以创建多个ReviewBoard站点

笔者安装过程中曾出现的问题及解决方式如下:

python连接mysql时 出现DeprecationWarning: the sets module is deprecated 警告

SVN出现“error while loading shared libraries”错误

AttributeError: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'

Reviewboard时区问题

使用ReviewBoard进行代码评审

代码评审(CodeReview)一般有两种形式:pre-commit-review,post-commit-review。 
pre-commit-review是指代码提交到代码库前进行代码评审; 
post-commit-review是指代码提交到代码库后进行代码评审。

ReviewBoard同时支持以上两种形式,代码的评审主要通过ReviewRequest(评审请求)来进行的。

其中pre-commit-review的工作流为:

  • 在代码修改后,提交人创建代码评审请求
  • 相应的评审人通过评审请求对代码进行评审,如果评审不通过,提交人可以更新该评审请求
  • 评审通过之后,提交人将代码提交至版比库

当然,笔者始终认为代码评审的最好方式是提交前评审,这样能够很好的保证提交到版本库的代码都是经过评审的。

使用ReviewBoard客户端或Eclipse插件

在Web界面创建/更新评审请求的过程是比较繁琐的,好在有相应的工具简化了这个过程:

RBtools是ReviewBoard官方提供的命令行客户端,可以使用命令行进行评审请求的相关操作;

eReviewBoard是ReviewBoard的Eclipse插件;

TaoReviewBoard是淘宝开发的ReviewBoard的Eclipse插件。

笔者根据使用经历,整理出如下eReviewBoard和TaoReviewBoard功能对比表格:

功能 Tao-ReviewBoard(开源版) eReviewBoard
pre-commit-review
post-commit-review ×
版本控制工具 目前只支持SVN 支持SVN、CVS、GIT
创建代码评审请求
更新代码评审请求
diff展示(比较编辑器中) ×
关闭或重新打开评审请求 ×

创建或更新评审请求是否方便
可以在多处右击
可以跨Project
可以直接选择文件来创建评审请求

(方便)

只支持在Project上右击
不能跨Project
先列出变更文件再从中选取文件来创建评审请求

(不方便)

安装过程 安装方便
jar包放到plugins/dropins目录即可
基于Mylvy和SCM Eclipse Plugin(Subclipse/Egit/CVS)
安装时如果需要联网下载相关依赖,较耗时
安装参考: eReviewBoard简要介绍及安装

SVN与ReviewBoard集成,实现post-commit-review

曾经尝试过用pre-commit-review进行代码评审,在实施或推广之时,遇到如下问题:

代码提交人在评审请求通过之后还需要再提交代码至版本库,同时无法确保被评审的代码和提交的代码的一致性

没有实现在代码评审请求评审通过后自动提交代码(以提交人的账号)至版本库(如同Gerrit那样)

总之,还没有类似Gerrit那样的成熟方案

所以,选择了post-commit-review,关于post-commit-review,可以参考如下文档:

svn post-commit脚本样例: reviewboard源码中用户贡献的样例

rbt post 命令官方指南

svn集成ReviewBoard,让post-commit hook后台运行

https://my.oschina.net/donhui/blog/350074

ReviewBoard代码评审实践总结相关推荐

  1. 远程开发 代码提示_VS Code 远程开发和代码评审实践

    很多年前的一天,我在 TypeScript 仓库下创建了一个 issue:微软打算拿 Monaco 来干嘛?接着第二天微软就发布了 VS Code.这个巧合我吹了五年还孜孜不倦. 因为已经用上了 Ty ...

  2. 视频分享:编码与代码评审-质量与现实的最激烈冲突点(完整版)

    内容提要: 某次进度计划评审,QA发现缺少代码评审的环节,于是PM在所有编码任务之后增加了一个评审代码的任务,于是这个进度计划就通过评审了.代码评审不是走形式,领衔项目工作的你一定深受劣质代码的影响, ...

  3. 云效DevOps实践-代码评审

    简介:在行业激烈竞争业务快速运转的今天,如何在实现快速交付的同时保证代码质量一直以来都是技术团队反复探讨的话题之一.代码评审是结对编程相互切磋相互学习的方式,是敏捷开发模式中的一个重要环节,是保障代码 ...

  4. 研发效能工程实践-代码评审

    什么是代码评审 Code Review的定义:是一项单人或者多人通过阅读别人的源代码来检查代码质量的软件质量保证活动 定义有点绕口,其实就是写完代码之后让经验相对丰富一点的同事帮你检查一下你的代码,当 ...

  5. 代码评审|阿里巴巴DevOps实践指南

    编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年 ...

  6. 最佳实践-代码评审歪诗

    本文有赵玉开老师总结整理,经本人同意转载至此.如需转载,请务必保留出处! 本文作者:赵玉开,十年以上互联网研发经验,2013年加入京东,在运营研发部任架构师,期间先后主持了物流系统自动化运维平台.青龙 ...

  7. 11 个高效的同行代码评审最佳实践

    看到一篇同行评审的文章,感觉不错,特转载. 原文链接: http://www.ibm.com/developerworks/cn/rational/11-proven-practices-for-pe ...

  8. [转载]基于TFS实践敏捷-修复Bug和执行代码评审

    本主题阐释了这些功能,以继续这一关注虚拟敏捷团队成员的一天的教程. Peter 忙于编写一些代码以完成积压工作 (backlog) 项任务.但是,他的同事发现了一个阻碍他们工作的 Bug,他想立即修复 ...

  9. 【原创】项目管理杂谈(1):代码评审这点事,元芳你怎么看

    为什么80%的码农都做不了架构师?>>>    申明:因学识有限,某些见解和观点或有不妥,如有冒犯还请见谅.如需与作者联系,见文章底部个人签名处,乐于交流.Q群:210285832, ...

  10. 关于代码评审的微博讨论汇集

    编者按: 7月12日,weibo上 @自律自强 发表了一条微博:十几年来的软件项目经历告诉我,评审是最有效也是成本最低的质量保证和提升的手段,设计书和代码100%肉眼全覆盖绝对值得,而且还是迅速提高新 ...

最新文章

  1. 一篇文章带你搞懂前端面试技巧及进阶路线
  2. .net 转义包含转义的字符串
  3. sql注入mysql判断_sql注入笔记二——数据库信息判断
  4. python输出para关键词占比_使用python操作word
  5. paip.提升性能----硬盘不同转速不同缓存对比转
  6. 使用GMM进行语音性别检测(入门)
  7. 大学计算机—计算思维导论 中国大学mooc 哈尔滨工业大学 测验题目和答案
  8. 【MATLAB】机器学习:线性判别分析LDA
  9. 计算机窗口底色,将电脑的窗口背景调成护眼色-电脑护眼设置
  10. 工作总结,关于浏览器不兼容的问题。
  11. unity 报错 Some objects were not cleaned up when closing the scene. 原因与方案
  12. java实现会员充值功能
  13. 微信开发者工具-真机调试,可查看接口信息
  14. iOS自动打包,并上传蒲公英
  15. 软件测试常用文档规范
  16. ubuntu WPS 报错系统缺失字体symbol、wingdings、wingdings 2、wingdings 3
  17. Android6.0修改以太网IP
  18. RSA初探,聊聊怎么破解HTTPS
  19. python生成单位矩阵
  20. 学习理发去哪里_学理发到哪里去学

热门文章

  1. 浙江开票系统服务器窗口,浙江增值税发票综合服务平台常见问题解答
  2. c语言 数组 全部赋值0,关于C语言数组赋值方法
  3. MTK平台驱动基本介绍
  4. 阿里大数据之路:数据模型篇大总结
  5. linux基础(十四)定时任务和管理系统的临时文件
  6. 怎样通过迅捷PDF编辑器来修改PDF文件
  7. 中国网络借贷行业现状分析及未来前瞻报告2021-2027年
  8. 中小型企业网络IP地址规划案例
  9. 如何设置内网端口映射外网
  10. c语言计算音频分贝函数,获取PCM音频数据的声音分贝值