代码分析与自动化重构工具集:Modernizing(代码结构分析工具)

遗留系统的现代化演进是一门艺术。

Why 开源 遗留系统现代化工具

在日常的软件开发里,我们经常会遇到一系列的问题,诸如于:

  • 如何解决人类智商不够的问题?模式、原则和工具

  • 谁应该去解决代码的问题?代码

  • ……

应对于这些问题,其中的一个解决方案就是:自动化的工具,有些人喜欢称之为。支撑这些工具的便是一系列的原则模式,将它们融入到工具之中。另外一个解决人成长的方案就是:元元(meta-meta),这是另外一个故事。

遗留系统是常态。多数时候,我们所遇到的系统里多数是遗留系统,来到一个新项目时,可能就需要对他们快速的分析,以提供洞见 —— 写 PPT 汇报。所以,在过去的几年里,咨询团队也沉淀了一系列的遗留系统分析和重构的工具,比如新哥的 Tequila、正在开源的架构分析和守护工具 ArchGuard 等等。除此,在有些重构项目里,还要编写定制的工具来进行分析。

技术热情发电。主要的挑战是,我们需要拿自己的业余时间来完善工具。

既然要用自己的时间来开发,还和项目没有关系,这种用爱发电的事情,用开源的方式最合适了。

我们需要怎样的工具?

从对于使用工具的结果来看,我们需要这个现代化工具是:

  • 可视化驱动。快速生成项目的分析结果,并展示出来给开发人员了解现状,还有编写 PPT。

  • 必要的交互性。用于在重构的过程中,寻找合适的切入点。

  • 定制化开发。

    • 特定坏味道。不同的开发团队会有不同的坏味道,有些坏味道是无法由 Sonarqube 这样的工具识别的。

    • 自动化重构。基于已知的坏味道,对应的代码位置信息,对代码进行自动化重构。

  • 适当的语法精准度。更高的语法精准度,意味着更高的开发成本,需要有针对地平衡它们。

  • 多平台。我们用的是 macOS,而多数时候,客户使用的是 Windows。

如何开发这样的工具?

这里定义的遗留系统现代化工具包含了这么几部分:语法分析、结果及可视化、自动化重构、架构守护。

代码分析与自动化重构工具集:Modernizing(代码结构分析工具)

语法分析

对代码进行语法分析,生成特定的语言的数据结构。常用的工具有:Antlr、Ctags、TreeSitter、DoxygenCodeQuery 等。一个大致的对比(拍脑袋订的)如下表所示:

代码分析与自动化重构工具集:Modernizing(代码结构分析工具)

结果及可视化

通常来说,我们会出于以下的一些情况,来对遗留系统进行可视化:

  • 数值化。如针对于特定的 smell 进行自动化重构,类似于 Sonarqube,常见的模式和原则源自于《重构》一书。在 Coca 里,还引入了在一些论文里看到了测试的 bad smell,诸如于没有断言的测试等。

  • 可视化依赖。如针对于代码中的类、包等的依赖情况进行可视化,主要用于分析分层架构等。常用的工具有:PlantUML、Graphviz、D3.js、Echarts 等。

  • 代码属性可视化。如针对于文件的修改频率、大小等属性进行可视化,可以获取诸如于单位时间内的文件变化频率。一个文件经常修改,还大量被引用,那说明它是一个不稳定的类、文件,除了业务变化,最有可能就是设计不合理。

  • 其它。

自动化重构

这一步是可选的,它取决于我们的场景。通常来说,编写这样的功能主要弥补是现代化的 IDE 无法完成的工作,诸如于:

  • 多代码库间的未使用类删除。

  • 多代码库间的聚类。

  • 针对于 CSS 颜色的重构。

架构守护

编写架构的守护规则,以对于系统的架构进行守护,用的工具有:ArchUnit、ArchGuard 等。在参考了 ArchUnit 的语法之后,我们也设计了一个多语言的架构守护工具:Guarding。

在开发这些工具的过程中,它们也不断地 push 着我进一步学习语言背后的东西,如编译原理(语言的前端部分),理解构建系统(build system)等。

遗留系统现代化工具集

为了更有针对性地对遗留系统进行现代化,最近我们创建了一个新的组织:Modernizing,集合了先前开发的一系列工具。并创建了:awesome-modernization 用于对其它的一系列相关的工具进行收集。

在 Modernizing 里,针对于单个编程语言的工具有:

  • 针对于 Java 语言的系统重构、系统迁移和系统分析的工具:Coca,Go 语言,GitHub stars:691。Coca 是一个“全功能”的重构工具,基于 Antlr 进行语法分析的,除了常规的可视化、调用分析,还可以进行自动化重构。Coca 一名的由来是:对标新哥写的 Tequila —— 龙舌兰酒 vs 快乐水。

  • 针对于 CSS/LESS/CSS 的分析和自动化重构工具:LemonjTypeScript 语言,GitHub stars:128。当时设计的主要目的是:用来对 CSS 中的颜色进行提取,基于 Antlr 的语法树分析,可以用于进行自动化的重构。

  • 针对于 MySQL 代码进行自动化分析,并从中构建中 UML,并生成其关系的:SQLing,Go 语言,使用 PingCapSQL 解析器解析。当然了,还有一个初始化的针对于 PL/SQL 的版本:pling。

  • 适用于 Ant 转 Maven 的半自动化工具:Merry,Go 语言 Antlr。

  • 前端规范化改造工具:Clij,用于一键添加 eslint、husky、lint-staged 等,TypeScript 语言。

