评审恩仇录——我为何愿意执行代码评审

简介: 代码评审带来的好处不言自明, 但企业业务快速发展的诉求与代码评审推进落地二者之间, 每每存在矛盾。在现在快速发展的互联网时代,数字化、智能化已是基础能力,单纯只靠人肉审查的时代已通过去了,基于各类自动化检查能力的加持,其实代码评审并无想象中那么费时费力。今天和你们聊一聊在快节奏的业务现状下基于云效代码管理产品 Codeup 如何更低成本的开展代码评审。

可贵请了年假,躺在阳光海浪仙人掌的沙滩上喝着椰汁,忽然接到系统报警电话,马上跳起来抱着电脑处处找WIFI的场景是否似曾相识。git

身为技术开发,每逢放假巴不得烧香祈愿线上稳定,若是可以在问题引入前提早扼制风险,就能够放心享受清闲的假期了。算法

而代码评审,就是扼制风险的有效手段之一。编程

代码评审带来的好处不言自明, 但企业业务快速发展的诉求与代码评审推进落地二者之间, 每每存在矛盾。在现在快速发展的互联网时代,数字化、智能化已是基础能力,单纯只靠人肉审查的时代已通过去了,基于各类自动化检查能力的加持,其实代码评审并无想象中那么费时费力。今天和你们聊一聊在快节奏的业务现状下基于云效代码管理产品 云效Codeup 如何更低成本的开展代码评审。安全

话题开始以前,先简单介绍下代码评审的概念。架构

代码评审,英文名是Code Review,简称CR,它是结对编程相互切磋相互学习的方式。必定频次的CR可以提高我们的代码质量、促进人才成长。编辑器

1、提高代码质量函数

所谓代码质量,能够从两个维度来理解,一是可读性,二是减小缺陷。性能

  • 可读性:Code Review 机制的诞生最先是为了保证代码具备良好的可读性。代码是一种资产,而且具备“流通性”,一般会须要多年的维护,而且面临维护人员更替的状况,谁都不但愿本身接手的是一份“天书”同样的代码。使用CR的敏捷团队更是能得到巨大的好处,由于团队的工做是分散的,经过代码评审可让团队全部人都可以有机会了解对方的代码内容,有助于促进跨库和整个团队的知识共享,让任何团队成员均可以接管并继续推动整个工程的演进。
  • 减小缺陷:Code Review 可以发现除程序逻辑之外的设计、性能、安全、规范等多方面的问题。在这个过程当中,除了依赖评审人的专业能力外,也给了咱们更多让自动化和智能化检测手段介入的机会,包括对代码规范和安全的自动化检查、基于AI的缺陷分析和补丁推荐、合并的风险评估等。

2、促进人才成长单元测试

不少团队都由拥有不一样经验的成员组成,代码评审是一个互相检查错误,互相学习代码的机会。若是团队的技术骨干人员,能参与到团队平常的架构评审、设计评审以及代码评审中,除了可以下降出错率,减小设计初期的风险故障外,还能够切切实实的帮助到其余研发人员的成长。体感更明显的团队会发现团队的开发质量在逐渐提升,而且不断在向团队最高水平成员靠拢。学习

3、两种评审场景

咱们能够基于评审过程的严格程度,把评审分为轻/重两类,能够根据自身业务状况选择最合适的评审方式。

1.轻评审不少企业管理者会以为评审会耽误业务的迭代速度,评审和速度是鱼与熊掌不可兼得的事,固然业务最重要,评审就被天然舍弃了。

对于看重迭代速度的企业,轻评审是一个不错的选择,它没有强制的规则卡点,不要求评审人必须严格的阅读每一行代码给出评审意见,结合自动化检测的能力,在代码合并入重要分支的时候作一次安全和质量扫描,人力投入可控,能够更加灵活的根据当前业务情况决定是否当即合并代码,能够小成本的完成评审。

2.重评审

而对于一些流程严格,或上线代码安全质量要求高的公司,从管理层就要求一系列评审的硬性卡点,包括自动化检查、必须经过的评审人数、评论解决状态等等,其中任何一条不知足都不容许合并,这种状况就须要使用重评审特性的一系列管控能力了。

还有一些企业,不只对保护分支的合入强制管控,甚至对每一次提交都有要求,但愿任何推送到服务端的代码都要通过评审,这种场景对评审的要求很是高,而Codeup创新的集中式工做流 Agit-Flow 能够很好的解决这个场景。

接下来咱们先看下常规的评审流程是什么样子的:

4、常规评审流程

代码评审主要分为三个阶段:评审开始、评审中和评审结束。

