肥宅钓鱼网
当前位置: 首页 钓鱼百科

codereview到底是啥(你太菜了竟然不知道Code)

时间:2023-08-10 作者: 小编 阅读量: 1 栏目名: 钓鱼百科

我一直认为CodeReview是软件开发中的优秀实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。很多团队或个人不做CodeReview,根源还是不觉得这是一件有意义的事情,不觉得有什么好处。如果在CodeReview时发现问题,被审查者希望代码能尽快合并,也会积极的对审查出来的问题进行修改,不至于对审查结果太过抵触。虽然原则上,必须要CodeReview才能合并,但有时候确实会存在一些紧急情况,比如说线上故障补丁,而又没有其他人在线。

我一直认为Code Review(代码审查)是软件开发中的优秀实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。

图片来自 Unsplash

包括像 Google、微软这些公司,Code Review 都是基本要求,代码合并之前必须要有人审查通过才行。

然而对于我观察到的大部分软件开发团队来说,认真做 Code Review 的很少,有的流于形式,有的可能根本就没有 Code Review 的环节,代码质量只依赖于事后的测试。也有些团队想做好代码审查,但不知道怎么做比较好。

网上关于如何做 Code Review 的文章已经有很多了,这里我结合自己的一些经验,也总结整理了一下 Code Review 的优秀实践,希望能对大家做好 Code Review 有所帮助。

Code Review 有什么好处?

很多团队或个人不做 Code Review,根源还是不觉得这是一件有意义的事情,不觉得有什么好处。这个问题要从几个角度来看。

团队知识共享的角度

一个开发团队中,水平有高有低,每个人侧重的领域也有不同:

  • 怎么让高水平的帮助新人成长?
  • 怎么让大家都对自己侧重领域之外的知识保持了解?
  • 怎么能有人离职后其他人能快速接手?

这些都是团队管理者关心的问题。而代码审查,就是一个很好的知识共享的方式。

通过代码审查,高手可以直接指出新手代码中的问题,新手可以马上从高手的反馈中学习到好的实践,得到更快的成长;通过代码审查,前端也可以去学习后端的代码,做功能模块 A 的可以去了解功能模块 B 的。

可能有些高手觉得给新手代码审查浪费时间,自己也没收获。其实不然,新人成长了,就可以更多的帮高手分担繁重的任务;代码审查中花时间,就少一些帮新人填坑擦屁股的时间。

良好的沟通能力、发现问题的能力、帮助其他人成长,都是技术转管理或技术上更上一层楼必不可少的能力,而通过代码审查可以有效的去练习这些方面的能力。

代码质量的角度

现实中的项目总是人手缺进度紧,所以被压缩的往往就是自动化测试和代码审查,结果影响代码质量,欠下技术债务,最后还是要加倍偿还。

也有人寄希望于开发后的人工测试,然而对于代码质量来说,很多问题通过测试是测试不出来的,只能通过代码审查。

比如说代码的可读性可维护性,比如代码的结构,比如一些特定条件才触发的死循环、逻辑算法错误,还有一些安全上的漏洞也更容易通过代码审查发现和预防。

也有人觉得自己水平高就不需要代码审查了。对于高手来说,让别人审查自己的代码,可以让其他人学习到好的实践;在让其他人审查的同时,在给别人说明自己代码的时候,也等于自己对自己的代码进行了一次审查。

这其实就跟我们上学时做数学题一样,真正能拿高分的往往是那些做完后还会认真检查的。

团队规范的角度

每个团队都有自己的代码规范,有自己的基于架构设计的开发规范,然而时间一长,就会发现代码中出现很多不遵守代码规范的情况,有很多绕过架构设计的代码。

比如难以理解和不规范的命名,比如三层架构里面 UI 层绕过业务逻辑层直接调用数据访问层代码。

如果这些违反规范的代码被纠正的晚了,后面再要修改就成本很高了,而且团队的规范也会慢慢的形同虚设。

通过代码审查,就可以及时的去发现和纠正这些问题,保证团队规范的执行。关于代码审查的好处,还有很多,也不一一列举。

