当前位置:网站首页>DevOps之代码检查
DevOps之代码检查
2022-08-02 17:43:00 【InfoQ】
什么是代码检查

为什么要做代码检查
- 可读性:代码不只是给机器理解的,也是给人看的。要能够使团队中的每个人都能容易的阅读和理解代码。
- 可维护性:当维护和测试高质量的代码时更加容易、安全和省时,且不易出问题。
- 减低技术债务:高质量的代码设计良好,技术债少,开发人员无须花费大量的时间修复代码的问题和重构,因此,可以加快软件开发的进度。新团队成员容易理解代码,更容易加入项目。
代码检查实践方法
本地检查
- 按照检查前置的原则,本地检查的时机是最合适的,发现问题和修复问题的成本是最低的;
- 因为是在本地执行,执行检查的效率最快。
- 需要开发人员具有很高的自觉性。
- IDE 插件:SonarLint、FindBugs、CheckStyle、PMD、阿里规范插件等,可以检查代码的编码风格,坏味道,漏洞等。
- 本地构建:maven 编译、gradle 编译,可以检查代码语法问题,是否能够编译过。
- 本地测试:单元测试,可以检查代码的逻辑问题。

本地提交检查
- 检查的时机适中;
- 检查的效率较高;
- 基于 Git 的 Hook 机制,在每次提交时运行 Hook,自动识别代码中的简单问题,代码审阅者只专注于代码逻辑和系统结构,避免因为琐碎的样式问题而浪费时间。
- 本地提交对提交速度要求很高,只能进行省时的静态检查,如代码风格等;
- 客户端的 Hook,因为是在开发人员本地,并未实现完全“强制”检查;
- 同样依赖开发人员的自觉性。
远程提交检查
- 能够进行较为深层次的动态检查,比如漏洞、Bug,检查的效果较好;
- 能够做到强制检查,保证任何人提交的代码都是高质量的;
- 代码提交后并未直接提交到代码库中,可以加入人工评审环节,可以检查代码的业务逻辑和架构设计等较复杂问题;
- 可以控制每次提交的代码质量。
- 检查的时机靠后,反馈周期较长;
- 需要搭建代码检查服务器;
- 维护成本较高;
- 每次提交都检查,会拖慢团队的开发节奏。
分支合并检查
- 每次在分支合入时进行检查,既能控制合入其他分支的代码质量,又不会对开发节奏造成影响;
- 分支合并时一般表示一个功能和问题开发完成,可以有相对充足的时间执行较为深层次的动态检查,比如漏洞,Bug 等;
- 可以设置强制检查,保证合入分支的代码是高质量的;
- 可以做 Code Review,评审人一次性评审完整的功能代码(不推荐长期分支,大功能开发);
- 代码托管平台支持,如 GitHub、GitLab。
- 检查的时机靠后,反馈周期较长。
常用的检查工具和实践
代码检查
人工评审
自动化测试
总结
边栏推荐
- Go 语言快速入门指南: 介绍及安装
- 白话电子签章原理及风险
- 租房小程序自动定位城市
- Remember the stuck analysis of an industrial automation control system in .NET
- Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
- 小程序毕设作品之微信体育馆预约小程序毕业设计成品(6)开题答辩PPT
- How a "cloud" can bring about new changes in the industry
- C# 术语
- 织梦自定义表单添加全选和全不选功能按钮
- redis总结_多级缓存
猜你喜欢
Redis总结_实战篇
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
Security First: Tools You Need to Know to Implement DevSecOps Best Practices
Navicat 连接Oracle时提示oracle library is not loaded的问题解决
How a "cloud" can bring about new changes in the industry
shell中awk命令的if条件语句引入外置变量
载20(S)-人参皂苷/细胞穿膜肽-单克隆抗体-载丝裂霉素白蛋白纳米微球的制备
MySQL表的约束
什么是SVN(Subversion)?
攻防世界-favorite_number
随机推荐
golang源码分析(2):Golang context 包
SQL 正则解析手机号码提供商
H5网页播放器EasyPlayer.js播放器界面的加载效果无法消失是什么原因?
mysql四种隔离级别
Flink学习9:配置idea开发flink-Scala程序环境
golang源码分析(6):sync.Mutex sync.RWMutex
灵动微电子发布低功耗 MM32L0130 系列 MCU 产品
cpolar应用实例之多设备数据采集
红队实战靶场ATT&CK(一)
golang刷leetcode 经典(3) 设计推特
Ubuntu系统下用docker安装oracle
redis总结_分布式缓存
使用lodash替换js字符串中的变量
redis summary_distributed cache
宝塔搭建实测-基于ThinkPHP5.1的wms进销存源码
POE交换机常见问题解答
golang刷leetcode动态规划(10)编辑距离
文件上传很难搞?10分钟带你学会阿里云OSS对象存储
54.【system系统互动函数大总结】
Google Earth Engine APP—— 一个不用写代码可以直接下载相应区域的1984-2021年的GIF遥感影像动态图