常规流程中各个阶段存在的主要困难有:

  • 评审开始阶段,对于发起人,须要从大量库成员中选择合适的评审人,填写必要信息完成评审建立,并通知评审人及时前来评审。而对于评审人,一般会存在多个评审邀请,须要安排工做的间隙选择适合的评审各个击破或者用固定的时段集中评审。评审人点开评审,依次浏览代码逻辑,对于比较复杂的嵌套或调用依赖,还须要去本地IDE查看内部逻辑;
  • 评审过程当中,负责的评审人会基于漏洞,风格,缺陷等维度提出评论。要等待评审发起人收到通知后修复代码,而后提交再次评审。如此迭代,直到问题被解决,评审人点击经过评审,若是源分支和目标分支有代码冲突的话,须要评审发起人去解决冲突,最后合并代码。

常规的代码评审流程主要有如下问题:

1.建立评审麻烦:评审的建立须要手动填写大量信息,不少操做是重复劳动或是无从下手的;

2.人力投入成本高:最传统的代码评审是结对编程,以及团队圆桌评审,人力的投入显而易见。代码评审转移到线上后,仍然须要多人仔细校对、分析和线下讨论。缺乏自动化评审手段是关键。

3.评审流程体验差:评审过程当中纯文本的代码难以展示代码的深入逻辑,代码是立体的,部分改动的方法须要去查看定义和引用才能看出问题,不然只能是走马观花,效果有限,负责的评审人每每须要结合本地IDE来配合使用。评审发起人收到评论后,须要去本地修改提交后,再回复评论,路径很长。评审的经过、合并也没有卡点规则,任何有权限的人都能作这些操做,却可能会忽略评审的问题没有解决,致使本能够提早解决的问题带入线上生产环境。

4.评审活动状况难评估:管理者经常但愿可以衡量,团队的成员是否真正践行评审,保证评审质量,而不是随意经过评审,只是走个流程。

5、云效智能代码评审

针对常规代码评审存在的问题,云效Codeup 经过智能算法和流程管控能力,让评审更加高效。

1.提高建立速度建立评审须要填写一堆基础信息,云效Codeup 努力将用户须要输入的内容压缩到最少:

  • 增长了自动填充源、目标分支的功能;
  • 支持评审人推荐,基于代码库的历史操做,将最熟悉你改动代码的库成员推荐为评审人,让你方便的选择最适合的评审者;
  • 针对老是须要重复选择评审人的问题,保护分支支持设置默认评审人,减小冗余手工操做。若是你有按目录设置评审人的强大意愿,还可使用CodeOwner模式(好比A目录让甲同窗负责,B目录下的文件由乙同窗负责),设置后会将对应目录的代码负责人自动加为评审人。

2.下降人力投入评审的人力投入是最大的成本,随着自动化扫描能力的增长,人工评审前的机器预评审成为了主流。

云效Codeup 提供了代码扫描能力,守护代码安全和质量。内置的代码扫描包括【代码规约扫描】、【依赖包漏洞扫描】、【敏感信息扫描】、【补丁推荐扫描】,也能够基于云效的 Flow(流水线)配置单元测试和自定义扫描节点,例如【源码漏洞检测】、PHP/Python/Go 等常见语言的代码扫描,再将结果关联到评审上。

对于比较简单的评审,自动化测试的保障已经足够,大大减小了人力和时间投入成本,同时也防控了缺陷的引入。

3.优化评审流程体验网页端对于浏览简单逻辑的代码很是方便,可是若是存在较多互相引用的函数调用,阅读起来就比较费力了。云效Codeup 针对评审复杂状况,支持了网页端的函数引用快速跳转(咱们称为智能语法服务),避免在网页上艰难的切换文件视图;对于习惯本地IDE看代码的同窗,云效Codeup 也支持了IDEA的代码评审插件,不用来回切换编辑器和网页,直接在IDEA里面就能够进行代码评审,甚至一键合并代码,很是方便。

另外,一般一个特性可能须要多人协做开发,为了减小合并代码时的冲突,云效Codeup 提供了冲突预检测的能力,支持经过网页端的 WebIDE 自动解决冲突并快速提交。

在评审协做通知方面,评审的关键动态支持经过站内信、邮件、钉钉的方式及时通知到评审参与方,避免你等我我等你的尴尬,可以更高效的推动评审的进度,更快一步完成迭代。

4.支持查看评审活动状况Codeup 针对评审活动,提供了单独的度量报表,能够看到仓库内每次提交是否通过了评审,查看提交和代码行的评审率,每一个仓库成员的评审活动参与次数,收到评审邀约的响应速度,若是有同窗评审老是拖延,可能他就是迭代的一个阻塞点,也许应该为他减轻工做或者选择其余评审人帮助补位;

在评审活动中,咱们也是鼓励评论的,有问题说出来,不管是疑问仍是夸赞,也方便后续的回顾追溯。此外,千行代码评论数也能够做为管理者对评审有效性评估的可视化度量参考。

做者:Yvonne原文连接本文为阿里云原创内容,未经容许不得转载

相关文章
相关标签/搜索