乐趣区

关于javascript:在淘宝我们是这样衡量代码质量的

简介: 越高级别的程序员往往越看重代码品质。 本篇文章次要聊一下在团队开发过程中,如何做到代码品质的管控与晋升。首先须要有一套标准,定义什么是好的代码,再通过一些工具,帮忙咱们在实际标准的过程中,更好地遵循标准。> TLDR:

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

本篇文章次要聊一下在团队开发过程中,如何做到代码品质的管控与晋升。首先须要有一套标准,定义什么是好的代码,再通过一些工具,帮忙咱们在实际标准的过程中,更好地遵循标准。

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

为何须要进步代码品质?

好的代码肯定是整洁的,并且可能帮忙浏览的人疾速了解和定位。好的代码能够放慢利用的开发迭代速度,不用花过多的工夫来修复 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 规定配置、多维度的代码衡量标准、执行剖析扫描代码及代码修复等模块。通过各个模块协调配合,评估品质评分并修复标准问题,在升高保护老本、晋升执行效率的同时保障代码标准的对立。

品质评分

以后版本通过 @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 列表。不便开发者在更前置的开发过程中发现和修复问题。

点击“一键修复”按钮可疾速修改问题代码。同时在保留代码时,实时检测是否存在有平安危险的代码。

您的数据是公有的: Iceworks Doctor 是开源的,你能够很容易地看到咱们收集了什么数据。咱们永远不会与任何人共享您的集体数据。

前进方向思考

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

整体计划的设计如下图所示:

在后续的版本迭代中,Iceworks Doctor 将构建一个残缺的系统性计划。仅需装置一个 VS Code 插件,便可领有从配置开发环境,辅助开发、诊断和修复品质问题到 PR 公布一整套更加便捷智能的工作流程。通过极低的老本便可保护团队代码品质,开发环境、品质、平安问题及团队合作问题均可在 VS Code 中解决,并在要害的流程节点来把控代码的品质,深度和 DEF 团队单干造成闭环。

同时咱们正在策划淘系前端最佳实际的 ESLint 标准,联合 eslint-config-ali 及和各个团队的品质接口人独特制订出更适宜淘系前端团队的 ESLint 标准。(欢送私信我 进行共建哦~)

咱们还将为有须要的团队提供研发数据服务反对,治理查问我的项目品质的同时,能够配置定制更合乎团队须要的品质解决方案及公布卡口,发布公告等。

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

退出移动版