遗留系统现代化是一门艺术。为什么要开源+遗留系统现代化工具在日常的软件开发中,我们经常会遇到一系列的问题,比如:如何解决人类智商不足的问题?模式、原则和工具谁应该解决代码问题?代码...这些问题的解决方案之一是:自动化工具,有些人喜欢这样称呼它们。这些工具的基础是一组合并到工具中的原则和模式。人类成长的另一种解决方案是:meta-meta,这是另外一个故事。遗留系统是常态。大多数时候,我们遇到的大多数系统都是遗留系统。当我们来到一个新项目时,我们可能需要快速分析它们以提供见解——写一份PPT报告。因此,在过去的几年里,咨询团队也积累了一系列的遗留系统分析和重构工具,比如新哥的Tequila,开源的架构分析和守护工具ArchGuard等等。此外,在一些重构项目中,必须编写自定义工具进行分析。技术热情产生电力。主要的挑战是我们需要用业余时间来完善工具。由于要用自己的时间开发,与项目无关,所以开源的方式最适合这种用爱发电。我们需要什么样的工具?从使用工具的结果来看,我们对这个现代工具的需求是:一种特定的恶趣味。不同的开发团队会有不同的恶臭,有些恶臭是无法通过Sonarqube等工具识别出来的。自动重构。根据已知的不良气味和相应的代码位置信息,自动重构代码。可视化驱动。快速生成项目的分析结果展示给开发者了解现状,也可以编写PPT。必要的交互性。它用于在重构过程中寻找合适的切入点。定制开发。适当的语法准确性。更高的语法精度意味着更高的开发成本,需要有针对性地进行平衡。多平台。我们使用macOS,而大多数时候,客户使用Windows。如何开发这样的工具?这里定义的遗留系统现代化工具包括几个部分:语法分析、结果和可视化、自动重构和架构保护。语法分析对代码进行语法分析,生成特定于语言的数据结构。常用的工具有:Antlr,Ctags,TreeSitter,Doxygen,CodeQuery等。大致比较(头脑风暴排序)如下表:结果和可视化一般而言,我们会针对以下几种情况对遗留系统进行可视化:数值化.比如针对特定气味的自动重构,类似Sonarqube,常见的模式和原理都来自于《重构》这本书。在Coca中,还引入了一些论文中在测试中出现的不良气味,例如没有断言的测试。视觉依赖。例如,它可视化代码中类和包的依赖关系,主要用于分析分层架构。常用工具有:PlantUML、Graphviz、D3.js、Echarts等代码属性可视化。例如,通过将文件的修改频率和大小等属性可视化,可以获得例如每单位时间的文件改变频率。一个文件被频繁修改和大量引用,这意味着它是一个不稳定的类或文件。除了业务变化,最可能的原因是设计不合理。其他。这个自动重构的步骤是可选的,它取决于我们的场景。一般来说,写这样的功能主要是弥补了现代IDE无法完成的工作,例如:多个代码库之间未使用类的移除。跨多个代码库进行集群。重构CSS颜色。ArchitectureGuardian编写架构的守护规则来守护系统架构。使用的工具有:ArchUnit、ArchGuard等。在参考了ArchUnit的语法之后,我们还设计了一个多语言的架构守卫工具:Guarding。在开发这些工具的过程中,它们也在不断推动我进一步学习语言背后的东西,比如编译原理(语言的前端部分)、理解构建系统(buildsystem)等等在。遗留系统现代化工具集为了更有针对性地对遗留系统进行现代化改造,我们最近创建了一个新的组织:Modernizing,它汇集了之前开发的一系列工具。并创建:awesome-modernization用于收集其他一系列相关工具。在Modernizing中,单一编程语言的工具包括:Java语言的系统重构、系统迁移、系统分析工具:Coca、Go语言,GitHubstars:691。Coca是一个基于Antlr的“全功能”重构工具用于语法分析。除了常规的可视化和调用分析,它还可以进行自动重构。Coca名字的由来是:新哥写的Tequila——龙舌兰VS快乐水。CSS/LESS/CSS的分析和自动重构工具:Lemonj,TypeScript语言,GitHubstars: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的多语言分析和可视化工具:新哥的Tequila的Gomod版。其中,有一系列需要重构的神秘代码。基于Ctags的多语言模型分析和可视化工具:Modeling,Rust语言。分析源代码并生成基于模型的视觉依赖项。基于TreeSitter的多语言架构保护工具:Guarding,Rust语言。通过自制DSL来保护系统架构。另外Inherd开源组下还有一个开源:Coco,主要是通过代码的物理属性:修改频率+目录+行数来分析系统的工具。还有ArchGuard,它现在正在如火如荼地开源。我们使用一系列不同的语言和工具来开发这些软件,因为在不同的场景下,会有不同的选择。下一步?现有工具比较分散,不同工具的数据格式不同,缺乏统一的数据格式。当输出格式不统一时,我们很难进行标准的可视化,比如我们正在构建codecity来可视化metaverse中的遗留系统,或者我们正在从ArchGuard中拆分出前端可视化部分来进行复用。理想情况下,它应该像一个管道架构系统,由一系列管道和过滤器组成。欢迎来到我们的GitHub:https://github.com/modernizing