还是希望能认识到 Code Review 和写自动化测试一样,都是属于磨刀不误砍柴工的工作,在上面投入一点点时间,未来会收获代码质量,会节约整体的开发时间。

Code Review 该怎么做?

现在很多人都已经有意识到 Code Review 的重要性了,只是苦于不知道如何去实践,不知道怎么样算是好的 Code Review 实践。

①把 Code Review 作为开发流程的必选项而不是可选项

在很早以前,我就尝试过将代码审查作为代码流程的一部分,但只是一个可选项,没有 Code Review 也可以把代码合并到 Master。

这样的结果就是想起来才会去做 Code Review,去检查的时候已经有了太多的代码变更,审查起来非常困难,另外就算审查出问题,也很难得以修改。

图片来源:How to Do Code Reviews Like a Huma

我们现在对代码的审查则是作为开发流程的一个必选项,每次开发新功能或者修复 Bug,开一个新的分支,分支要合并到 Master 有两个必要条件:

  • 所有的自动化测试通过。
  • 有至少一个人 Code Review 通过,如果是新手的 PR,还必须有资深程序员 Code Review 通过。

这样把 Code Review 作为开发流程的一个必选项后,就很好的保证了代码在合并之前有过 Code Review。

而且这样合并前要求代码审查的流程,好处也很明显:

  • 由于每一次合并前都要做代码审查,这样一般一次审查的代码量也不会太大,对于审查者来说压力也不会太大。
  • 如果在 Code Review 时发现问题,被审查者希望代码能尽快合并,也会积极的对审查出来的问题进行修改,不至于对审查结果太过抵触。

如果你觉得 Code Review 难以推行,不妨先尝试着把 Code Review 变成你开发流程的一个必选项。

②把 Code Review 变成一种开发文化而不仅仅是一种制度

把 Code Review 作为开发流程的必选项后,不代表 Code Review 这件事就可以执行的很好,因为 Code Review 的执行,很大部分程度上依赖于审查者的认真审查,以及被审查者的积极配合,两者缺一不可!

如果仅仅只是当作一个流程制度,那么就可能会流于形式。最终结果就是看起来有 Code Review,但没有人认真审查,随便看下就通过了,或者发现问题也不愿意修改。

真要把 Code Review 这件事做好,必须让 Code Review 变成团队的一种文化,开发人员从心底接受这件事,并认真执行这件事。

要形成这样的文化,不那么容易,也没有想象的那么难,比如这些方面可以参考:

  • 首先,得让开发人员认识到 Code Review 这件事为自己、为团队带来的好处。
  • 然后,得要有几个人做好表率作用,榜样的力量很重要。
  • 还有,对于管理者来说,你激励什么,往往就会得到什么。
  • 最后,像写自动化测试一样,把 Code Review 作为开发任务的一部分,给审查者和被审查者都留出专门的时间去做这件事,不能光想着马儿跑得快又舍不得给马儿吃草。

如何形成这样的文化,有心的话,还有很多方法可以尝试。只有真正让大家都认同和践行,才可能去做好 Code Review 这件事。

一些 Code Review 的经验技巧

在做好 Code Review 这件事上,还有一些经验技巧可以参考。

①选什么工具辅助做 Code Review?

现在很多源代码管理工具都自带 Code Review 工具,典型的像 Github、Gitlab、微软的 Azure DevOps,尤其是像 Gitlab,还可以自己在本地搭建环境,根据自己的需要灵活配置。

②配合什么样的开发流程比较好?

像 Github Flow 这样基于分支开发的流程是特别适合搭配 Code Review 的。

其实不管什么样的开发流程,关键点在于代码合并到 Master(主干)之前,要先做 Code Review。

③真遇到紧急情况,来不及代码审查怎么办?

虽然原则上,必须要 Code Review 才能合并,但有时候确实会存在一些紧急情况,比如说线上故障补丁,而又没有其他人在线。

那么这种情况下,最好是在任务管理系统中,创建一个 Ticket,用来后续跟踪,确保后续补上 Code Review,并对 Code Review 结果有后续的代码更新。

④先设计再编码

