简单可行的code review规则

摘要:
因为没有CodeReview,衡量代码质量的唯一标准是每分钟“WTF”的频率。一些没有采用代码审查模式的高级工程师可能会有一些阻力,但纵观行业,代码审查iw的好处毋庸置疑。CodeReview的内容内容:编程素养、业务逻辑、架构设计、单元测试、性能、安全规则主项目撤回提交权限,由QA控制。qa分支合并的开发需要qareview的确认。

前言

曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此!

每当接手别人的代码,都有一种想重新写一遍的感觉,等到别人再来接手你的代码时,同样的感觉。。。为什么会有这种现象存在?因为没有Code Review

简单可行的code review规则第1张

衡量代码质量的唯一标准就是每分钟骂出“WTF” 的频率。(出自Martin(Bob大叔)《代码整洁之道》)当你的代码在做 Code Review 时,审查者要是愤怒地吼道:

“What the fuck, is this shit?” “Dude, What the fuck!” 等言辞激烈的词语时,那说明你写的代码是 Bad Code,如果审查者只是漫不经心的吐出几个:

“What the fuck?” 那说明你写的是 Good Code。

价值

简单可行的code review规则第2张
 

你说我的code需要review?

一些没采取过code review模式的资深工程师可能会有一些抵触情绪,但放眼业界,code reveiw的好处是毋庸置疑的。

Google内部人士的一段话。

The biggest thing that makes Google’s code so good is simple: Code Review.

At Google, no code, for any product, for any project, gets checked in until it gets a positive review.

1、保证项目质量、提高代码可读性

2、加速个人成长、突出团队价值

3、知识传播与共享

4、凝聚团队共识

5、不断提高团队的下限

but,良好的程序设计总是优于code review,做好设计才能减少review工作量。

内容

Code Review的内容:编程素养、业务逻辑、架构设计、单元测试、性能、安全

规则

master项目收回提交权限,由QA把控,develop到qa分支merge需要qa review确认。

feature分支往develop分支提pr必须遵循的游戏规则:

  1. 每次提交review代码修改行数不得超过1000行,一小时内review完(先试行,最终目标400行,Cisco开发团队研究显示,进行一次Code Review不要超过400行代码(LOC, Line of Code)。大脑一次只能有效处理这么多信息,超过400 行找到缺陷的能力减弱。)

    简单可行的code review规则第3张
  2. 至少每个周期(两周一个开发周期)提一次review,周五早上互相喊一下,最晚提交时间周五下午2点前,周五下午的时间用来修改review代码

  3. 需要保证单元测试覆盖到,功能点要拆分足够细

  4. checkout feature分支后能编译运行正常

  5. 工作日可以上午11点前提pr,需要组内指派资深工程师两名, 至少一人review通过

  6. 提交pr两天内需要处理完毕,打回或通过

小步迭代,理论上每周自测完成就可以提交pr merge到develop分支

Checklist

常规项

  • 代码能够工作么?它有没有实现预期的功能,逻辑是否正确等。

  • 所有的代码是否简单易懂?

  • 代码符合你所遵循的编程规范么?这通常包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释。

  • 是否存在多余的或是重复的代码?

  • 代码是否尽可能的模块化了?

  • 是否有可以被替换的全局变量?

  • 是否有被注释掉的代码?

  • 循环是否设置了长度和正确的终止条件?

  • 是否有可以被库函数替代的代码?

  • 是否有可以删除的日志或调试代码?

代码行数统计:查看feature分支提交了多少行代码? (exclude)掉idl目录 (java thrift项目)

git log --author="shenguanpu" --since='2019-04-22' --pretty=tformat: --numstat ":(exclude)idl" | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s ", add, subs, loc }'

added lines: 17, removed lines: 15, total lines: 2

参考文献:

https://mp.weixin.qq.com/s/A7XlAliQL__RcpK4AzuacQ 从Code Review 谈如何做技术(陈皓)

https://mp.weixin.qq.com/s/jXT1-bC7dfvzhRmh47H69g 如何写出优雅的代码

https://mp.weixin.qq.com/s/n1B0wLicwQByYslz6hYwnw 你真的会Code Review吗?

https://mp.weixin.qq.com/s/YCw7OP3RKF1EJb064IHEXg code review 有用吗?

https://mp.weixin.qq.com/s/nWntcljELd5g98b8RFTjXg code review 那些事儿

https://mp.weixin.qq.com/s/XvSuLKADV17-uF8mZmYXnw 程序员必备的代码审查(Code Review)清单

https://mp.weixin.qq.com/s/6SoJP9BMRNyLMJjwSkctUw 如何高效的Code Review

https://mp.weixin.qq.com/s/sXwuMb8lQzijWTthnaeinw 论code review代码审查

https://mp.weixin.qq.com/s/YOhKriAtUz2VViJtJRhbBw 享用腾讯免费早餐一样自然的做Code Review,他们如何做的?

免责声明:文章转载自《简单可行的code review规则》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vrep-python 控制方法Tomcat配置后提示404的解决办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Canal使用小结

Canal使用小结 之前公司存在mysql数据同步mongo的需求,可以有多种实现方式,比如硬编码,发送消息等。公司选择的是Canal中间件,最近有空来研究下他的使用方式,对于mysql数据变更监听有需求的应用场景都可以使用它。 参考:https://yq.aliyun.com/articles/14570 Canal介绍 基于mysql数据库binl...

一些值得收藏的开源框架

阅读本文大概需要 7.2 分钟。 来源:segmentfault.com/a/1190000017346799 1. 分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。 此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring C...

Flask、Tornado、Nginx搭建Https服务

其实Flask可以直接用tornado部署就行: # coding=utf-8 from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop from app.app_main import...

安装python3

一.编译python3: 1、安装或依赖包:yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make 2、wgethttps://www.python.org/ftp/python/3.6.6/Py...

Flexible实现H5页面的rem布局适配

1、https://www.w3cplus.com/mobile/lib-flexible-for-html5-layout.html (使用Flexible实现手淘H5页面的终端适配) 2、http://blog.csdn.net/u010377383/article/details/77963973 (Flexible实现手淘H5页面的rem布局适配)...

利用Kerberos委派攻击锤狗头

一、委派简单介绍 域中如果出现 A 使用 Kerberos 身份验证访问域中的服务 B,而 B 再利用 A 的身份去请求域中的服务 C ,这个过程就可以理解为委派。 用户需要访问主机s2上的HTTP服务,而HTTP服务需要请求其他主机的SQLServer数据库,但是S2并不知道用户是否有权限访问SQLServer,这时HTTP服务会利用用户的身份去访问S...