针对于多语言的工具,我们有:

  • 基于 Antlr 的多语言的语言模型分析工具:ChapiKotlin 语言。其设计的初衷是用于生成 Coca 相同的数据结构,以接入更多的可视化工具。在语法分析上,采用的是 Antlr 进行分析。

  • 基于 Doxygen 的多语言分析和可视化工具:Go mod 版本的新哥的 Tequila。其中,还有一系列的迷之代码,需要重构掉。

  • 基于 Ctags 的多语言模型分析和可视化工具:Modeling,Rust 语言。分析源码,并生成基于模型的可视化依赖。

  • 基于 TreeSitter 的多语言架构守护工具:Guarding,Rust 语言。通过自制的 DSL,来对系统架构进行守护。

除此,还有一个在 Inherd 开源小组下开源的:Coco,它主要是通过代码的物理属性:修改频率 目录 行数来分析系统的工具。以及现在紧锣密鼓开源中的 ArchGuard。

我们使用一系列不同的语言和工具来开发这些软件,因为不同的场景之下,都会有不同的选择。

下一步?

现有的工具都是分散的,不同工具之前的数据格式不尽相同,缺乏统一的数据格式。在输出格式不统一时,我们就难以进行标准的可视化,诸如于我们正在构建 codecity 用于在元宇宙里,对遗留系统进行可视化,又或者是正在从 ArchGuard 中拆分的前端可视化部分,以用于复用。理想的情况下,它应该像是一个 pipeline 架构的系统,由一系列的 pipe 和 filter 所构成。

欢迎访问我们的 GitHub:https://github.com/modernizing

也欢迎成为这一系列工具的核心开发者 ~ 。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月29日 上午9:39
下一篇 2022年5月29日 上午9:48

相关推荐

  • 曲靖市协同办公系统

    曲靖市协同办公系统 随着现代办公方式的不断变革,协同办公系统已经成为企业日常运营中不可或缺的一部分。曲靖市作为云南省的一个重要城市,也需要一个高效的协同办公系统来支持企业的发展和运…

    科研百科 2024年10月10日
    16
  • 科研项目实施的技术风险

    科研项目实施的技术风险科研项目实施的技术风险问题近日,四川大学农业工程技术研究所、四川省农业工业大学大力开展了关于高等农业社会治理问题的研究。农业社会生产与管理等工程、农业生产组织…

    科研百科 2024年11月27日
    4
  • 疫情保障科研项目

    疫情保障科研项目 随着新冠疫情的爆发,全球范围内的科研项目面临着前所未有的挑战。为了保障科研项目的顺利进行,许多科学家和工程师正在采取措施,包括加强安全措施、调整项目计划和优化资源…

    科研百科 2025年2月1日
    2
  • 云呐|性价比高的化工设备资产管理软件

      生产设备在企业发展中起着非常重要的作用,化工企业设备复杂性强,种类繁多,管理难度相对较大。通过优化化工设备管理渠道,提高管理水平,可以有效减缓设备老化,提高设备整体使用寿命,避…

    2022年9月1日
    441
  • 云审项目管理系统官网首页

    云审项目管理系统官网首页 随着云计算和大数据技术的不断发展,云审项目管理系统成为了项目管理中不可或缺的一部分。它能够帮助企业高效地管理项目,提高项目质量,降低项目管理成本。本文将介…

    科研百科 2025年1月24日
    3
  • 项目管理责任书的内容(项目管理责任书)

    项目管理责任书项目管理责任书(NeuroninCEL)不少同学询问本书的目的:孩子叛逆期怎么引导?按孩子的心理成长过程来讲,每一个孩子都会经历叛逆期的,针对孩子叛逆期的不同阶段,父…

    科研百科 2024年5月20日
    35
  • 科研项目配图怎么做的快科研项目配图怎么做的快

    科研项目配图是一个非常重要的环节,能够增强项目的真实性和可信度,同时也能够提高项目的研究效果。以下是一些关于如何制作科研项目配图的建议: 1. 确定项目配图的目的和主题。在制作配图…

    科研百科 2024年7月9日
    37
  • 项目时间管理

    项目时间管理是项目管理的核心,它涉及到项目干系人的时间管理,也涉及到项目团队内部的协作管理。项目时间管理的重要性不言而喻,它可以帮助项目经理和项目团队有效地管理项目的时间,确保项目…

    科研百科 2024年5月26日
    42
  • 资源不再失效,5款本地无损音乐播放器推荐(本地无损音乐播放软件)

    大家在手机和电脑上听歌用的是哪些播放器?QQ酷狗?还是到点就emo(伤感)网易云?或者是其他的网络音乐播放器。不可否认的是网络音乐播放器确实不错,偶尔听上几首放松一下也很惬意,但真…

    科研百科 2024年5月21日
    203
  • 江苏医学会议管理系统

    江苏医学会议管理系统 江苏医学会议管理系统是一款用于管理医学会议的软件,它可以帮助组织者组织、管理和跟踪会议的进度,并提供各种功能,如会议通知、投票、发言、文件共享等。 江苏医学会…

    科研百科 2024年9月24日
    8