背景
一个团队在支撑业务的过程中,最重要的就是交付效率和交付质量来,其中代码质量就能体现出团队的交付质量,另外代码质量也能体现出一个团队的技术水平。
代码质量包含:
- 代码规范
- 代码风格
- 代码复杂度
- 代码重复率
如果一个团队的代码质量下降,这会引发一系列的问题:
- 团队如果不重视烂代码,会影响团队的技术热情,另外也会出现破窗效应,在烂代码上继续生产烂代码的心理负担小很多,最终导致更多的烂代码
- 影响业务稳定性,一个问题排查半天可能就是因为一行代码逻辑问题
下面我们一起来分析下代码质量下降的内在机制。
经典循环
相信每一个工程师,都是想着写出高质量代码。但为什么还会有这么多烂代码呢?更多的原因是业务压力大,为了快速上线写了太多的”临时方案“,很多临时方案最终成了历史的”技术债“,慢慢堆积成了烂代码。
因为向业务压力妥协而生产烂代码之后,开发效率会随之下降,导致业务压力更大,形成一种典型的恶性循环。
为了应对业务压力,常见的做法是向项目里增加人力,但是单纯的增加人力的话,会因为新人对业务逻辑不熟悉,增加了额外的协作沟通成本,导致烂代码更多,又会重新进入恶性循环。
要遏制这种恶性循环,需要多管齐下,主动对代码质量进行管控,并且持续进行技术升级,系统性地解决问题。
不管是质量管控还是技术升级,都是需要长期投入才能产生效果。
质量管控
技术升级一般有引入新技术、提升工程化、基建赋能等,但又时候技术升级可能已经是团队里的一个瓶颈或投入产出价值比较低,所以我们需要另外一种方式,建立质量管控,分为四个阶段
- 规范化:建立代码规范与 Code Review 制度
- 自动化:使用工具自动检查代码质量
- 流程化:将代码质量检查与代码流动过程绑定
- 中心化:以团队整体为视角,集中管理代码规范,并实现质量状况透明化
阶段一:规范化
建立团队的代码规范是保障代码质量的基础
先制定代码规范:
- 编码规范:缩进、换行、大小写、命名等
- 实践规范:沉淀最佳开发实践,形成规范化
- 组件规范:基础组件、业务组件的开发规范
然后再制定 CodeReview 机制,将规范落地
阶段二:自动化
团队建立统一的代码校验规则,通过工具自动化校验,降低人工 CodeReview 的成本
- 编码规范
- 重复率:重复代码、重复定义接口、重复开发的模块
- 复杂度:总行数,模块大小
阶段三:流程化
有了自动化校验工具之后,我们还需要将工具集成在研发流程里
- 编码时:编辑器校验 + 脚本校验
- 构建时:脚本校验
- 提交时:GitHook 校验
- 合并时:CodeReview(规范、代码逻辑、业务逻辑)
- 发布时:脚本校验
阶段四:中心化
当团队规模越来越大,系统越来越多时,可能存在代码规范不统一、质量问题被疏忽、存在大量的技术债等问题。
为了应对这些问题,需要结合四个阶段建设中心化的代码质量管控体系,要点包括:
- 代码规范统一管理
- 研发流程持续集成
- 代码质量数据化和分析
总结
在面临业务压力时,通常会倾向于通过增加人力来缓解业务压力。但从系统整体的角度来看,人力增加会造成代码质量变差,开发效率下降,从而再度增大业务压力,形成一种恶性循环。
为了抑制这种循环,我们需要有意识地投入资源来建设代码质量的管控体系。这个过程分为四个阶段:规范化,自动化,流程化,中心化。