想要做好代码质量,如何破局?

想要,做好,代码,质量,如何 · 浏览次数 : 575

小编点评

**代码质量是什么意思?** 代码质量是指软件开发过程中代码的风格、重复率和复杂度等方面的衡量指标,它可以帮助开发者识别代码中的问题并进行改善。代码质量的好坏直接影响了软件的效率和质量,如果代码质量低,软件的性能会下降,更容易出现故障,影响用户体验。 **恶性循环的特点:** 恶性循环是指代码随着时间的推移变得越来越复杂或重复的现象。当代码的复杂度不断增加时,代码的质量也会逐渐下降,从而导致恶性循环。恶性循环会恶化软件性能并降低开发效率。 **熵增定律:** 熵增定律是指在一个孤立系统里,如果没有外力做功,其总混乱度(即熵)会不断增大。代码质量在软件项目是一种有序的状态,自然总是向着无序发展的,要想保持这种有序,需要主动投入资源,就像整理房间一样。 **解决方案:** 为了抑制恶性循环,我们可以采取以下措施: * 控制人力的大量投入:通过主动发起对代码质量进行管控,可以有效地降低代码质量管控的成本。 * 持续提升技术升级:通过长期的投入,可以提升开发人员的技术水平,从而提高代码质量。 * 建立完善的代码质量管控体系:通过部门内工程实践,可以建立一套体系化的方案,确保代码质量的持续提升。

正文

作者:苗现方

想要做好代码质量,我们不得不提什么是代码质量?本文中讨论的代码质量一般是指代码的风格、重复率和复杂度等,代码是技术团队的价值产物,是宝贵的财富,同样代码质量的好坏可以直接体现出团队的重视程度和技术管理水平。

代码质量的下降是内在原因,通常会恶性循环,主要表现出以下两个特性:

感染性:坏代码总能在部门渲染着只要业务交付达成,代码质量不重要的负面气氛,严重减低了研发人员的技术热情,破坏工作氛围,导致更多的坏代码出现。

心理暗示性:在坏代码基础上继续生产坏代码的"罪过"减轻。

为什么会产生这样的结果,这里我与你举个生活中的栗子,我在上个周日收拾房间,发现一个房间衣柜中的衣服很乱,花了很长时间才叠放好,过两天晚上下班回家,我发现客厅沙发上也很乱,衣服、电脑、背包、零食几乎日常的小物件都会有,两件事情合在一起想,这确实是一个很有趣的思考,为什么会是这样的?在一个相对封闭的空间中,任其无意识地随着时间的发展,房间和沙发也一定很乱,注意,这里我说的是无意识,也就是我并没有刻意放,或者去刻意整理。带着这个思考的结果,我又观察了大家的工位、园区内景观,一段时间内一定会出现乱象,不过通过一顿治理之后很快恢复到有秩序,好,大家可以猜到这是什么定律,就是熵增定律,不了解的可以自行网络科普,那么在质量域中依然存在这样的定律,不然熵增定律也不会被古今中外的物理学家所推崇备至,它的定义是:在一个孤立系统里,如果没有外力做功,其总混乱度(即熵)会不断增大。

代码质量在软件项目是一种有序的状态,自然总是向着无序发展的,要想保持这种有序,需要主动投入资源,就像整理房间,花草修剪一样。

回到我们的多数开发工作中,我们面临的现状是这样的:

1、业务交付压力大,需求优先上线,业务逻辑实现优先级最高,没时间没精力关注代码质量,甚至终极目标就是需求上线,导致坏代码产生,开发效率逐步下降,随着后续版本的迭代,业务交付压力越来越大。

2、出现了1的情况后,我们意识到压力越来越大,为了应付这种交付压力,常见的手段就是增加人力,但是一味的增加人数,沟通成本及风格的一致性无法得到保障,这将进一步产生更多的坏代码。

针对以上2个现状,我们该怎么着手解决。

我的建议方案是多渠道,系统性解决问题,首先控制人力的大量投入,主动发起对代码质量进行管控,其次持续提升技术升级。但是,从减轻业务交付压力的结果来看,人们往往倾向于增加人力来快速解决问题,技术升级需要靠长期的投入才能有所收获,所以,我们需要在质量方面增加强有力的管控。

如果做好代码质量管控?

代码质量管控首先应解决两个问题,库存坏代码和增量坏代码。

想解决这两个问题,我们要对现有的系统、人员、工具、流程整合形成一套体系化的方案。

 


 

对代码质量管控,通过在部门内工程实践,我认为需要经历以下这四个过程,部门内建立代码规范制度(EOS)、检查代码问题的自动化工具(bamboo平台)、代码质量检查与代码流动过程绑定(质量门禁)、部门视角下,集中管理代码规范和质量状况的透明(代码质量评测系统)。

过程一:代码质量的基础是规范,包括代码风格的规范、长期一线代码实践规范、与业务需求相关的特殊规范,例如风控文案、异常托底文案等。

过程二:实现自动化的检查能力是在规范基础之上,通过自动化工具进行检查,包括对代码重复率、圈复杂度、单测case通过率、静态规则扫描等。

过程三:实现质量检查与代码流动过程绑定,在编辑-构建-提交-发布各个时段部署检查能力保障上线代码必须经过机器和人工的多环节检查。

过程四:团队规模逐步扩大,各业务线项目快速发展,实现规范管理统一、项目要求一致、各项目质量状况透明、对比,建立统一的评测体系。

