在淘宝,我们是这样衡量代码质量的

简介: ![img](https://img.alicdn.com/tfs/TB1ZTW4VEY1gK0jSZFMXXaWcVXa-2304-1194.png) **越高级别的程序员往往越看重代码质量。** 本篇文章主要聊一下在团队开发过程中,如何做到代码质量的管控与提升。首先需要有一套规范,定义什么是好的代码,再通过一些工具,帮助我们在实践规范的过程中,更好地遵循规范。 > TLDR:

img

越高级别的程序员往往越看重代码质量。

本篇文章主要聊一下在团队开发过程中,如何做到代码质量的管控与提升。首先需要有一套规范,定义什么是好的代码,再通过一些工具,帮助我们在实践规范的过程中,更好地遵循规范。

TLDR: 直接看第 4 点, Iceworks Doctor 解决方案。

demo

为何需要提高代码质量?

好的代码一定是整洁的,并且能够帮助阅读的人快速理解和定位。好的代码可以加快应用的开发迭代速度,不必花过多的时间来修复 bug 和完善代码。好的代码不但能够使得新的项目成员更容易加入项目,同时方便项目组成员快速做好 Back up。好的代码便于促进团队间交流合作提升开发效率。

有编码经验的人对代码都有一定的“鉴赏力”,能够凭感觉给出代码好坏的主观评价。但是这种凭感觉的方式太过个性随意,所谓仁者见仁智者见智,很难达成共识,那有没有一种公认的标准来鉴定代码质量呢?

代码质量评价标准

答案是有的。这里简单分享当下较常用的评价标准,其中包括:编码规范、可读性、可维护性、重复度及可测试性。

编码规范
主要包含是否遵守了最佳实践和团队编码规范,是否包含可能出问题的代码,以及可能存在安全的漏洞。编码规范有助于提高团队内协助的效率以及代码的可维护性。

可读性
Code Review 是一个很好的测验代码可读性的手段。如果你的同事可以轻松地读懂你写的代码,那说明你的代码可读性很好;反之则说明你的代码可读性有待提高了。遵守编码规范也能让我们写出可读性更好的代码。

可维护性
代码的可维护性是由很多因素协同作用的结果。代码的可读性好、简洁、可扩展性好,就会使得代码易维护;更细化地讲,如果代码分层清晰、模块化好、高内聚低耦合、遵从基于接口而非实现编程的设计原则等等,那就可能意味着代码易维护。除此之外,代码的易维护性还跟项目代码量的多少、业务的复杂程度、利用到的技术的复杂程度、文档是否全面等诸多因素有关。

重复度
遵守 Don’t Repeat Yourself 原则,尽量减少重复代码的编写,复用已有的代码。对项目定期进行代码重复度检测是一个很有意义的事,可以帮助开发人员发现冗余代码,进行代码抽象和重构。重复的代码一旦出错,意味着加倍的工作量和持续的不可控。如果代码中有大量的重复代码,就要考虑将重复的代码提取出来,封装成公共的方法或者组件。

可测试性
代码可测试性的好坏,同样可以反应代码质量的好坏。代码的可测试性差,比较难写单元测试,那基本上就能说明代码设计得有问题。

除此之外还有很多代码质量评价标准。我们需要一些取舍,选取部分大家有共识的规则定义团队好的代码标准。

代码质量建设怎么开始

当团队有了统一的代码质量评价标准后,便需要严格的执行代码编写规范。

工欲善其事,必先利其器

我们可以通过 SonarQube 等静态代码检测工具来进行代码质量建设。但在代码完成发布后如果线上没有问题的话,相信很少有人会主动优化代码,即使有扫描结果也很难推动代码质量的提升。

所以这里很需要平台、工具或者工作流上的配合。否则在具体写代码的过程中,很容易由于开发人员的不重视,导致整个 Code Base 变得越来越差。所以提高团队对代码规范的认同及严格执行是代码质量建设的关键。

当然我们也可以在代码提交的时候,利用钩子来控制允许提交或者拒绝提交,比如 git 的 pre-commit 和 commit-msg。但是这些都是比较滞后的方式,我们能不能更提前发现问题让开发在功能开发过程中就把发现的问题改掉?

Iceworks Doctor

为实现 JavaScript 代码规范的统一,并提升和改善团队代码质量,我们当前发布了 Iceworks Doctor 0.1.0 版本。该方案目前包括多场景统一的 ESLint 规则配置、多维度的代码衡量标准、执行分析扫描代码及代码修复等模块。通过各个模块协调配合,评估质量评分并修复规范问题,在降低维护成本、提升执行效率的同时保障代码规范的统一。

质量评分

img

当前版本通过 @iceworks/doctor 从 5 个维度对代码进行评分:

  1. 最佳实践: 通过 @iceworks/eslint-plugin-best-practices 分析项目,提出符合当前工程特征(对 ice 和 Rax项目友好)的最佳实践及阻塞问题发布卡口,帮助开发者优化项目性能,避免潜在 bug 。
  2. 安全实践: 通过 @iceworks/eslint-plugin-security-practices 扫码代码检测工程中可能存在的安全风险,包含 url 、敏感成词、明文账密信息及 npm 包证书检测,降低项目安全风险,守卫项目安全。
  3. 阿里代码规范: 这一维度主要反馈开发人员对于 eslint-config-ali 阿里开发规约的遵守程度。
  4. 可维护度: 通过 typhonjs-escomplex 对文件进行扫码,得出每个文件的可维护度,可读性及复杂度评分。针对得分较差的文件可以进行深度分析帮助开发者更好的重构复杂代码。
  5. 重复度: 通过 jscpd 计算重复出现的代码区块占比,计算出 clone 分数。并逐一列举重复的代码,方便开发者快速定位重复代码,将其封装成公共的方法或者组件。

根据上述 5 个维度通过加权平均的方式计算项目质量分,并根据木桶效应,在计算得分的过程中加大了最低分的权重,得出最终项目质量评分。

快来使用 Iceworks Doctor 测测自己项目的得分,比比谁的分数高吧~

问题修复

利用 VS Code 代码提示能力,我们在源码中标记出了问题代码,辅助开发者快速定位及修复代码。有问题的代码会在代码及文件名上有红色 / 黄色波浪线标示,鼠标 hover 时可预览问题详情窗口,也可通过 VS Code Problems 栏查看 Errors 列表。方便开发者在更前置的开发过程中发现和修复问题。

点击 “一键修复” 按钮可快速修正问题代码。同时在保存代码时,实时检测是否存在有安全风险的代码。

img

您的数据是私有的: Iceworks Doctor 是开源的,你可以很容易地看到我们收集了什么数据。我们永远不会与任何人共享您的个人数据。

前进方向思考

愿景: 让团队没有不及格(低于60分)的代码。

整体方案的设计如下图所示:

img

在后续的版本迭代中,Iceworks Doctor 将构建一个完整的系统性方案。仅需安装一个 VS Code 插件,便可拥有从配置开发环境,辅助开发、诊断和修复质量问题到 PR 发布一整套更加便捷智能的工作流程。通过极低的成本便可维护团队代码质量,开发环境、质量、安全问题及团队协作问题均可在 VS Code 中解决,并在关键的流程节点来把控代码的质量,深度和 DEF 团队合作形成闭环。

同时我们正在筹划淘系前端最佳实践的 ESLint 规范,结合 eslint-config-ali 及和各个团队的质量接口人共同制定出更适合淘系前端团队的 ESLint 规范。(欢迎私信我 进行共建哦~)

我们还将为有需要的团队提供研发数据服务支持,管理查询项目质量的同时,可以配置定制更符合团队需要的质量解决方案及发布卡口,发布公告等。

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot项目在logback.xml中读取application.properties中配置的日志路径

文章目录一、问题二、原因三、LOGBACK.XML中读取配置中的日志路径方案3.1. 方案一3.2. 方案二一、问题 在SpringBoot项目,使用logback.xml中配置日志的存储位置时,读取application.properties或application.yml中配置的路径,在logback.xml中…

Java知识全面总结:并发编程+JVM+设计模式+常用框架+....

本文整理的Java知识体系主要包括基础知识,工具,并发编程,数据结构与算法,数据库,JVM,架构设计,应用框架,中间件,微服务架构,分布式架构等内容。同时也有作为程…

智能消息服务-数字短信使用FAQ简介: 数字短信是基于普通短信,通过一套编码技术实现的短信服务。它能把视频、音频、网页、GIF图、文字等多种表现形式通过多媒体短信形式触达用户。本文将带你了解阿里云通信

简介: 数字短信是基于普通短信,通过一套编码技术实现的短信服务。它能把视频、音频、网页、GIF图、文字等多种表现形式通过多媒体短信形式触达用户。本文将带你了解阿里云通信数字短信产品的开通与使用。 一、数字短信功能如何开通? 1.开通…

xxl-job registry fail, registryParam:RegistryParam{regist

在项目集成xxl-job发现执行器一直注册不上去,心跳报错。 xxl-job registry fail, registryParam:RegistryParam{registryGroup‘EXECUTOR’, registryKey‘xxl-job-invoice-api’, registryValue‘http://xxxxxx:9990/’}, registryResult:ReturnT [code500, msgTh…

台达b3伺服参数设置方法_2020东莞清溪台达自动化配件回收厂家直购

2020东莞清溪台达自动化配件回收厂家直购在不同的工业控制系统中,工控软件虽然完成的功能不同,但就其结构来说,一般具有如下特点:实时性:工业控制系统中有些事件的发生具有随机性,要求工控软件能够及时地处…

3千字带你搞懂XXL-JOB任务调度平台

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 一、概述 在平时的业务场景中,经常有一些场景需要使用定时任务,比如: 时间驱动的场景:某个时间点发送优惠券&…

“今朝安全众测平台”正式启动运行

2021年5月19日,由中国信息产业商会指导,中国信息安全测评中心组织运营的“今朝安全众测平台”正式启动运行,提供网络安全众测服务。 “今朝安全众测平台”启动运行发布会在北京国谊宾馆成功召开。发布会以“群贤毕至谋众测,志存高…

自然语言处理在开放搜索中的应用

自然语言智能(NLP) 自然语言智能研究实现人与计算机之间用语言进行有效通信。它是融合语言学、心理学、计算机科学、数学、统计学于一体的科学。它涉及到自然语言和形式化语言的分析、抽取、理解、转换和产生等多个课题。 人工智能可以分为几个阶段 •…

搞定客户端证书错误,看这篇就够了

简介: TLS/SSL 握手失败引起的连接异常问题怎么搞?阿里云 SRE 工程师手把手带你排查解决。 1.TLS/SSL 握手基本流程 *图片来源于网络 2.案例分享 2.1CFCA 证书的历史问题 2.1.1背景 某客户为其生产环境的站点申请了一张由 CFCA 签发的证书。相关域名…

程序员通过脚本免费领到 CSDN 会员卡

很多人喜欢下载插件去丰富浏览器现有功能各式各样的脚本虽有趣但若是能亲手设计开发一个脚本看着大家玩着自己的脚本是不是会觉得更加有成就感呢?想拥有一款属于自己的脚本吗?想获得丰厚的奖品吗?那么就千万不要错过这次活动【2021CSDN脚本征…

12123两小时没付款怎么办_机械厂上班的男朋友,一天十小时,周末不休,没时间陪我怎么办?...

01小江是去年认识的男朋友,当时觉得男朋友老实,在机械厂上班,能吃苦能挣到钱,以后能养家糊口,老老实实过一份踏实的日子。理想很丰满,现实很骨感。他们认识的时候正好是夏天,天气热。男朋友的工…

小红书推荐大数据在阿里云上的实践

简介: 本篇内容主要分三个部分,在第一部分讲一下实时计算在推荐业务中的使用场景。第二部分讲一下小红书是怎么使用Flink的一些新的功能。第三部分主要是讲一些OLAP的实时分析的场景,以及和阿里云MC-Hologres的合作。 作者:小红书…

AI 3D 传感器市场竞争白热化,中国掌握自主可控核心技术时不我待!

受访者 | 孔博记者 | 夕颜图源 | 视觉中国出品 | AI科技大本营(ID:rgznai100)提到AI 3D传感技术,也许很少有人脑中有概念。但是以下图iPhone手机最早推出的3D虚拟表情生成为例,大概就会知道这项技术可以用来做什么了。 2017年苹果…

数据中台交付专家告诉你,数据架构的分层怎样更加合理?

作者:柯根 从整体上看,数据中台体系架构可分为:数据采集层、数据计算层、数据服务层三大层次。通过这三大层次对上层数据应用提供数据支撑。 数据采集层 对于企业来说,每时每刻都在产生海量的数据,数据采集作为数据…

手机版腐蚀rust_手机进水后黑屏,该怎么办?切忌做这几件事

手机进水后黑屏,不可急于开机,应先取下SIM卡,然后拆机对手机内部的主板及各个接口进行清理。如果处理后仍然黑屏,通常可以通过修复受损电路及更换屏幕来解决这个问题。手机进水引起黑屏的原因手机内部进水,通常由听筒、…

XXL-Job集群部署和⾼可⽤最佳实战

文章目录一、调度中心集群部署1. HA/集群2. 调度中⼼集群3. 执⾏器集群4. 集群需要满足的条件5. 集群部署最佳实战二、任务执行器的集群配置2.1. 集群地址配置2.2. 执行器名称配置2.3. 执行器端口三、路由策略一、调度中心集群部署 1. HA/集群 为了避免单点故障,任…

看动画学算法之:linkedList

简介 linkedList应该是一种非常非常简单的数据结构了。节点一个一个的连接起来,就成了linkedList。今天我们使用动画的方法一起来看看linkedList是怎么插入和删除的。 linkedList的构建 linkedList是由一个一个的节点构成的。而每个节点只需要存储要保存的数据和…

CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请

HarmonyOS Beta 版测试申请入口已于5月17日全面关闭,屏幕前正在敲代码的你是不是错失了这次机会? 作为 HarmonyOS 的合作伙伴,“CSDN鸿蒙社区”为广大 CSDN 乡亲们申请到部分内测资格,只要拥有内测资格设备即可免费申请&#xff0…

linux环境~Kafka集群 监控 Kafka Eagle 图形化版本

文章目录一、安装、配置、验证1. 安装包下载2. 开启kafka JMX3. 安装JDK,配置JAVA_HOME4. 上传安装包、解压5. 配置Kafka-eagle环境变量6. 配置Kafka_eagle7. 配置ke.sh8. 启动Kafka_eagle9. 防火墙10. 访问Kafka eagle二、监控面本总览2.1. Dashboard2.2. MESSAGE2…

前端搞报表|数据分析提效全链路解决方案

简介: 前端早早聊直播干货 作者:闲鱼技术-云听 背景介绍 闲鱼 2014 年成立,到现在的话已经实现了从 0 ~ 千万级 DAU 的跃迁,随着业务的快速发展,业务决策方法紧跟升级。从最原始的经验驱动到更加科学合理的数据驱动…