有些新人发现自己的代码提交 PR(Pull Request)后,会收到一堆的 Code Review 意见,必须要做大量的改动。这多半是因为在开始做之前,没有做好设计,做出来后才发现问题很多。

建议在做一个新功能之前,写一个简单的设计文档,表达清楚自己的设计思路,找资深的同事先帮你做一下设计的审查,发现设计上的问题。设计上没问题了,再着手开发,那么到 Review 的时候,相对问题就会少很多。

⑤代码在提交 Code Review 之前,作者要自己先 Review 和测试一遍

我在做代码审查的时候,有时候会发现一些非常明显的问题,有些甚至自己都没有测试过,就等着别人 Code Review 和测试帮助发现问题。这种依赖心理无论是对自己还是对团队都是很不负责任的。

一个好的开发人员,代码在提交 Code Review 之前,肯定是要自己先 Review 一遍,把该写的自动化测试代码写上,自己把基本的测试用例跑一遍的。

我对于团队提交的 PR,有个要求就是要在 PR 的描述中增加截图或者录屏,就是为了通过截图或者录屏,确保提交 PR 的人自己是先测试过的。这也是一个有效的辅助手段。

⑥PR 要小

在做 Code Review 的时候,如果有大量的文件修改,那么 Review 起来是很困难的,但如果 PR 比较小,相对就比较容易 Review,也容易发现代码中可能存在的问题。

所以在提交 PR 时,PR 要小,如果是比较大的改动,那么最好分批提交,以减轻审查者的压力。

⑦对评论进行分级

在做 Code Review 时,需要针对审查出有问题的代码行添加评论,如果只是评论,有时候对于被审查者比较难甄别评论所代表的含义,是不是必须要修改。

建议可以对 Review 的评论进行分级,不同级别的结果可以打上不同的 Tag,比如说:

  • [blocker]:在评论前面加上一个 [blocker] 标记,表示这个代码行的问题必须要修改。
  • [optional]:在评论前面加上一个 [optional] 标记,表示这个代码行的问题可改可不改。
  • [question]:在评论前面加上一个 [question] 标记,表示对这个代码行不理解,有问题需要问,被审查者需要针对问题进行回复澄清。

类似这样的分级可以帮助被审查者直观了解 Review 结果,提高 Review 效率。

⑧评论要友好,避免负面词汇;有说不清楚的问题当面沟通

虽然评论是主要的 Code Review 沟通方式,但也不要过于依赖,有时候面对面的沟通效率更高,也容易消除误解。

另外文明用语,不要用一些负面的词汇。

总结

Code Review 是一种非常好的开发实践,如果你还没开始,不妨逐步实践起来。