为了让你有一个很直观的认识,我在下面画了一个张图,希望可以帮你快速理解。

 


 

总结:

在日常开发工作中,大家都会想到通过增加人手来缓解项目交付的压力,这是可以理解,但是从整体角度看,人员的增加会产生越来越多的坏代码,使整体的效率下降,这又进而加剧了后续项目交付的压力,在这种压力下,又通过增加人手缓解......让代码质量变的越来越差,这也是房间为什么会越来越乱,是熵增定律在软件质量域的生动体现。

为了抑制这种恶性循环,我们意识到了通过有效的手段和资源投入进行各项工程实践,逐步完善代码质量的管控体系,积累很多方法和工具。

目前,我也在积极探索对统一代码质量评测体系的实践,希望逐步建立一套中心化的代码质量评测系统,在这个系统中让工匠精神、专家文化借住平台进一步传播、让系统的质量更加透明。有关评测的具体实践,我在后续的文章中与大家分享。

与想要做好代码质量,如何破局?相似的内容:

想要做好代码质量,如何破局?

作者:苗现方 想要做好代码质量,我们不得不提什么是代码质量?本文中讨论的代码质量一般是指代码的风格、重复率和复杂度等,代码是技术团队的价值产物,是宝贵的财富,同样代码质量的好坏可以直接体现出团队的重视程度和技术管理水平。 代码质量的下降是内在原因,通常会恶性循环,主要表现出以下两个特性: 感染性:坏

Python 搭建 FastAPI 项目

一般网上的文章都是以脚本的方式写Demor的,没找到自己想要的那种项目结构型的示例(类似Java SpringBoot 创建 Model,通过 pom 进行关联配置的那种) 看了一些源码,再结合自己的想法,建了一个简单的示例, 用 Python 做接口服务的项目搭建,仅供参考 代码结构说明 VipQ

[转帖]Nginx反向代理中使用proxy_redirect重定向url

https://www.cnblogs.com/kevingrace/p/8073646.html 在使用Nginx做反向代理功能时,有时会出现重定向的url不是我们想要的url,这时候就可以使用proxy_redirect进行url重定向设置了。proxy_redirect功能比较强大,其作用是对

要想后期修改少,代码重构要趁早

摘要:在敏捷中,让设计简单化,必须让设计从简单开始,然后变得成熟。要做到这一点,重构是唯一的出路。 本文分享自华为云社区《敏捷技术实践之重构》,作者:华为云PaaS服务小智 。 前言 极限编程(XP)的创始人之一Ron Jeffries说道:“在敏捷中,让设计简单化,必须让设计从简单开始,然后变得成

Python:对程序做性能分析及计时统计

如果只是想简单地对整个程序做计算统计,通常使用UNIX下的time命令就足够了。由于我用的是Mac系统,和Linux系统的输出可能有不同,不过关键都是这三个时间:user: 运行用户态代码所花费的时间,也即CPU实际用于执行该进程的时间,其他进程和进程阻塞的时间不计入此数字;system: 在内核中执行系统调用(如I/O调用)所花费的CPU时间。total(Linux下应该是real):即挂钟时间

husky的使用

前言 在做个人项目的时候遇到一个需求,要在编完代码之后代码提交之前生成一个预览文件,手动执行脚本难免会遗漏。然后就想到之前在工作中使用过的husky,正好拿过来用一用; husky是什么? husky是一个给git增加 hooks 工具 打开文档发现husky的版本已经更新到8.x了,这时候就照着新

AI来实现代码转换!Python转Java,Java转Go不在话下?

今天看到个有趣的网站,给大家分享一下。 该网站的功能很神奇,可以实现编程语言的转化。感觉在一些场景之下还是有点作用的,比如你原来跟我一样是做Java的,因为工作需要突然转Go。这个时候用你Java的经验 + 这个工具,或许可以起到一定的帮助作用。 工具的使用也很简单,只需要在左侧黏贴你想转换的原始代

开发者进阶必备的9个Tips & Tricks!

优秀的开发人员市场前景是十分广阔的,但想找到一份理想的工作,仅有代码知识是不够的。优秀的工程师应该是一个终身学习者、问题的创造性解决者,着迷于整个软件世界。要成为一名优秀的开发者,应该具备哪些品质并做出哪些努力?本文给出了一些简单的tips,除了优秀的行为习惯之外,还有一些代码工具使用的小技巧。 方

从热爱到深耕,全国Top10开源软件出品人手把手教你如何做开源

摘要:DTT直播邀请到管雷鸣与广大开发者分享“如何在开源领域找到适合自己的路”。 “想象一下,你写的代码被越来越多的人使用,并极大地帮助他们提高了开发效率和稳定性。”这是不是一件很酷的事?而这正是开源的魅力… 开源作为一种推动软件开发技术创新的新模式,广受开发者的喜爱。作为拥有40余个开源项目,全国

如何找到并快速上手一个开源项目

以前有写过两篇文章来简单聊过如何做开源的事情,最近我自己组了一个社区里面也有不少朋友对开源感兴趣,于是我便根据自己的经验系统的梳理了一些关于开源的事情。 新手如何快速参与开源项目 手把手教你为开源项目贡献代码 有兴趣的可以先看看之前这两篇。 如何找到自己感兴趣的开源项目 首先第一步先想清楚自己搞