code review规则
前言
曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此!
每当接手别人的代码,都有一种想重新写一遍的感觉,等到别人再来接手你的代码时,同样的感觉。。。为什么会有这种现象存在?因为没有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必须遵循的游戏规则:
每次提交review代码修改行数不得超过1000行,一小时内review完(先试行,最终目标400行,Cisco开发团队研究显示,进行一次Code Review不要超过400行代码(LOC, Line of Code)。大脑一次只能有效处理这么多信息,超过400 行找到缺陷的能力减弱。)
至少每个周期(两周一个开发周期)提一次review,周五早上互相喊一下,最晚提交时间周五下午2点前,周五下午的时间用来修改review代码
需要保证单元测试覆盖到,功能点要拆分足够细
checkout feature分支后能编译运行正常
工作日可以上午11点前提pr,需要组内指派资深工程师两名, 至少一人review通过
提交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规则的更多相关文章
- 简单可行的code review规则
前言 曾经有一段垃圾代码放在我的面前,我没有拒绝,等我真正开始接手的时候我才后悔莫及,程序员最痛苦的事莫过于此! 每当接手别人的代码,都有一种想重新写一遍的感觉,等到别人再来接手你的代码时,同样的感觉 ...
- 我们是怎么做Code Review的
前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...
- Code Review 程序员的寄望与哀伤
一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...
- code review作业
下面是对结对编程队友12061166 宋天舒的code review 五个优点: 1.代码的风格优秀,注释不多,但是必要的注释还是有的,比如: // 三种模式 // mode1仅统计单个单词 // m ...
- Code Review Engine Learning
相关学习资料 https://www.owasp.org/index.php/Code_review https://www.owasp.org/images/8/8e/OWASP_Code_Revi ...
- 什么是Code Review(转)
Code Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节.本文通过对Code Review的一些概念和经验的探讨,就如何进行C ...
- 17款code review工具
本文是码农网原创翻译,转载请看清文末的转载要求,谢谢合作! 好的代码审查器可以大大地帮助程序员提高代码质量,减少错误几率. 虽然现在市场上有许多可用的代码审查工具,但如何挑选也是一个艰巨的任务.在咨询 ...
- 什么是Code Review
Code Review 是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节. 本文通过对Code Review的一些概念和经验的探讨,就如何进 ...
- 有人实践过 Phabricator 以及 Arcanist 作为 code review 的工具么?(转)
作者:覃超链接:http://www.zhihu.com/question/19977889/answer/13539702来源:知乎 平时就经常实践. 整个公司的code review就是使用这个. ...
随机推荐
- 操作mysql 中文乱码情况
解决方法 : 在连接字符串中设置charset=utf8 即可正常添加中文字符 <add name="mtgzghEntities" connectionString=& ...
- Gson/Jackson/FastJson工具类
import java.util.ArrayList; import java.util.List; import java.util.Map; import com.google.gson.Gson ...
- 解决oracle 32位64位的问题
工具-选项-项目和解决方案-勾选第一个
- filter(expr|obj|ele|fn)筛选出与指定表达式匹配的元素集合。
filter(expr|obj|ele|fn) 概述 筛选出与指定表达式匹配的元素集合. 这个方法用于缩小匹配的范围.用逗号分隔多个表达式 参数 exprStringV1.0 字符串值,包含供匹配当前 ...
- Crystal Report中文顯示亂碼
1.首先要確定該中文字體在OS裏有沒有安裝 C:\WINDOWS\Fonts 這個folder下沒有找到的話就從別的機器拷貝ttf字體文件,然後 File -> Install New Font ...
- 在django中解决跨域AJAX
由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取另一个源加载的文档的属性. 特别的:由于同源策略是浏览器的限制,所以请求的发送和响应是可以进行,只不过浏览器不接收罢了. 浏览器同源 ...
- 无线AP知识点
FAT模式指该AP可以独立配置,有独立的管理界面,就像普通的无线AP:FAT模式主要用在没有使用AC的小型网络中. FIT模式指该AP由TP-LINK AC(无线控制器)统一管控设置. 1,这个 ...
- isPrototypeOf,instanceof, hasOwnProperty,in的作用与区别
isPrototypeOf 作用:检测一个对象是否是另一个对象的原型.或者说一个对象是否被包含在另一个对象的原型链中 function Fn(name){ this.name=name; } var ...
- Java虚拟机与平台无关性
概述 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. --<深入理解Java虚拟机>(从这里可以看到,字节码是一种文件格式) 我们都知道计算机只 ...
- 简述python中的@staticmethod作用及用法
关于@staticmethod,这里抛开修饰器的概念不谈,只简单谈它的作用和用法. staticmethod用于修饰类中的方法,使其可以在不创建类实例的情况下调用方法,这样做的好处是执行效率比较高.当 ...