0

0

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

蓮花仙者

蓮花仙者

发布时间:2025-07-11 10:32:12

|

272人浏览过

|

来源于php中文网

原创

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

开源和遗留系统现代化工具在日常的软件开发中,我们常常面临一系列问题,例如:

如何解决人类智力不足的问题?模式、原则和工具谁应该解决代码的问题?对于这些问题,一个解决方案是:自动化工具,有些人称之为器。这些工具由一系列的原则与模式支持,将它们融入工具中。另一个解决人成长的方案是:元元(meta-meta),这是另一个故事。

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

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

既然要用自己的时间来开发,且与项目无关,这种用爱发电的事情,用开源的方式最合适。

我们需要怎样的工具?从使用工具的结果来看,我们需要的现代化工具是:

可视化驱动。快速生成项目的分析结果,并展示给开发人员了解现状,还有编写PPT。必要的交互性。用于在重构过程中,寻找合适的切入点。定制化开发。特定坏味道。不同的开发团队会有不同的坏味道,有些坏味道无法由Sonarqube这样的工具识别。自动化重构。基于已知的坏味道,对应的代码位置信息,对代码进行自动化重构。适当的语法精准度。更高的语法精准度意味着更高的开发成本,需要有针对性地平衡它们。多平台。我们用的是macOS,而多数时候,客户使用的是Windows。如何开发这样的工具?这里定义的遗留系统现代化工具包括以下几部分:语法分析、结果及可视化、自动化重构、架构守护。

代码分析与自动化重构工具集:Modernizing语法分析对代码进行语法分析,生成特定的语言数据结构。常用的工具有:Antlr、Ctags、TreeSitter、Doxygen、CodeQuery等。一个大致的对比如下表所示:

代码分析与自动化重构工具集:Modernizing结果及可视化通常来说,我们会出于以下的一些情况,来对遗留系统进行可视化:

数值化。如针对于特定的smell进行自动化重构,类似于Sonarqube,常见的模式和原则源自于《重构》一书。在Coca里,还引入了在一些论文中看到的测试的bad smell,例如没有断言的测试等。可视化依赖。如针对于代码中的类、包等的依赖情况进行可视化,主要用于分析分层架构等。常用的工具有:PlantUML、Graphviz、D3.js、Echarts等。代码属性可视化。如针对于文件的修改频率、大小等属性进行可视化,可以获取诸如于单位时间内的文件变化频率。一个文件经常修改,还大量被引用,那说明它是一个不稳定的类、文件,除了业务变化,最有可能就是设计不合理。其它。自动化重构这一步是可选的,它取决于我们的场景。通常来说,编写这样的功能主要弥补现代化的IDE无法完成的工作,例如:

网奇企业网站管理系统CWMS2.0 英文版
网奇企业网站管理系统CWMS2.0 英文版

CWMS 2.0功能介绍:一、 员工考勤系统,国内首创CWMS2.0的企业员工在线考勤系统。二、 自定义URL Rewrite重写,友好的搜索引擎 URL优化。三、 代码与模板分离技术,支持超过5种类型的模板类型。包括:文章、图文、产品、单页、留言板。四、 购物车功能,CWMS2.0集成国内主流支付接口。如:淘宝、易趣、快钱等。完全可媲美专业网上商城系统。五、 多语言自动切换 中英文的说明。六、

下载

多代码库间的未使用类删除。多代码库间的聚类。针对于CSS颜色的重构。架构守护编写架构的守护规则,以对于系统的架构进行守护,用的工具有:ArchUnit、ArchGuard等。在参考了ArchUnit的语法之后,我们也设计了一个多语言的架构守护工具:Guarding。

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

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

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

针对Java语言的系统重构、系统迁移和系统分析工具:Coca,Go语言,GitHub stars:691。Coca是一个“全功能”的重构工具,基于Antlr进行语法分析的,除了常规的可视化、调用分析,还可以进行自动化重构。Coca一名的由来是:对标新哥写的Tequila——龙舌兰酒vs快乐水。针对CSS/LESS/CSS的分析和自动化重构工具:Lemonj,TypeScript语言,GitHub stars:128。当初设计的主要目的是:用来对CSS中的颜色进行提取,基于Antlr的语法树分析,可以用于进行自动化的重构。针对MySQL代码进行自动化分析,并从中构建UML,并生成其关系的:SQLing,Go语言,使用PingCap的SQL解析器解析。当然了,还有一个初始化的针对PL/SQL的版本:pling。适用于Ant转Maven的半自动化工具:Merry,Go语言+Antlr。前端规范化改造工具:Clij,用于一键添加eslint、husky、lint-staged等,TypeScript语言。针对多语言的工具,我们有:

基于Antlr的多语言的语言模型分析工具:Chapi,Kotlin语言。其设计的初衷是用于生成Coca相同的数据结构,以接入更多的可视化工具。在语法分析上,采用的是Antlr进行分析。基于Doxygen的多语言分析和可视化工具:Go mod版本的新哥的Tequila。其中,还有一系列的迷之代码,需要重构掉。基于Ctags的多语言模型分析和可视化工具:Modeling,Rust语言。分析源码,并生成基于模型的可视化依赖。基于TreeSitter的多语言架构守护工具:Guarding,Rust语言。通过自制的DSL,来对系统架构进行守护。除此,还有一个在Inherd开源小组下开源的:Coco,它主要是通过代码的物理属性:修改频率+目录+行数来分析系统的工具。以及现在紧锣密鼓开源中的ArchGuard。

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

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

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

832

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

737

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

734

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16925

2023.08.03

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
RunnerGo从入门到精通
RunnerGo从入门到精通

共22课时 | 1.7万人学习

尚学堂Mahout视频教程
尚学堂Mahout视频教程

共18课时 | 3.2万人学习

Linux优化视频教程
Linux优化视频教程

共14课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号