你有做 Code Review 吗?

在代码的编写中有一个很重要的环节,经常会被忽视,那就是 Code Review ,据说在 Facebook、Google 这种互联网大公司,要求每一个提交都必须通过审查,对于每个工程师来说 Code Review 是一项十分重要的工作,甚至比写代码本身更重要。

这里所说的 Code Review 是指人工的方式进行代码的检查,通常会给我们带来下面的一些好处:

  • 编码风格可以保持一致,目前团队中虽然有编码规范的指引,但在代码抽查时,还是会看到很多「个性」的代码;

  • 将明显问题扼杀在摇篮里,有时候存在设计上的一些错误,在后期要调整起来非常麻烦,改动大容易引发新的问题,还需要修复历史数据等;

  • 新人能够快速融入团队,知道团队的编码风格,能学习到一些优秀代码的写法,也能知道哪些是禁区,不能触碰;

  • 团队成员之间能够互相学习,构建良好的团队氛围。

不做 Code Review 也能完成功能的实现,只不过慢慢会带来下面的问题:

  • 从每天写功能慢慢变成每天写 Bug;

  • 代码的坏味道越来越浓,代码变得难以维护;

  • 修改一行代码,测试没有覆盖到,往往就会带来很严重的后果;

  • 可能过一段时间,就需要进行大规模的重构;

  • 新人的技能得不到快速提升。

其实我们都知道 Code Review 的重要性,敏捷开发中的结对编程就包含了 Code Review ,但为什么却难以执行呢,我认为有下面一些原因:

  • 项目急,时间紧,完成功能都需要加班加点,哪还有时间做 Code Review;

  • 对 Code Review 的认知不足,不够重视;

  • 没有相关的流程和制度进行约束,很难坚持执行下去。

我们团队的代码采用私有 GitLab 服务器,自然也使用了 GitLab 中的 MR 模式,不清楚 MR 是什么的同学可以看看我之前写的《在团队中使用 GtiLab 中的 Merge Request 工作模式》。曾经有一个美好的设想就是利用 Merge Request ,让每个人都能参与进来,在 GitLab 中进行代码的讨论,但非常遗憾,最终没能执行起来。

Code Review 的工具和方式方法非常多,我们如果能挑一两种方式,落地执行下去,就是非常好的一个开始。

上面说到 Merge Request  在团队中没有推行起来,但我个人还是在经常使用,我是代码合并的管理员之一,当合并代码时,我会重点关注两个方面:

1、核心代码的改动

  • 当前功能的提交是否有必要修改到这些地方,理由是什么?

  • 这些代码的改动有没有可能引发一些严重问题?

2、MR 是谁提交的

  • 如果是资深开发人员提交的代码,Review 的粒度会比较粗;

  • 如果是新人提交的代码,则会重点关注,包括规范以及逻辑的合理性。

除此之外,我们领导推荐的一种做法,目前在团队中一直在执行,就是写代码前先写空方法。将任何的需求转化成代码,中间的思考过程是复杂的,需要考虑很多东西:性能、扩展、是否优雅等,反倒是最终的编码实现相对是简单的。

而写空方法的过程就是思考的过程,涉及到了类的创建、抽象、组合;方法的职责,事先没有思考清楚,是写不出来的。

快速出一版空方法后,再进行沟通和讨论,找出其中有遗漏和有问题的点,进行修改,最终的版本在大方向上基本是没什么问题的。

对于 Code Review ,我自己也还在不断地探索和实践,找到适合团队的方法,执行下去,然后再持续进行改进和完善。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PhotoShop CS5制作残旧的印章效果

编者按:不少网友喜欢个性印章效果,因此常常搜索个性印章在线制作。其实,Photoshop就可以完成个性印章制作。事实上,使用 Photoshop制作残旧的印章效果文字有多种方法,例如可以使用云彩滤镜。本文作者介绍了另一种实现方…

限时秒杀┃秒杀90%的玩具,让孩子爱上科学的彩虹实验2来了!

▲数据汪特别推荐点击上图进入玩酷屋之前小木有推荐过“彩虹实验”,这款是可以让孩子在探索中能够独立思考,主动地构建知识库,培养创造力。(传送门)让孩子们在家开展科学游戏,既能提升动手能力,…

linux accept过程,Linux协议栈accept和syn队列问题

161310 cient端收到synack后,根据ack值,使用SACK算法,只重传最后一个ack内容。Server端收到数据包,由于accept队列仍然是满的,所以server端处理也只是标记acked,然后返回。162884 client端等待几秒后&#…

感想四

2019独角兽企业重金招聘Python工程师标准>>> 随着年龄的增长,对人对事物的认知就越真,包括知识也是如此。 很多年前,在软件开发领域中发生了一个有趣的转变,软件变成了系统中最为昂贵、最为重要的部分。从…

.NET Worker Service 作为 Windows 服务运行及优雅退出改进

