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

代码质量评价标准

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

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

编码规范

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

可读性

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

可维护性

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

重复度

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

可测试性

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

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

代码质量维度

当前版本通过 @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 个维度通过加权平均的方式计算项目质量分,并根据木桶效应,在计算得分的过程中加大了最低分的权重,得出最终项目质量评分。

项目地址

github地址:https://github.com/ice-lab/iceworks/tree/master/

推荐几款代码质量检测工具:

然后说说工具的问题。我用过的开源、商业代码质量工具没少说也有个二三十种( V 站除了同行应该没人比我多了。。。吧)。这些工具如果按照规则类型划分,可以看做两类。一类安全,也就是检查安全问题,比如 NullPointer、SQL Injection、Data Race,他们会影响程序的安全运行;一类是规约,简单来说就是 code style。不过考虑到很多规则其实两者兼具,我就简单的按语言划分好了。(都是开源的)

c/c++:

clang-tidy http://clang.llvm.org/extra/clang-tidy

CSA https://clang-analyzer.llvm.org

cppcheck https://github.com/danmar/cppcheck

cpplint https://github.com/google/styleguide

phasar https://github.com/secure-software-engineering/phasar

这里面比较推荐 clang-tidy,虽然规则不多,但是规则编写简单,只要你对 C++有足够了解,可以定制出十分丰富的内容

java:

google-java-format https://github.com/google/google-java-format

find-sec-bugs https://find-sec-bugs.github.io

spotbugs https://spotbugs.github.io

pmd https://github.com/pmd/pmd

p3c https://github.com/alibaba/p3c

soot https://sable.github.io/soot

spotbugs 和 pmd 都是比较优秀的工具,前者有 find-sec-bugs 这样的插件。而后者,ali 的 p3c 规则集就是基于 pmd 实现的。此外 pmd 是一个针对多种语言的框架,内容十分丰富。这两者国际化和文档都做的非常好。而 soot 本质上一个 jvm bytecode 的优化框架,但同样可以基于此做出各种工具,不过考虑到它复杂的内容,emmmm...

其他:

python https://github.com/PyCQA/pylint

kotlin https://github.com/arturbosch/detekt

JS/TS https://github.com/eslint/eslint

Rust https://github.com/rust-lang/rust-clippy

shell https://github.com/koalaman/shellcheck

Multiple languages https://github.com/facebook/infer

Multiple languages https://github.com/github/semantic

我列举的都是我觉得有用的并且目前处于活跃状态的项目,大家无聊的话可以看看。还有一个专门介绍静态分析工具的仓库https://github.com/mre/awesome-static-analysis

再然后对于工具的使用。对于工具大家都知道,不用等于没用。所以一般的解决办法都是融入流程,最简单的像 Unittest 一样,编译完成后跑一遍。并入 CI 流程也是普遍做法,代码入库前扫描成功才允许合并,这样同时还可以保证 code format 的问题。除此之外,减少这类工具的 report 数量也是重点。过于繁多的报告(尤其是项目早期开发的时候)往往不利于发现真正有价值的问题,也不利于修复。所以熟悉工具的规则和配置,少报无关问题是工具使用的关键。

简单说就这么多,如果感兴趣我有空可以开个系列,专门介绍代码静态分析的技术、使用问题

号称中国最好的静态分析工具(将来就是世界最好)

https://www.sourcebrella.com/

对标国际厂商比如 Coverity、fortify、checkmax,我们一点不虚,甚至在技术上还有优势( PLDI、ICSE 最近几年都有论文)

