Gerrit代码Review入门实战
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略。在实践中,给大家推荐一款免费、开放源代码的代码审查软件Gerrit。
**1、Why Code Review
Code Review是什么**
Code Review最直观的解释即看代码。常规的做法为自己看,有时代码逻辑问题可能自己看不出来,需要找同事一起看,在大家知识体系相对平均的情况下可能需要花钱专门的公司帮助查看。
Code Review需要看哪些?对于刚入职场或者刚接触到Coding的新人来说,代码风格是比较重要的一块。除此之外,编码规范及代码结构写法,框架和工具的选型,具体项目的业务逻辑,安全隐患,性能问题等都可以通过review的方式发现。Code Review从前往后大致分为结对编程,提交代码后,测试之前,发版之前,发版之后等几个阶段,越往后,Code Review的效果越差,修复的成本也越来越高。
为什么一定要做入库前Code Review
首先,代码审查的最大的功用是纯社会性的。如果你在编程,而且知道将会有同事检查你的代码,你编程态度就完全不一样了。你写出的代码将更加整洁,有更好的注释和程序结构。
其次,偷懒是人的天性,从节约成本的角度考虑,大家一般会选择在测试之前无限制的Delay Code Review。入库前做Code Review便是成本和效果之间最佳平衡点,它能及时发现问题,进行修改后确保代码质量。
最后,代码审查能传播知识。在很多开发团队里,经常每个人负责一个核心模块,每个人都只关注自己的模块。除非是同事的模块影响了自己的程序,他们从不相互交流。这种情况的后果是,每个模块只有一个人熟悉里面的代码。如果这个人休假或辞职了,其他人则束手无策。通过代码审查,至少会有两个人熟悉这些程序——作者,以及审查者。审查者并不能像程序的作者一样对程序十分了解,但至少他会熟悉程序的设计和架构,这是极其重要的。
2、Gerrit简介
Gerrit是Google为Android系统研发量身定制的一套免费开源的代码审核系统,它在传统的源码管理协作流程中强制性引入代码审核机制,通过人工代码审核和自动化代码验证过程,将不符合要求的代码屏蔽在代码库之外,确保核心代码多人校验、多人互备和自动化构建核验。
Gerrit之前的系统架构
Gerrit之后的系统架构
通过Gerrit机制将代码做分隔。
Gerrit适用性
几乎任何需要正式发布的项目都应当使用Gerrit来进行代码审查,如果Team中有新人,必须使用Gerrit确保代码质量。
Gerrit效果
整体上来说,个推使用的标准配置为Gerrit+Jenkins+Sonar,整个系统搭建完成后得到的效果为:100% Code Style问题避免入库,80% 设计问题避免入库,40% 逻辑错误避免入库,20% 安全隐患避免入库,100% 人员互备。
3、Gerrit入门实战
Gerrit部署和运行
JDK环境配置
java -jar gerrit-2.12.war init -d review_site
Gerrit人员角色配置
使用OpenID登录,第一个登录的用户为admin,创建dev帐号、review帐号和verify帐号,创建dev、review和verify用户组并添加相应用户,注意设置Username,代码同步时需要用到。
创建第一个项目,配置权限管理
添加project,选择 Inherit From All-Projects,当然也可以自定义Parent Project。
添加Verified标签支持,这里修改All-Project 项目的project.config,所有继承自All-Project的项目自动添加Verified 标签,也可针对项目自定义是否verify。
创建用户组
添加相关用户权限
将代码库同步到本地(SSH/Http)
HTTP 方式:
HTTP Password 密码在 账户 - ->> Settings -->> HTTP Password 处获取。
SSH方式:
添加SSH Public Key。
Clone代码到本地
commit-msg ,提供自动写入change-Id 至git log内功能
提交第一个change
Gerrit上进行代码审查,确认入库
Verify:
工程里面接入了jenkins自动verify,结果可在上图红框内展示verify结果。
review代码,提交入库。
本地代码库更新,获取最新入库代码
代码submit后通过git pull - - rebase 更新代码。
Gerrit入门实战-初级修补
如果所有代码提交均被打回,可以进行暴力回滚:git reset <commit>,接着重新提交Gerrit,再进行Gerrit审查入库。
Gerrit入门实战-高级修补
如果单个提交打回,则可交互式回滚:git rebase -i <commit>,修改指定commit点:git commit --amend,完成所有commit点处理:git rebase --continue,然后重新提交Gerrit,最后Gerrit审查入库。
Rebase前
Rebase 后
rebase 在同一个点上修改,不会产生审核点,多个commit点同时存在是尤其有用。
Gerrit经验谈
第一,Git别名绑定,添加别名字段,通过git review master这样简单语法提交到master源端分支,可以省去很多工作。修改系统目录或者项目目下的.gitconfig 文件,添加
也可通过git config --global alias.review 命令修改
第二,工具只是一部分,更重要的是人与人当面的沟通交流,大家讨论一个好的解决方案,才能更好的解决问题。没有交流,工具也就失去了意义。
最后,关于review积压问题,要避免提交积压,代码审核过程要及时完成,避免 Code Review流于形式。
从个推实际使用效果看,Gerrit在核心代码质量控制、知识传承、团队培养等方面都具备很高的实用价值,推荐给广大开发团队用。
Gerrit代码Review入门实战相关推荐
- Gerrit代码Review入门实战 1
Gerrit代码Review入门实战 库 代码审核 Android Gerrit 经验分享 阅读23889 代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行 ...
- Gerrit代码Review入门
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...
- Gerrit代码Review高阶实战
Gerrit代码Review高阶实战 Gerrit代码Review高阶实战 Gerrit 是一个免费.开放源代码的代码审查软件,使用网页界面.利用网页浏览器,同一团队的程序员,可以相互审阅彼此修改后的 ...
- Fastlane 入门实战教程从打包到上传iTunes connect
有关神器 Fastlane 持续集成\部署的文章网上挺多,本文定位是入门教程,针对 iOS 应用的持续部署,只需一条命令就可实现从 Xcode 项目到 编译\打包\构建\提交审核 文章稍微有点长,涵盖 ...
- Gerrit 代码审核服务器的工作流和原理
2019独角兽企业重金招聘Python工程师标准>>> Gerrit 代码审核服务器的工作流和原理 谷歌 Android 开源项目在 Git 的使用上有两个重要的创新,一个是为多版本 ...
- python入门新手项目-Python入门实战项目有哪些适合新手?
Python入门实战项目有哪些适合新手?目前市面上有很多适合新手的Python入门练手项目,Python入门需要理论与实践相结合,前面夯实基础知识,后面通过实战项目帮助你更好的运用这些Python知识 ...
- 干货 | 架构师入门实战视频课程(一)
2018-04-04 码农章为忠 <架构师入门实战视频课程> 废话不多说,直接上干货吧 这次先整理了比较初级的视频教程,后续视频会慢慢整理出来. 关注微信公众号,回复相关代码,即可获得相关 ...
- Docker Review - dockerfile 实战_使用dockerfile制作tomcat镜像
文章目录 Pre Docker 官方镜像 Dockerfile dockerfile制作tomcat镜像 准备软件 编写Dockerfile文件 dockerfile构建镜像 启动镜像 测试访问tom ...
- Gerrit代码审核服务器搭建全过程
Gerrit代码审核服务器搭建全过程 转载请标明出处:http://blog.csdn.net/ganshuyu/article/details/8978614 环境:Ubuntu12.xx 1.建立 ...
最新文章
- 《用Python进行自然语言处理》第3章 加工原料文本
- 稀疏自编码器符号一览表
- 0001-Hello world(第一弹)
- spark wai_WAI-ARIA对自动完成小部件的支持
- 代码逻辑分析_双11模块79.34%的前端代码是怎样智能生成的?
- 成为一个优秀的前端工程师,其实你也可以!
- bzoj1003题解
- alternatives命令用法
- 金融诈骗中男性更易受骗:损失数额更大
- 什么是JavaScript垃圾回收?
- centos 添加快捷
- 科技驰援 攻坚战疫 | 用友助力武汉协和医院部署捐赠物资管理系统,保证“物尽其用”...
- Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
- 初面蚂蚁金服,三面腾讯,已拿offer!绝对干货分享
- php理论掌握太少,科学网—我为什么反对让学生过早地选课和选考 - 冯大诚的博文...
- MKOnlinePlayer在线音乐播放器
- shell 中字符串变量处理
- 基于国家统计局城乡规划数据的地名提取(1)
- 人脸识别系统做CCC认证,人脸识别系统做SRRC认证
- 【黑金ZYNQ7000系列原创视频教程】01.熟悉vivado——纯逻辑led实验
热门文章
- idea 报系统分区磁盘不足_系统磁盘管理功能讲解,电脑硬盘分区格式化修改驱动器号图文教程...
- java控制器删除数据_javaWeb删除一条及多条数据
- java数据结构 队列_Java数据结构与算法[原创]——队列
- SystemView软件中“Butterworth Lowpass IIR“的完美设置
- Tomcat安装之在Mac环境下配置tomcat9
- 专用ADC与群集软件之比较
- Microsoft Dynamics CRM 2013升级2015(二)正式安装升级 2015及 Reporting Extensions安装
- Spring MVC集成Spring Data Reids和Spring Session实现Session共享
- CentOS7.0下编译安装Nginx 1.10.0
- CountUp.js – 让数字以非常有趣的动画方式显示