上一篇文章我们了解了如何为 Worker Service 添加 Serilog 日志记录,今天我接着介绍一下如何将 Worker Service 作为 Windows 服务运行。我曾经在前面一篇文章的总结中提到过可以使用 sc.exe 实用工具将 Worker Service 安装为 Windows 服务运行,本文中我…

MFC的Button和Static控件

最近要写一个MFC的对话框程序,发现要把MFC的对话框写的有色彩点并不容易,不像在C#里设置属性指就好,而是要自己去写一些代码完成对话框的绘画操作。比如一个简单的鼠标移入、移出操作,都要自己去写代码。由于我只用到了Button和St…

私有云存储 linux,搭建nextcloud私有云存储网盘

本文将要为您介绍的是搭建nextcloud私有云存储网盘,具体完成步骤:简介:搭建个人云存储一般会想到ownCloud,堪称是自建云存储服务的经典。而Nextcloud是ownCloud原开发团队打造的号称是“下一代”存储.真正试用过后就由衷地赞同这个Nextcloud:…

我报了个税,隐私就被扒光了?

全世界只有3.14 % 的人关注了数据与算法之美1月14日,据外媒报道,美国参议院金融委员会正在向美国财政部和国税局施压,要求他们采取网络安全措施。相关数据显示,2015年美国约有700,000名纳税人身份信息遭到泄露,为了解决…

C# 外接(网口)双摄像头视频获取

【注意事项】------------------------------------1. 更新设备网络SDK时,SDK开发包【库文件】里的HCNetSDK.dll、HCCore.dll、PlayCtrl.dll、SuperRender.dll、AudioRender.dll、HCNetSDKCom文件夹、ssleay32.dll、libeay32.dll、hlog.dll、hpr.dll、zlib1.dll、lo…

JavaScript中使Promise模式进行异步编程

Promises 其中的一种模式就是promise,它代表了一种潜在地、长时间运行但不必返回完成操作的结果。与阻塞并长时间等待运行计算完成不同,这种模式返回一个代表承诺(promised)结果的对象。 例如,需要创建一个请求到第三方…

Visual Studio 2022 Preview 1 和.NET 6 Preview 5 正式发布

具有里程碑意义的Visual Studio 2022 Preview 1正式发布,重点是64位,而没有增加新功能,并且同时也发布了.NET 6 Preview 5。https://devblogs.microsoft.com/visualstudio/visual-studio-2022-preview-1-now-available/https://devblogs.micr…

每日一笑 | 你知道你爸妈当年是怎么在一起的吗?

全世界只有3.14 % 的人关注了数据与算法之美(图片来源于网络,侵权删)

linux ll 转数组,List、Set、数组之间的转换

★数组转Collection使用Apache Jakarta Commons Collections:importorg.apache.commons.collections.CollectionUtils;String[] strArray {"aaa","bbb","ccc"};List strList newArrayList();Set strSet newHashSet();CollectionUtil…

c3po 问题解决

参数及问题解决http://www.blogjava.net/ashutc/archive/2011/03/16/346365.html 转载于:https://my.oschina.net/taomac/blog/118070

每日一笑 | 你知道程序媛最“大”的烦恼是什么吗?

全世界只有3.14 % 的人关注了数据与算法之美(图片来源于网络,侵权删)

什么?他居然想在DLL中放毒!

dotnet/runtime有一个issue[1]讨论了如何使用ModuleInitializer投放恶意代码,但是微软的开发经理表示不背这个锅! 什么是ModuleInitializer?ModuleInitializerAttribute[2]是在.NET5.0中新增加的API。它的作用是应用于编译中的任意数量的静态…

c语言复数的运算实验报告,C语言复数的运算(实验报告).doc

实验报告题目:复数的四则运算班级: 13信管 姓名:白浩然 学号:201340403034 完成日期:2014.05.21一、需求分析1.本演示程序中复数由两个相互之间存在次序关系的实数构成。2.演示程序以用户和计算…

为什么说人工智能是一个大谎言

全世界只有3.14 % 的人关注了数据与算法之美人工智能是一个很大的谎言。或者往轻了说,它是一个混淆概念。往重了说,是用来欺骗大众的流行语,并且流行度非常高。其实真正的内涵是“机器学习”。所以,真正强大的,每个人都…

c语言字符串倒置,单词倒置,用C++实现,将一句话里的单词进行倒置的方法详解

用C语言实现,将一句话中的单词进行倒置(单词之间倒转,单词本身不倒置),标点符号不导致。比如一句话“I come from tianjin. “,倒置后变成“tianjin. from come I ”。C常见的库函数有:复制代码 代码如下:int strstr(…

NET问答: ThreadStatic 和 ThreadLocalT 哪一个更好 ?

咨询区 user2341923&#xff1a;[ThreadStatic] 被设计成特性&#xff0c; ThreadLocal<T> 被设计成泛型&#xff0c;为什么会有这两种设计方案呢 &#xff1f;谁能告诉我他们的优缺点各是什么&#xff1f;是不是泛型的方式更好一点&#xff1f;回答区 Sanjeev&#xff1…