推荐几款代码检查工具,淘宝开源代码质量检测工具相关推荐

  1. 淘宝开源代码质量检测工具!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 好的代码一定是整洁的,并且能够帮助阅读的人快速理解和定位. ...

  2. 淘宝开源代码检测工具!(附源码)

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]          正文   好的代码一定是整洁的,并且能够帮助阅读的人快速理解和定位.好的代码可以加快应用的开发迭代速度,不必花过多的时间 ...

  3. 一款基于jQuery仿淘宝红色分类导航

    今天给大家分享一款基于jQuery仿淘宝红色分类导航.这款分类导航适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览    ...

  4. 淘宝数据库内核月报搜索工具

    一:工具作用 该工具可以根据指定关键字搜索淘宝内核月报的标题,正文及代码三个部分,只要其中一个部分有关键字匹配,就会输出该篇月报的标题及url. 二:工具使用方法 1.工具执行 双击 "内核 ...

  5. 旺旺打标工具,淘宝搜索打标软件(含旺旺打标API接口)

    一.[旺旺打标工具,淘宝搜索打标软件]实现需求 指定的单品将会出现在手淘搜索首屏位置及淘内所有免fei流量入口位置. 二.[淘宝搜索打标]应用场景    使用淘宝搜索打标工具后,将宝贝推送到搜索页. ...

  6. 淘宝店铺装修代码大全

    淘宝店铺装修代码大全    快去学习一下吧这里有我做的实例. http://shop100597761.taobao.com/ html设计代码大全 1)贴图:< img src="图 ...

  7. C++ 代码模拟登录淘宝、天猫、支付宝等电商网站的实现

    有关C++ 代码模拟登录淘宝.天猫.支付宝等电商网站的实现, 在群上有很多人问, 想来有许多人对此非常感兴趣, 其中的厉害关系在此不做深究, 这篇文章也仅仅提供一些基础的实现方法, 由于整个过程中基本 ...

  8. 淘宝店铺装修代码大全,淘宝页面设计代码.

    淘宝店铺装修代码大全    快去学习一下吧这里有我做的实例. http://shop110214125.taobao.com 有什么问题可留言我会尽量解答. http://txw100.com/  如 ...

  9. 【超详细Python秒杀代码】京东淘宝抢购通用

    由于之前手动抢购枪神7超竞连续失败两次后怒学脚本抢购,今天给大家分享一期超简单+直观+好用的Python脚本. !!此代码目前仅适用于可以加入购物车的商品 直接上代码! import datetime ...

  10. python不登陆爬取淘宝数据_python登录并爬取淘宝信息代码示例

    本文主要分享关于python登录并爬取淘宝信息的相关代码,还是挺不错的,大家可以了解下. #!/usr/bin/env python # -*- coding:utf-8 -*- from selen ...

最新文章

  1. 前沿技术 | 自动机器学习综述
  2. PHP正则匹配效率,PHP 正则表达式效率 贪婪、非贪婪与回溯分析(推荐)
  3. vue使用process.env搭建自定义运行环境
  4. Vue.js 系列教程 5:动画
  5. od ida 栈溢出初体验
  6. 黄聪:微信h5支付demo微信H5支付demo非微信浏览器支付demo微信wap支付
  7. 微信公众平台消息接口开发(8)小黄鸡(小贱鸡)机器人
  8. pdf格式转换成jpg转换器
  9. 2020 年 Python 知识清单(网络爬虫)
  10. 区块链游戏 对战游戏NFT游戏模式开发方案
  11. kali 镜像下载(免费下载)
  12. 如何正确控制springboot中bean的加载顺序总结
  13. 北京19家A类定点医院名单
  14. 电能减去热能计算机械能,力与运动机械能热能计算题
  15. 四旋翼飞行器4——四旋翼飞行器的硬件设计(还未完)
  16. webug靶场渗透基础攻略
  17. 解决“IE图标不见了”问题
  18. Kafka异常问题记录
  19. CAD中 OLE不能旋转_CAD制图初学入门教程:阵列功能的使用技巧
  20. 基于JUPYTER的python主流库新手教程(上)

热门文章

  1. 用python写的,一个中英文转摩斯电码小程序
  2. YDOOK: USB 转 TTL 串口模块接线图
  3. Gradle下载官方地址
  4. windows10 局域网内传输文件
  5. 局域网计算机如何传输文件,强烈推荐电脑同一个局域网传输文件的图文教程
  6. OpenLayers教程十五:多源数据加载之矢量地图
  7. echarts中国地图,省市标注代码
  8. 如何使用U盘替换光驱引导部署WES7系统
  9. 如何撰写专利说明书?
  10. IOS平台车牌识别技术简介