研发都知道代码 Review 的重要性,在腾讯代码 Review 也越来越受大家重视,作为腾讯专有云平台研发的一员,我参与了大量的代码 Review,明显地感受到有效的代码 Review 不但能提高代码的质量,更能促进团队沟通协作,建立更高的工程质量标准,无论对个人还是团队都有着重要的价值。本文就为什么要做代码 Review 以及如何有效地做代码 Review 分享一下个人的看法。
为什么要代码 Review,相信每个人心中都有比较一致的答案,Google 搜索一下也能找到一大堆的文章。这里简单总结几点:
1)提高代码质量
这是代码 Review 的初衷,也是代码 Review 最直接的价值。Reviewers 根据各自的经验,思考方式,看问题的角度给代码提出各种可能的改进意见,从而形成更好的代码以及产品质量。
我们知道产品问题越晚提出解决它的代价就越大,参与进去的人、要走的流程都会越来越多。代码 Review 可以说是早期解决问题最有效的途径之一了,在代码 Review 中解决掉哪怕一个小问题都能避免后续一堆的麻烦事。
2)形成团队统一的高质量标准
有效的代码 Review 最终会在团队范围内建立起统一的质量标准,并且会随着团队成员的互相学习和促进形成更高的标准。参与者会在代码 Review 的过程中基于具体问题从不同角度提出改进意见,并最终做出当前最佳的选择并形成共识。随着代码 Review 的有效进行,团队成员会有意识地关注代码质量,从而形成越来越高的事实上的质量标准。
3)个人快速成长
通过有效的代码 Review,Author 和 Reviewer 都将获得成长,在 Review 过程中参与人就具体的问题展开深入的讨论,无论是怎么写出整洁的代码、怎么更好地更全面地思考问题、怎么最佳地解决问题,参与人都可以互相取长补短,互相提高。通过具体代码实现进行的讨论往往是最深入和有效的,代码 Review 是开发者提高代码能力最重要的途径之一。
有的人认为代码 Review 就是 Reviewer 帮助查找代码中的 Bug,其实代码 Review 不应该是一个单向的过程,而应该是个双向交流的过程,Reviewer 帮助 Author 提出代码改进意见的同时,也是向优秀的 Author 学习的过程。我们都知道提高代码能力一个有效的途径是阅读优秀的项目代码,但是阅读项目代码有着不小的难度,这也是大部分人没有去执行的原因,而 Review 资深同事的代码,我们在阅读代码的同时能够直接进行有效的沟通,这是一个快速有效的学习途径,尤其对开发经验还不算丰富的开发者而言。
在代码 Review 上,Author 需要意识到:Reviewer 的时间是昂贵的。因此在正式邀请 Reviewer 发起代码 Review 前,Author 有几项需要注意的点,这些都能提高代码 Review 的效率,节省 Reviewer 的时间。
2.1.1. MR (Merge Request)
也称为 PR(Pull Request), MR 是我们进行代码 Review 的地方,它记录着代码的具体改动,参与者具体的讨论过程。好的 MR 应该做到以下几点:
2.1.2. Commit Message
之前翻看了不少现存的项目代码,看到不少的 Commit Message 写得比较简单,例如一连串的 "update", "fix",从这些 Commit Message 中完全看不出做了什么改动,想想如果之后想要定位之前的某个改动,该从哪里下手。
目前 Commit Message 规范比较常见的有 Angular 团队的规范,并由此衍生出了 Conventional Commits Specification,可以参照此 Specification 约定 Commit Message 格式规范。
<type>(<scope>): <subject><BLANK LINE><body><BLANK LINE><footer>
大体分三行:
其中 type 是 Commit 的类型,可以有以下取值:
其中 scope 表示的是 Commit 影响的范围,比如 ui,utils,build 等,是一个可选内容。
其中 subject 是 Commit 的概述,body 是 Commit 的具体内容。
例如:
fix: correct minor typos in codesee the issue for details on typos fixed.Refs #133
Commit Message 可以在 git 中配置模板,这样可以在 vim 中展示出模板,另外可有工具帮助我们生成和约束 Commit Message,例如 commitizen/cz-cli,这里不再具体说明。
2.1.3. CI 通过
CI(Continuous Integration),持续集成可以帮助我们自动发现很多代码中的基本问题,在合适的静态代码检查(lint)配置和良好的单元测试覆盖下,CI 可以有效地提高代码的质量。很多人都低估了静态代码检查的能力,实际上现在常见语言的静态代码检查已经能帮助发现不少的 bug 和隐患。对于 Go 语言,可以配置 golangci-lint 来做代码检查,单元测试根据实际情况可以制定相应的标准,比如覆盖率 60%,其中关键的代码逻辑尽量全面覆盖。
提交代码 Review 前需要确保 CI 执行通过,这也是为了节省 Reviewer 的时间,能够通过自动化解决的事情,尽量不要让 Reviewer 来做,而 Reviewer 发现 CI 未过的 MR 也可以要求 Author 先解决 CI 问题。
2.1.4. Self-Review
我们一般代码 Review 都是找他人来进行 Review,其实负责任的 Author 在邀请他人来代码 Review 前也需要自己简单 Review 一遍,即 Self-Review。
Self-Review 的目的包括:
Self-Review 是一个非常快速的过程,从我个人的经验,一般 1-2 分钟即可完成,所以推荐大家养成 Self-Review 的习惯。
从目的出发,可以从以下几方面考虑 Reviewer:
经常会有 Reviewer 拿到 MR 不知道该 Review 些什么,其实无论你参与对应项目的深入如何,都可以对代码进行 Review,也鼓励不同人从不同的深度、角度去帮助 Review。代码 Review 没有固定的形式,它更像是一门艺术,唯一的提高办法就是实际参与进去。
Review 的时候可以从以下几个方面入手:
1)简单的 Review
在 CI 通过的情况下,最简单的 Review 方式可能只需要这样:
Reviewer:在实际环境中都验证过了吗?
Author:当然验证过了
Reviewer:LGTM
这是一种提醒式的 Review。确认一句:是否在环境中验证过了,或者进一步把能想到的重要的验收点提出来确认一遍。即使是这种最简单的 Review 实际上也是有价值的,我们很难保证所有研发都会在提 MR 前实际在环境中验证自己所做的修改,也很难保证单元测试、e2e 测试能 Cover 住所有的情况,Reviewer 基本上也不可能都自己去环境上跑一遍。让 Author 去确认实际上就是提醒 Author 去确保改动至少是真实有效的,尤其是对一些已发布版本的 Bugfix,一定要提醒实际自测通过。
类似的提醒还包括:相关的文档(外部的)是否相应更新了、这个改动是否会有兼容性的问题、性能是否有影响。他们的本质就是提醒 Author 自己去思考他们可能遗漏的问题。
2)常规的 Review
代码 Review 一般都会从代码风格、变量命名、语法统一处入手,当然这些应该更多的借助于 CI 等自动化手段来保证,但是在相关流程还不是很完善的前提下还是有必要进行关注。
此外代码可读性、代码健壮性、代码可扩展性都是 Review 时关注的点。每一个关注的点都依赖于 Reviewer 的实际经验,这里只简单举几个例子:
{ 代码可读性 }
代码是写给人看的,因为没有不需要维护的代码,无论是 Author 自己后续维护代码,还是他人接手代码,能快速地理解代码逻辑是非常必要的。
代码 Review 的时候可以关注以下几点:
{ 代码健壮性 }
{ 可扩展性 }
当前的实现方式是否能兼容以后类似的扩展需求。比如在新增接口、API 或者调整参数以解决某一问题上,可以考虑是否后续会有其他类似情况发生。举几个例子:
这里只是举了有限的一些例子,在实际 Review 过程中,Reviewer 可以根据自身的经验从各个角度提出优化的意见。一般需要重点看看:
Review 过程中鼓励 Reviewer 大胆 Comment,有不理解的地方,或者觉得不合适的地方都直接表达出来,Author 对 MR 的 每个 Comment 也要做出反馈,无论是展开讨论还是简单的给个 OK 都是有效的反馈。
Review 的过程可以是:
代码 Review 很大程度上就是给代码挑毛病,而且一般预期挑的越多越好,但代码是 Author 写的,很多情况下或多或少会对 Author 造成不适。所以在 Comment 的时候需要尽量注意措辞,尤其是一些主观的东西,一般以建议的方式给出。当然对于原则性的问题,是要坚守质量标准的,甚至可以直接 Deny 掉 MR。
另外,参与者也不要吝啬你的溢美之词,无论是 Author 还是 Reviewer,在 Review 中发现了好的地方或好的建议,请给予对方以肯定和赞美,这样有助于 Review 有效的进行。
2.6.1. Author
首先需要明确一点,是 Author 自己对代码的质量负责,因此应当怀着感恩的心去看待坚持认真帮你 Review 代码的 Reviewer,因为并不是所有你加的 Reviewer 都有时间和精力来帮你提高代码质量。
也正式因为 Author 是自己代码的 owner,所以不要依赖于 Reviewer 去帮你守代码质量的大门,像 “代码 Review 的时候你怎么就没看出来”,“这不是你建议我这么做的吗” 这样的话千万别说。Reviewer 只是帮你提高代码质量,因此我们该做的工作都要去做,比如细致的 Reviewer 可能某些情况下直接提出了代码优化的建议,Comment 时贴上了优化的代码片段,Author 不能直接假设它一定是能正常工作的,而应该对它进行完整的验证。
对 Reviewer 给出的 Comment,不要有抵触的情绪,对你觉得不合理的建议,可以委婉地进行拒绝,或者详细说明自己的看法以及这么做的原因。有时候一个你觉得不合理的建议可能代表一个新的思考角度,也可能代表 Reviewer 自身代码能力上的不足,无论是哪个,无论最终是 Author 还是 Reviewer 得到了提高,都应该是好事。
2.6.2. Reviewer
Review 代码既是帮助提高代码质量的过程,也是 Reviewer 提高自己代码能力和沟通能力的过程。因此应该在 Review 的同时保持一个学习者的心态,既要发现对方代码中的缺陷,也要努力去发现代码中的亮点。切记单纯以挑毛病的心态去 Review 代码。
有不少 Reviewer 在写 Comment 的时候会犹豫,担心自己提出的问题或建议比较“蠢”,因此犹犹豫豫下看完了代码抱着一堆疑虑最终啥也没留下。其实在代码 Review 的时候大可不必有什么心里负担,有什么疑惑的、不清楚的地方或者有什么自己的想法,可以直接提出来,有时候一个简单的 Comment 就可能会激起 Author 和你的 Comment 毫不相干的新思路。再者你即使没帮 Author 提高代码,让 Author 帮你提高思考不也是建不错的事情吗。
Reviewer 也不需要去关注自己的“产出”,并不是一定要提出一堆问题才是好的代码 Review,Author 代码写得很棒也是很正常的,如果从你的角度觉得代码没问题,大胆给个 LGTM 甚至是 Approve。
本文由哈喽比特于4年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/uFivYfX53s5zAe6hacznlg
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。