如果已经做了效果不好,不妨对照一下,看有没有把 Code Review 作为开发流程的必选项而不是可选项?有没有把 Code Review 变成一种开发文化而不仅仅是一种制度?

    推荐阅读
  • 音乐总能让人陷入回忆(音乐伴随各种邂逅)

    音乐伴随各种邂逅☞831143-nero8letters,3words,1meaning:I(1)LOVE(4)YOU(3)☞ぼくらのレットイットビー-4円我们变成大人后就会成为正义的英雄要去守护地球的和平啊☞空も飞。

  • 车辆故障灯亮了一定要停车吗(这些故障灯亮了)

    表示此时车辆发动机内冷却液的温度过高,冷却液温度过高,机油温度增加,导致动力粘度急剧降低,润滑作用下降。轻则导致异常磨损区域增大,产生滑擦条纹;重则导致缸壁或者密封环不可逆损坏。以防止冷却液飞溅烫伤。在确保安全的情况下,立刻靠边停车,检查刹车油、刹车片,或者是对外寻求帮助或援助。胎压故障报警灯以上红色报警灯,遇到需立即停车检查。

  • 女人结婚后怎么正确活出自我 结婚女人如何活出自己

    今天来聊聊一篇关于女人结婚后怎么正确活出自我的文章,现在就为大家来简单介绍下女人结婚后怎么正确活出自我,希望对各位小伙伴们有所帮助。

  • 金晨被夸大的美貌(金晨cos水冰月走光)

    金晨被夸大的美貌中秋佳节来临,明星们都是在微博上送上真切的祝福。视频中,金晨身穿水冰月的卡通服装,戴着一头黄发,完美地还原了水冰月的造型。也有网友表示,金晨的裙子太短了,影响不好。觉着金晨还是要注意保护下自己的隐私,以免给黑粉留下把柄。不过网友也不要过分的理解和看待这件事,相信被这次被提醒后的金晨,会听取网友的建议多多注意的。

  • 电视剧烈火军校人物介绍(电视剧烈火军校人物简介)

    电视剧烈火军校人物介绍《烈火军校》人物有谢襄、顾燕帧、沈君山、曲曼婷等人,该剧讲述代兄从军的谢襄女扮男装进入陆军讲武堂学习,与玩世不恭的富家子顾燕帧和冷静沉稳的沈君山成为同学。谢襄饰演白鹿,和顾燕帧是一对欢喜冤家,经常吵吵闹闹,顾燕帧发现了谢襄的秘密之后,选择帮助她,让她继续在军营中待下去。后来在曲曼婷被几个世家小姐羞辱的时候,顾燕帧挺身而出,帮她解围,曲曼婷对顾燕帧由讨厌转为好感。

  • qq影音如何看电影(QQ电影怎么看)

    qq影音看电影的方法如下:1、打开qq影音。QQ影音是由腾讯公司推出的一款支持任何格式影片和音乐文件的本地播放器。QQ影音首创轻量级多播放内核技术,深入挖掘和发挥新一代显卡的硬件加速能力,软件追求更小、更快、更流畅的视听享受。

  • 幽默暖心的晚安心语(幽默暖心的晚安说说)

    幽默暖心的晚安心语开自己的舞台。无奈的我只好与你说再见,好在月亮很乖,她告诉我,要替我向你说声:晚安!晚安吴世勋,晚安失眠人,晚安还在玩电脑的人,晚安思密达。亲爱的你,我若是天使,我只守护,你所有的幸福。希望我们联手打造会有好预兆!爱情不仅是鲜花、感动、亲吻和春风,它同时又是严寒时的松柏,黑夜中的火花,长途跋涉中手和手的相互搀扶。我不是在等天亮,只是等不到某人的晚安。

  • 美国、菲律宾爆发禽流感疫情!超9万只禽类检出病毒

    同一日,据世界动物卫生组织消息,美国农业部向OIE报告称,美国发生3起H7N3型低致病性禽流感疫情。本次疫情于2020年3月12日得到确认。3起疫情均发生于北卡罗来纳州,其中1起发生于安森县,另2起发生于犹尼昂县。经实验室检测发明,共有90200只禽类疑如病例。目前美国已采废除毒措施,疫情仍在潞傍,美国农业部将每周提交情报告。而此次美国禽流感疫情的发生,或导致禽肉出口大门又将关闭。

  • 上海最隐蔽的山水别墅(上海最神秘的别墅)

    回到原汁原味的老辰光莫干山·西坡29莫干山·西坡29西坡29,坐落山水间,朴实、简单、乡村,就像素颜的美人,清新脱俗。在西坡,错过的可以留下,遗忘的可以拾回。这里有属于你自己的生活节奏,一切随性随心。然后,在清晨清亮细碎的鸟鸣声中醒来。夜晚的西坡,慵懒迷人。亦或登上房顶的露台,抬头仰望浩渺的星空。莫干山的冬季总会在不经意之间带给你更多的惊喜。

  • 上眼皮松弛下垂提眉还是做双眼皮(改善眼皮松弛下垂)

    此种手术符合正常解剖要求,效果较好。这种情况下大多同时存在脂肪、肌肉组织流失造成的眼部凹陷。不同的症状不同的处理方法如果是轻度眼睑凹陷,可以通过眶脂下移矫正。如果是中重度眼睑凹陷,皮肤的衰老松弛严重或者是肌肉脂肪流失过多的,需要再矫正皮肤松弛的时候局部填充自体脂肪或者玻尿酸使凹陷处饱满。本文内容由壹点号作者发布,不代表齐鲁壹点立场。