最近,由于公司的项目,对一个大型系统进行了简要的结构分析。由于时间的限制,我只能在这里做一个快速的分析,没有其他的可能性。不要看版本的步骤太长:
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
扫码咨询与免费使用
申请免费使用