代码质量管控的四个阶段

本文讨论的代码质量指的是代码自己的质量,包括复杂度、重复率、代码风格等要素。代码是团队的共同财产,代码质量是团队技术水平和管理水平的直接体现。编辑器

代码质量降低一般会自成因果,致使恶性循环:工具

  • 破窗效应:在烂代码上继续生产烂代码的心理负担小不少
  • 传染性:烂代码传递着一种不在乎质量,只看业务成果的负面信息,会伤害团队的技术热情和工做氛围,致使更多烂代码出现

本文会分析代码质量降低的内在机制,并分享在代码质量管控方面的一些实践经验。学习

熵增定律与代码质量

熵增定律告诉咱们,一个封闭系统老是趋向于熵增,也就是系统的无序程度只会不断增长。测试

对于软件项目来讲,代码质量表明着系统的有序程度,烂代码增长就是系统无序性上升的体现。在无外力影响的状况下,烂代码只会原来越多。插件

为了维持系统有序,须要外界向系统不断输入能量。对于代码质量,咱们须要主动投入资源,来有意识地抑制烂代码愈来愈多的天然趋势。代码规范

经典循环

烂代码产生的常见缘由是业务压力大,致使没有时间或意愿讲究代码质量。由于向业务压力妥协而生产烂代码以后,开发效率会随之降低,致使业务压力更大,造成一种典型的恶性循环。blog

为了应对业务压力,常见的作法就是向项目中增长人力,可是单纯地增长人力的话,会由于风格不一致、沟通成本上升等缘由致使烂代码更多。资源

要遏制这种恶性循环,须要多管齐下,主动对代码质量进行管控,而且持续进行技术升级,系统性地解决问题。开发

不过质量管控和技术升级须要长期投入才能产生效果。一般状况下人们仍是倾向于经过增长人力快速地解决业务压力的问题,而忽略了对于代码质量的负面影响,致使代码质量愈来愈差。文档

四个阶段

我把代码质量管控一般须要经历的四个阶段,称之为“四个现代化”:

  • 规范化 - 创建代码规范与Code Review制度
  • 自动化 - 使用工具自动检查代码质量
  • 流程化 - 将代码质量检查与代码流动过程绑定
  • 中心化 - 以团队总体为视角,集中管理代码规范,并实现质量情况透明化

阶段一:规范化

保障代码质量的基础是创建团队的代码规范,一般包括:

  • 风格规范 - 缩进、换行、大小写等风格问题
  • 实践规范 - 规避一些常见的隐患,或者针对特定问题的最佳实践
  • 业务规范 - 与业务有关的特殊要求,好比文案中的关键词

团队的代码规范一般以文档的形式存在,供新人们学习。但文档这种形式常见的状况就是新人看过以后就再也不回顾了,也很难对实际写代码造成真正的约束。

在规范的基础上,要经过Code Review将规范落地。Code Review中你们能够对代码质量问题进行交流,而且相互监督,造成团队重视代码的习惯。

 

阶段二:自动化

自动化是指在代码规范的基础上,使用自动化工具进行质量检查,一般包括:

  • 代码规范检查 - 包括风格规范、实践规范、业务规范
  • 重复率 - 重复出现的代码区块占比,一般要求在5%如下
  • 复杂度 - 总行数,模块大小,循环复杂度等
  • 检查覆盖度 - 通过检查的行数占代码库总行数的比

自动化质量检查能够覆盖多数常见问题,可以提高开发效率,也能够下降人工Code Review的成本。

自动化检查工具的规则集与代码规范直接对应。经过编辑器插件,在写代码的时候直接给出检查结果。到这个阶段,团队的代码规范文档已经再也不须要陈述各类细节,开发者能够直接经过查看自动化工具的规则集来了解代码规范。

 

阶段三:流程化

流程化的意思是将自动化代码质量检查和Code Review与代码流动的过程绑定,从而保证全部上线的代码都通过机器与人工多个环节的检查。

代码流动过程:

执行自动化代码质量检查的时机:

  • 编辑时 - 使用编辑器插件,实时运行质量检查
  • 构建时 - 在本地或者开发机的构建脚本中运行质量检查
  • 提交时 - 利用Git Hooks,提交代码或者生成Pull Request时运行质量检查
  • 发布时 - 在发布脚本中再作一次质量检查,一般与自动化测试放在一

质量检查与代码流动绑定后的效果:

除了人工的Code Review以外,各个环节的代码质量检查都是机器自动运行的,不会给开发者带来额外的成本。

 

阶段四:中心化

当团队规模愈来愈大,项目愈来愈多时,代码质量管控就会面临如下问题:

  • 不一样项目使用的代码规范不同
  • 部分项目因为放松要求,没有接入质量检查,或者存在大量未修复的缺陷
  • 没法从团队总体层面上体现各个项目的质量情况对比

为了应对以上问题,须要建设中心化的代码质量管控体系,要点包括:

  • 代码规范统一管理。使用Git或者NPM包管理自动化代码质量检查的规则集,自动安装,不在本地写规则。一个团队、一类项目、一套规则。
  • 使用统一的持续集成服务。质量检查不经过的项目不能上线。
  • 创建代码质量评分制度。让项目与项目之间可以横向对比,项目自身可以纵向对比,而且进行汇总反馈。

总结

在面临业务压力时,人们一般会倾向于经过增长人力来缓解业务压力。但从系统总体的角度来看,人力增长会形成代码质量变差,开发效率降低,从而再度增大业务压力。这种代码质量愈来愈差的循环,是熵增定律在软件工程领域的生动体现。

为了抑制这种循环,咱们须要有意识地投入资源来建设代码质量的管控体系。这个过程分为四个阶段:规范化,自动化,流程化,中心化。每一个阶段都有不一样关注的要点。

相关文章
相关标签/搜索