前后端代码review技术方案

code review必要性

1、知识共享

一个开发团队中,水平有高有低,每个人侧重的领域也有不同。怎么让高水平的帮助新人成长?怎么让大家都对自己侧重领域之外的知识保持了解?怎么能有人离职后其他人能快速接手?

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

可能有些高手觉得给新手代码审查浪费时间,自己也没收获。其实不然,新人成长了,就可以更多的帮高手分担繁重的任务;代码审查中花时间,就少一些帮新人填坑擦屁股的时间;良好的沟通能力、发现问题的能力、帮助其他人成长,都是技术转管理或技术上更上一层楼必不可少的能力,而通过代码审查可以有效的去练习这些方面的能力。

2、代码质量

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

也有人寄希望于开发后的人工测试,然而对于代码质量来说,很多问题通过测试是测试不出来的,只能通过代码审查。比如说代码的可读性可维护性,比如代码的结构,比如一些特定条件才触发的死循环、逻辑算法错误,还有一些安全上的漏洞也更容易通过代码审查发现和预防。

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

3、团队规范

每个团队都有自己的代码规范,有自己的基于架构设计的开发规范,然而时间一长,就会发现代码中出现很多不遵守代码规范的情况,有很多绕过架构设计的代码。比如难以理解和不规范的命名,比如三层架构里面UI层绕过业务逻辑层直接调用数据访问层代码。

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

通过代码审查,就可以及时的去发现和纠正这些问题,保证团队规范的执行。

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

常规流程

不定期
组长、架构师每周不少于一次执行项目开发分支的全局代码规约扫描,人工review核心模块代码实现,不符合规范的要求相关人员修正

技术总监每个迭代不少于一次代码抽查

工具alibaba java coding guidelines

后端代码规范插件
idea plugins搜索安装:alibaba java coding guidelines

安装后右键项目或者某个包、某个类,选择编码规约扫描,电脑卡的可以关闭实时检测。

在个人开发分支提交merge request之前必须自己执行一次扫描,BLOCKER和CRITICAL级别的问题必须解决掉

全端(Java、JavaScript、python、flutter)
安装SonarQube7.8(依赖Java1.8)

后端除了符合满足工具给出的规范提示外,还有:

1、方法内不创建线程池

2、不使用@Async创建异步任务,如果非要,指定线程池名称:@Async(“xxxExecutor”),因为默认使用SimpleAsyncTaskExecutor,它不是真的线程池,这个类不重用线程,默认每次调用都会创建一个新的线程;当方法执行较久、短期内调用次数过多时容易出问题;频繁创建/销毁线程

3、catch Exception后必须打印异常堆栈

4、CompletableFuture.runAsync中必须加catch Exception,并打印异常堆栈

5、utils类不依赖spring等外部依赖,尽量满足工具属性copy到哪都能用;不要把utils设计成能替代feign的样子

6、VO、DTO是名称缩写,缩写一般保持全大写,在变量命名时可以省略,如:PatientVO patientVO可以写为PatientVO patient,List patientVOs可以写为List patients或者List patientList; 不要写成patientVo、patientVos、patientVOS

7、尽量不使用全局事务

8、接口返回定义了数组,那么即时查询为空时也返回给调用方一个空数组或者集合;

 如果你认为分配零长度集合会损害性能,则可以重复返回相同的零长度集合,如:

 private static final List EMPTY_LIST = Collections.emptyList();  // 全局空集合不要直接new ArrayList,因为ArrayList长度可变

SonarQube工具安装使用

本地安装

由于SonarQube依赖于jdk环境,公司项目开发使用的是jdk8

可以找后端要下jdk8的包,然后配置JAVA_HOME环境变量

支持jdk8的SonarQube的最高版本为7.8

下载地址为:https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip

可能要翻墙,不想自己下载的找我

解压zip文件到你想放的目录

汉化包(按需,丢到sonarqube-7.8\extensions\plugins)

需要下载:sonar-l10n-zh-plugin-1.28.jar

SonarQube默认使用h2内存数据库,如果想改成mysql的话,编辑conf目录sonar.properties修改相关jdbc参数值即可,默认端口9000,es端口9001,修改的话sonar.web.port和sonar.search.port

运行:进入bin\windows-x86-64目录,双击StartSonar.bat

输出以下内容即为安装成功
在这里插入图片描述

安装代码扫描器sonar-scanner
点击下方链接下载sonar-scanner4.3版本

https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

配置环境变量:

SONAR_RUNNER_HOME
在这里插入图片描述

选择path变量新增变量

%SONAR_RUNNER_HOME%\bin
在这里插入图片描述

打开sonar-scanner-4.3.0.2102-windows\conf目录内有sonar-scanner.properties 文件
将下面两行代码前面的#去掉(也就是取消这两行的注释)。

sonar.host.url=http://localhost:9000

sonar.sourceEncoding=UTF-8

到这里就完成了,可以新建项目开始扫描项目了

前端VEU扫描案例

打开浏览器输入http://localhost:9000

点击登录,默认账号admin,密码:admin

在这里插入图片描述

点击右上角加号新建项目

在这里插入图片描述

输入项目名称后点设置 –> 创建令牌 -->继续

在这里插入图片描述
在这里插入图片描述

把命令复制出来,去实际git项目路径下右键–>在终端中打开,粘贴→回车
等待分析结束
在这里插入图片描述

重复性分析可能不太准确,可以先不管,看bugs,这里的bug不是指程序bug,是指违背了代码审查规则的一些代码,会给出解决方式,也可以标记为其他状态

在这里插入图片描述

如果下次还想分析但忘记了令牌,可以在这里重新生成

在这里插入图片描述

代码git 提交合并把控代码质量

提交合并请求

在这里插入图片描述
在这里插入图片描述

合并处理

合并通过
点下图的批准+合并即可

拒绝
如果你发现代码存在一些问题,你可以在评论整个合并请求并提出可能的改进建议的情况下评论特定的代码行。然后开发人员可以解决你发现的那些代码问题

拒绝标准
代码复杂难懂,缺少注释
代码逻辑错误、可能造成的死循环、死锁
单个方法行数超过80
代码缺少抽象、封装、核心逻辑与繁琐代码混杂(繁琐代码如:往bean一堆set、一堆对变量的判断等等)
命名不规范,不能见名知意
不符合代码规范
业务表索引缺失
提示
因为一些评判标准具有较强的主观性,不能只做评判不给建议。
比如你拒绝了别人提交的合并请求,理由是:代码看不懂/不合理。
必须要指出哪里看不懂/不合理,你的建议是什么

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值