如何快速分析大型系统架构?

最近,由于公司的项目,对一个大型系统进行了简要的结构分析。由于时间的限制,我只能在这里做一个快速的分析,没有其他的可能性。不要看版本的步骤太长:

       

clone 项目代码及相关依赖

       

尝试编译系统

       

用目录 编辑器进行初步分析

       

借助工具进行可视化分析

       

配置 IDE,分析源码

       

绘制架构图

       

用户旅程验证架构的正确性

       

总结输出

       

回溯版本,进一步验证

   

clone 项目代码及相关依赖

尝试编译系统

用目录 编辑器进行初步分析

借助工具进行可视化分析

配置 IDE,分析源码

绘制架构图

用户旅程验证架构的正确性

总结输出

回溯版本,进一步验证

PS:这里所针对的情况是,没有现有架构图的情况。如果已经有现成的架构,那么它的步骤应该是不一样的。依我之间的经验来看,它应该是这样的:

       找架构图 其他同上

在大多数情况下,远程代码 clone 去当地是一件非常简单的事情。然而,并非所有的情况都是这样,因为对于一个大系统,我们必须面对这样的情况:

       代码库太多了 代码太多了

因此,在我需要分析的系统中,它使用 Google 多仓库管理工具 Repo。这在一定程度上解决了代码库过多的问题——对我们来说,我们只需要执行一个 repo sync,它可以帮助我们把所有的代码 clone 下来。然后,我们只需要等几个小时或几天就可以下到我们的代码库。

1. 尝试编译系统

有了代码,我们可以尝试按照文档的步骤构建应用程序。在此期间,我们还需要解决一些工具问题或官方 issue 处理一些异常情况。

同时,你也可能会遇到我在这个项目中遇到的问题:当前版本无法成功构建。

因此,我需要再花一天时间找到特定版本的代码……。

2. 用目录 编辑器进行初步分析

同时,当我们编译时,我们也可以简单地分析项目:

       

目录结构分析。通过查看目录名称和目录结构,分析项目组成关系。

       

简单分析代码。嗯,从入口点逐步查看调用关系。

   

目录结构分析。通过查看目录名称和目录结构,分析项目组成关系。

简单分析代码。嗯,从入口点逐步查看调用关系。

之所以不能用 IDE 分析的一个原因是:对于这样一个系统,IDE 是一个吃内存的巨大怪物。目前,我们仍在尝试建立这个系统。它不仅吃内存,还吃 CPU。甚至,你的电脑也会卡住。

3. 工具可视化

进一步考虑到项目的代码数量,很难简单地依靠人工分析。我们需要使用一些工具来分析代码。

因为这是 Java 项目,我可以使用我以前写的系统分析工具:Coca。绘制基本架构图:

Package Arch Demo

还有一种上下调用关系的方法或类别:

call

4. 配置 IDE,进行源码分析

腾出足够的 CPU 内存资源后,我们可以轻松愉快地打开 IDE,进行源代码分析。所以,很快,我就需要等待 IDE 完成代码索引。

好了,IDE 卡住了。

模块分析

然后,我尝试了另一种可能性,打开一个项目来查看源代码,但很快我发现 缺乏依赖性。由于整体建设失败,总项目的一些依赖无法成功建设。

因此,我尝试了另一种可能性:提取对生产环境的依赖。毕竟,我需要的是一些 jar 包,而 jar 包会和系统一起分发。这样,我就可以从发布包中 ** 依赖于项目,然后愉快地继续阅读代码 - 顺便说一句,你也可以从依赖中分析项目。

项目依赖分析

嗯,对于某些模块来说,它的产量是 jar 包,那么我们不一定需要阅读它地源码。只需要理清单个模块的构建产物,以及它的作用即可。

5. 绘制架构图

嗯,有了上面的基础之后,我们就可以绘制架构图了。

暂时没有好的工具推荐,Google Slides、Sketch 这种都可以。

如果是调用关系,可以用 Graphviz 来画。只是,我已经用 了。Coca 来自动化绘制这种依赖关系。

6. 用户旅程验证

当我们阅读代码时,我们从入口开始验证。例如,基于 Spring 微服务项目均来自 API 注解作为入口点,逐步分析系统结构;如 Angular 开发的前端应用来自 ** in.ts开始。比如 IDEA 插件,从 plugin.xml从 开始Action 绑定用户行为。

在不能调试的情况下,我们可以进一步验证结构的提炼是否合理。

7. 回溯版,重复

考虑到我使用的版本是无法成功编译的版本,我花了一些时间来验证一些关系是否正确。

毕竟只有成功的版本才是正常版本。

8. 总结输出

这些相关产品可以包括:

       

过程日志

       

问题总结

       

架构图

       

仿制的 MVP demo

   

过程日志

问题总结

架构图

仿制的 MVP demo

在这里,让我们强调最后一个。我经常用这种方法来创造轮子。

人生苦短,我有 Coca。

http://github.com/phodal/coca

                                                                                                                                                                                               

扫码免费用

源码支持二开

申请免费使用

在线咨询