代码质量管控的四个阶段

前言:

   质量、功能和进度,是一个软件项目的三根支柱,但在现实项目中,当质量和其它两项产生冲突时,往往是作为被牺牲的对象。团队对于质量的态度主要停留在口头重视上,似乎还没有上升到团队意识的高度,也缺乏必要的保障手段。但没有质量的功能,从它面世第一天就开始永无止境的修补,并最终走向被[重写](https://so.csdn.net/so/search?q=%E9%87%8D%E5%86%99&spm=1001.2101.3001.7020)的命运;没有质量的进度,只能是一个虚伪的承诺,因为接踵而至的,是一轮又一轮的附加开销,有效进度被大大拖延。要想提升代码质量,首先需要确立质量意识

    本文讨论的代码质量指的是代码本身的质量,包括复杂度、重复率、代码风格等要素。代码是团队的共同财产,代码质量是团队技术水平和管理水平的直接体现。代码质量下降通常会自成因果,导致恶性循环:
  • 破窗效应:在烂代码上继续生产烂代码的心理负担小很多
  • 传染性:烂代码传递着一种不在意质量,只看业务成果的负面信息,会伤害团队的技术热情和工作氛围,导致更多烂代码出现

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

一、熵增定律与代码质量

熵增定律告诉我们,一个封闭系统总是趋向于熵增,也就是系统的无序程度只会不断增加。

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

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

二、经典循环

    烂代码产生的常见原因是业务压力大,导致没有时间或意愿讲究代码质量。但是向业务压力妥协而生产烂代码之后,开发效率会随之下降,导致业务压力更大,形成一种典型的恶性循环。
image
    为了应对业务压力,常见的做法就是向项目中增加人力,但是单纯地增加人力的话,会因为风格不一致、沟通成本上升等原因导致烂代码更多。
image
    要遏制这种恶性循环,需要多管齐下,主动对代码质量进行管控,并且持续进行技术升级,系统性地解决问题。
image
    不过质量管控和技术升级需要长期投入才能产生效果。通常情况下人们还是倾向于通过增加人力快速地解决业务压力的问题,而忽略了对于代码质量的负面影响,导致代码质量越来越差。

三、四个阶段

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

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

阶段一:规范化

    保障代码质量的基础是建立团队的代码规范,通常包括:
  • 风格规范 - 缩进、换行、大小写等风格问题

  • 实践规范 - 规避一些常见的隐患,或者针对特定问题的最佳实践

  • 业务规范 - 与业务有关的特殊要求,比如文案中的关键词

    团队的代码规范通常以文档的形式存在,供新人们学习。但文档这种形式常见的情况就是新人看过之后就不再回顾了,也很难对实际写代码形成真正的约束。
    
    在规范的基础上,要通过 code review 将规范落地。code review 中大家可以对代码质量问题进行交流,并且相互监督,形成团队重视代码的习惯。
    

阶段二:自动化

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

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

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

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

阶段三:流程化

    流程化的意思是将自动化代码质量检查和 code review 与代码流动的过程绑定,从而保证所有上线的代码都经过机器与人工多个环节的检查。代码流动过程:
image

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

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

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

image

阶段四:中心化

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

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

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

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

总结

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

    为了抑制这种循环,我们需要有意识地投入资源来建设代码质量的管控体系。这个过程分为四个阶段:规范化,自动化,流程化,中心化。每个阶段都有不同关注的要点
转载:https://blog.csdn.net/a745233700/article/details/126327098
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容