说说代码评审

 关注公众号【1024个为什么】,及时接收最新推送文章! 

本文内容:

1、代码评审的目的

2、评审准备工作

3、评审过程中容易出问题的点

4、共同成长

近一段时间以来,组内严格实行代码评审制度。参与过多次评审后发现,一次有效的代码评审并不简单,把一些思考做一下总结。

||  代码评审的目的

| 提前发现问题

问题发现越早,解决成本越小,带来的损失也越小。

| 保证代码库的健康状况

随着时间推移,代码库的健康状况往往会下降。通过代码评审,如果能使代码库整体健康状况不快速下降,就算达到目的了。

||  评审准备工作

| 评审规范

团队最好要有一套评审规范,如果没有,可以在一段时间的评审后沉淀一套规范。

有了规范,评审就可以按规范一条条过,节省时间。

有了规范,产生意见分歧时,依据规范,化解分歧。

| 评审时间节点

很多观点是每次提交代码前都要评审,但实际工作中并不可行。

自测后期就可以发起评审,最晚到测试前期。如果有问题,还有充足的时间修改、测试。

新的模块可以分阶段多次评审,优先评审核心代码,及时发现并纠正问题,避免后期大量返工。

评审不通过有大改动的,改动后要再次评审。

| 评审形式

有条件的一定要面对面评审,效率高。下文也都是基于此形式的讨论。

跨地域的可以邮件评审或者评审工具评审。

| 发起人要做什么

邀请评审人(必须包含熟悉此业务的人),提前发会议邀请,协调评审人的时间。

需求背景提前同步出来,便于评审人提前了解,节省评审时间。

准备好CL(Change List),要了然于心,确定一个合理的讲述方案。建议零星改动按列表讲,其他最好按业务流程讲。

多说一句:CL 不仅仅是改动的代码,还可能包括DB脚本、配置信息、单测、数据现状、调研方案及结论...

| 评审人要做什么

参加评审,就要对其负责(假设出现事故有问责制),做好前期必要的准备工作。时间允许的话,提前了解需求,熟悉此部分业务,预判可能出现问题的节点,重点关注哪些部分,带着问题去评审。

| 评审工具

IDE集成的对比工具即可。使用工具有很多好处:

1)可以一条一条的点,不会漏代码。千万不要滚鼠标,很容易漏;

2)有前后对比,使评审人更直观的看到原来代码什么样,你这次改成什么样;

3)可以只看改动代码,节省时间。直接看代码很容易扯到没改动的代码去。

||  评审过程中容易出问题的点

评审时,千万不要上来就讲改了哪些代码... 这只会使评审效果大打折扣。

发起人要先花上几分钟,快速讲一下本次的需求背景,原来什么样,这次什么样,要改哪些模块。让评审人快速准确的了解本次业务范围,以便接下来能够给出合理的评审意见。

| 粗心类错误

这类错误和技术水平没有太大关系。

比如 if 条件里的取反;

配置是否漏配了环境,是否拷贝后忘了修改环境相关的信息;

数据库字段长度够不够用(一般都是扩展字段容易超);

测试结束后改动的代码忘提交了;

这些可以通过和同桌交叉检查的方法来避免。

| 方案过度设计

1)过度考虑未来业务

设计满足当前需求,以及合理业务扩展即可。

经验表明,之前很多当时认为极具前瞻性的设计,后面多数都是没用的,或者用到了,也要做很大改动。

2)过度考虑极端场景

比如某个后台人工操作的场景(一个月也不一定操作一次,正好又赶上服务挂了),要不要失败系统自动重试?

类似这种通过简单的人工补救方案(业务重试、重新发起)可以达到目的,就没必要设计复杂的技术补救方案,因为每引入一个方案又会带来新的问题。

3)过度的错误兼容逻辑

为了追求数据的正确性、一致性,可能会出现各种异常数据校验、各种异常处理逻辑,层层自我重试。

很多情况下,完全可以采取 “约定大于开发” 的准则,就能减少很多校验,很多重试的处理。比如约定入参格式、返回结果,约定由谁触发重试等等。

各个行业都有约定,比如 USB、网线的排线顺序,我们不可能在提供USB口、网线口的设备上考虑各种错误线序的兼容方案、错误反馈。

| 前后业务流程有逻辑漏洞

这种问题不好发现,需要对业务足够熟悉,流程足够清楚。

可能单看 A、B 两个接口都没有问题,但 A、B 在前后流程上有依赖关系。整个流程一串起来问题就暴露出来了。

| 事务

日志类的操作不要回滚,要留痕。

事务回滚是否影响重试的请求? 

| 冗余的数据库访问、服务调用

同一流程中前后2个方法都查询了同一数据。

循环逻辑内查库、调服务。

(假设每次访问都是要收费的,是不是就能省则省了)

| 定时任务

是否幂等?

是否能重复执行?

是否能暂停?

是否能够异常继续?

是否有超时风险?

是否超过下游承载能力?

禁止limit m,n 分页。

| 影响范围有遗漏

梳理影响系统的方案是否科学。

服务治理统计出的是否全面,有没有直接调用的?

从日志、端口统计,时间范围是否够广?

一些边缘系统、定时任务是否会遗漏?

||  共同成长

| 心态要正

代码评审不是挑毛病,能有效实现功能无严重问题即可。可以给出自己的建议,但允许每个人有自己的风格。

对事不对人,发起人和评审人都要有这个意识,大家的共同目的是一致的。

| 沉淀

评审发现的问题要留心记一下,避免重复采坑。

经过一个阶段的评审之后,很多东西是可以直接拿来复用的。

| 点赞学习

好东西要点赞、相互借鉴学习(好的技术方案,好的编码习惯,或者好用的工具类),共同提高编码水平。

扯两句

评审一次费时费力,尽量让其效果最大化

一个合格的程序员绝不仅仅是写好代码这么简单

搜寻资料的过程发现了谷歌的代码评审规范,可以参考学习。
官方:https://google.github.io/eng-practices/review

中文:https://jimmysong.io/eng-practices

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gitlab是一款知名的开源代码管理工具,除了提供云端代码托管服务外,也可以下载社区版本进行本地搭建。而对于代码评审,Gitlab也提供了相应的功能。特别是对于规模较小的研发团队(例如10个人左右),完全可以在Gitlab上进行代码评审,无需另外再搭建专业的代码评审工具(例如Gerrit)。 Gitlab的代码评审功能主要通过Merge Request(合并请求)来实现。当开发者在Gitlab上创建一个新的分支后,在该分支上进行开发工作,并在完成后提交一个Merge Request。其他团队成员可以对这个Merge Request进行代码评审,提出修改建议或者给予批准。通过这样的流程,可以确保代码的质量和可读性。 在进行代码评审时,团队成员可以通过Gitlab的界面进行评论和建议。他们可以直接在代码的特定行上进行评论,提出修改意见,并与其他团队成员进行讨论。这样,代码评审过程中的交流和反馈更加方便和高效。 除了基本的代码评审功能外,Gitlab还提供了其他增强的功能来支持代码评审,例如自动化测试和持续集成。可以通过配置Gitlab Runner来实现自动化测试,以确保代码在合并前通过了一系列的测试。同时,Gitlab也支持与CI/CD工具集成,可以在代码评审通过后自动进行代码构建和部署。 总结起来,Gitlab提供了完善的代码评审功能,适用于规模较小的研发团队。通过Merge Request和评论功能,团队成员可以方便地进行代码评审和交流。此外,Gitlab还提供了其他增强功能,如自动化测试和持续集成,可以进一步提升代码质量和开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值