心有所信,方能远行!中国农业银行 DevOps 建设中代码评审的思考

2022-06-29 16:43:23 浏览数 (1)

作者简介 农业银行研发中心 季佳 王荣荣

在行业激烈竞争业务快速运转的背景下,如何在实现快速交付的同时保证代码质量一直以来都是技术团队反复探讨的话题之一。代码评审(Code Review)是 DevOps 项目建设中的一个重要环节,在保障代码质量的中的作用不言而喻。

众多科技企业及互联网公司都在代码评审方面做了较多的探索和实践,并作为组织文化在项目中进行传承应用。包括谷歌、阿里、腾讯、百度、京东等在内的众多大厂均认为代码评审是软件工程最佳实践之一。

代码评审对于尽早发现缺陷、提升代码质量、提高个人工程能力以及团队知识共享等方面发挥重要作用。

1、什么是代码评审

代码评审,主要是指通过阅读代码的方式来检查源代码质量的活动。在提交代码改动之前,开发人员可以先自己检查一下自己的代码,这是一个非常好的个体软件过程习惯。本篇文章中,我们重点讨论由别人来对自己的代码进行人工评审这种场景。

那么代码评审都审些什么呢?除了关注程序功能逻辑之外,代码评审还会关注安全漏洞、性能等非功能方面的问题。此外,代码评审也需要关注代码的可读性、可维护性、可扩展行等方面的问题。

2、代码评审的目的和作用

一方面,代码评审的作用体现在保证代码质量上。在项目的早期发现缺陷,解决问题的成本相对较低。另一方面,代码评审的作用也体现在促进团队员交流学、知识共享上。

谷歌代码代码评审目的是通过评审确保谷歌代码库的整体代码运行状况随着时间的推移而得到改善。主要关注点包括设计、功能、复杂性、测试、注释、风格、上下文等。阿里巴巴则是通过代码评审发现除逻辑以外的设计、性能、安全、规范等方面的问题,同时提供一种互相检查错误、互相学习代码用法的机会,并且将代码评审视作一种企业文化。

3、代码评审和代码扫描的比较

代码扫描,是指通过工具对源代码进行静态的自动分析的过程。代码扫描与代码评审有相类似的地方,如两者同样都是对源代码的静态分析,相比如动态测试手段,可以从软件的可维护性、可扩展性等方面发现问题,这些是各种动态测试手段发现不了的问题。

与代码扫描相比,人工代码评审的人力比较贵,那它是否有必要呢?答案是肯定的。人工评审可以发现自动扫描发现不了的问题。因为只有人才能判断一段代码要实现什么功能,达到什么目的,现在的代码是否实现了和达到了,写的好不好。因此,即使做了自动扫描,人工评审也是有价值的。但是由于人力比较贵,因此建议人工评审放在自动评审之后来完成。

4、如何开展代码评审

首先,代码评审的覆盖范围应该包括哪些内容呢?广义上来说,只要是由某人来完成的变更,都要考虑是否要通过他人来进行评审。因此除了源代码的变更以外,像测试脚本、测试用例、各种工具、各种环境的配置、数据库变更脚本等都需要纳入代码评审的评审范围。

另外,代码评审应该重点关注哪些方面呢?每个团队都有自己的特点,代码评审需要因地制宜。一般来说,对于规模较大、耦合性较强、逻辑较为复杂的系统和模块,由于容易出错且出错修复成本较高,因此要重点评审。另外,对于一些本身对质量要求比较高的系统、模块或者交易,也需要重点评审,比较典型的如金融系统的各种动账交易。此外,由于新来的开发人员,对业务和系统还不熟悉,因此这部分开发人员的代码也需要重点关注。

代码评审的执行通常有两种方式。一种是会审,即评审人和开发人员面对面开会,进行评审。另一种方式是借助代码评审工具,开发人员提交代码以后,评审人分头开展评审留下评审意见,开发人员依据意见进行修改直到通过评审。两种方式各有优缺点,前者的优点是面对面沟通效率高,但是需要多人约在同一时间,时间安排上有时比较困难。后者相对灵活,但也存在沟通效率低的问题。对于选择哪种方式,项目组可以根据自身情况来灵活使用。可以将两种方式相结合。

代码评审执行依据上,通常建议项目团队维护本团队的一个检查清单,包括都需要检查哪些大的类型,每个类型的关注点都有哪些等等。团队成员可以依据检查清单逐项进行检查,从而保障代码评审的质量。随着评审经验的积累,团队可对检查清单进行维护更新,不断完善。

心有所信,方能远行。在 DevOps 建设浪潮中,需要不断沉淀代码评审的实践方法,以问题和目标为导向,深化研究,夯实基础,提质增效,不断推进企业 DevOps 能力建设,促进科技数字化转型。

还不过瘾?还想了解更多大型国有银行 DevOps/DevSecOps 落地方案?

GOPS 全球运维大会 2022 · 深圳站,农行技术专家将分享精彩议题,敬请期待~

近期好文:

为了做到微服务的高可用,鬼知道我出了多少张牌

“DevOps时代”公众号诚邀广大技术人员投稿,

投稿邮箱:jiachen@greatops.net,或添加联系人微信:greatops1118.

点个“在看”,少个“bug”

0 人点赞