前言

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

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

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

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

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

价值

你说我的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 行找到缺陷的能力减弱。)

  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\n", 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规则的更多相关文章

  1. code review规则

    简单可行的code review规则 前言 曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此! 每当接手别人的代码,都有一种想重新写一遍的感觉, ...

  2. Code Review中的几个提示

    原文:http://coolshell.cn/?p=1302  酷壳 Code Review中的几个提示 陈皓 Code Review应该是软件project最最有价值的一个活动,之前,本站发表过&l ...

  3. 如何在python脚本开发做code review

    在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...

  4. Code Review 从失败中总结出来的几个经验

    资深的程序员都知道 Code Review 可以对代码质量,代码规范,团队代码能力提升带来很大的提升,还有著名的技术专家"左耳朵耗子"也说过: 我认为没有 Code Review ...

  5. Go Code Review Comments 译文(截止2018年7月27日)

    持续更新中- 原文最新链接 https://github.com/golang/go/wiki/CodeReviewComments/5a40ba36d388ff1b8b2dd4c1c3fe820b8 ...

  6. 我们是怎么做Code Review的

    前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...

  7. Code Review 程序员的寄望与哀伤

    一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...

  8. Code Review Engine Learning

    相关学习资料 https://www.owasp.org/index.php/Code_review https://www.owasp.org/images/8/8e/OWASP_Code_Revi ...

  9. 什么是Code Review(转)

    Code Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节.本文通过对Code Review的一些概念和经验的探讨,就如何进行C ...

随机推荐

  1. javascript 大中小括号的区别

    小括号 JavaScript中小括号有五种语义 语义1,函数声明时参数表 function func(arg1,arg2){ // ... } 语义2,和一些语句联合使用以达到某些限定作用 // 和f ...

  2. symfony学习笔记2—纯的PHP代码和symfony的区别

    Symfony vs 纯PHP为啥symfony比普通的php文件访问要好?这一章我们写一个简单的php文件项目,然后组织它,你会发现为什么web应用会发展到现在这个样子.最后我们将学习symfony ...

  3. ZT Shell 排序

    Shell 排序 分类: 算法 C 2008-09-17 11:02 1898人阅读 评论(4) 收藏 举报 shell语言c 刚才在CSDN的C语言板块看到了有人说Shell排序的问题,所以一起学习 ...

  4. [微信小程序直播平台开发]___(一)介绍与流程

    1.一个可以忽略的前言 最近在做的一个项目,客户要做一个直播平台,主播发起视频直播,然后其他人进入房间观看这样子,跟其他直播平台不同的是,主播可以打赏观众,噗. 因为客户要做的是一个民宿的微信小程序, ...

  5. AOP:选择正确的时机进行编织

    在本文中,我们将采用三种重要的实现的例子,来实践本文提出的概念.这三种 AOP 实现是 AspectJ,Spring 和 JBoss.通过比较他们在 Weave 时机方面的不同,来获得对于如何选择 W ...

  6. mybatis #{}和${}的区别是什么

    #{}和${}的区别是什么?正确的答案是:#{}是预编译处理,${}是字符串替换.(1)mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法 ...

  7. 在CentOS7上部署 Kubernetes集群

    yum -y install  etcd docker  flannel kubenetes 一般会遇到没有k8s源的问题,先 yum update -y 看是否有效,如果还是没用就创建yum 源,再 ...

  8. istio 配置解读

    Istio在服务网络中统一提供了许多关键功能: 流量管理:控制服务之间的流量和API调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮. 可观察性:了解服务之间的依赖关系,以及它们之间流量的本质 ...

  9. 利用Zookeeper实现分布式锁及服务注册中心

    对于Zookeeper的定义以及原理,网上已经有很多的优秀文章对其进行了详细的介绍,所以本文不再进行这方面的阐述. 本文主要介绍一些基本的准备工作以及zookeeper.net的使用. 本文源代码gi ...

  10. 说说Javac

    Java语言有Java语言的规范,,这个规范详细描述了Java语言有哪些词法.语法,而Java虚拟机也有其Java虚拟机的规范,同样Java虚拟机的规范和Java语言规范并不一样,它们都有自己的词法和 ...