本文转载自微信公众号“phodal”,作者phodal。转载本文请联系phodal公众号。最近因为公司的项目,对一个大型系统做了一个简单的架构分析。由于时间关系,我这里只能粗略的分析一下,没有其他的可能。看版本太长步骤:clone项目代码及相关依赖尝试编译系统使用目录+编辑器初步分析使用工具可视化分析配置IDE分析源码绘制架构图验证架构的正确性从用户旅程总结输出Retrospective版本,进一步验证PS:这里的情况是没有现成的架构图。如果已经有一个现有的架构,那么它的步骤应该是不同的。根据我的经验,应该是这样的:找到架构图,找到相关的阅读代码文档,日记等。0.clone大多数情况下,将远程代码clone到本地是一件很简单的事情。然而,并不是所有情况都是这样,因为对于一个大型系统来说,我们不得不面对这样的情况:代码库太多,代码量太大。在我需要分析的系统中,使用了谷歌的多仓库管理工具Repo。这在一定程度上解决了代码库过多的问题——对于我们来说,只需要执行一次reposync,就可以帮助我们clone所有的代码。然后,我们只需要等待几个小时或几天,就可以下载到我们的代码库中。1.尝试编译系统当我们有了代码之后,我们就可以按照文档中的步骤来尝试构建应用了。期间还需要解决一些工具问题,或者按照官方issue处理一些异常情况。同时,你也可能会遇到我在这个项目上遇到的问题:当前版本无法成功构建。所以,我还需要再花一天的时间去寻找具体版本的代码……。2、借助目录+编辑器进行初步分析同时我们在编译的同时也可以方便的对项目进行分析:目录结构分析。通过查看目录名和目录结构,分析项目的组成关系。简单的代码分析。嗯,从一个切入点,一步步查看调用关系等等。我们不能使用IDE进行分析的原因之一是,对于这样的系统来说,IDE是一个巨大的吃内存的怪物。而目前,我们还在尝试构建这个系统,它不仅吃内存,还吃CPU。甚至,你的电脑也会因此卡住。3.工具可视化进一步考虑到项目中的代码量,单纯靠人力难以分析。我们需要使用一些工具来分析代码。由于这是一个Java项目,我可以使用我之前写的一个系统分析工具:Coca。用它来画一个基本的架构图:PackageArchDemo也有一定的方法或类调用关系:call4。配置IDE并进行源代码分析。释放出足够的CPU+内存资源后,我们就可以高枕无忧了快速打开IDE,分析源码。因此,很快,我需要等待IDE完成对代码的索引。好吧,IDE卡住了。模块分析然后,我尝试了另一种可能,打开其中一个项目查看源代码,但我很快发现:缺少依赖项。因为整体构建失败,导致整个项目的部分依赖无法构建成功。于是,我尝试了另一种可能:提取生产环境的依赖。毕竟我需要的依赖是一些jar包,jar包会随系统一起分发。这样我就可以从release包中复制依赖到项目中使用,然后愉快的继续阅读代码——顺便说一句,我也可以从依赖中分析项目。项目内部依赖分析那么对于一些模块来说,它的输出是一个jar包,所以我们不一定需要去阅读它的源码。你只需要梳理一个模块的构建产品,它做了什么。5.画架构图好了,有了上面的基础,我们就可以画架构图了。暂时没有什么好的工具可以推荐,比如GoogleSlides和Sketch都可以。如果是调用关系,可以用Graphviz画出来。但是,我已经使用Coca来自动绘制这种依赖关系。哈哈6.用户旅程验证我们在阅读代码的时候,总是从入口开始验证。比如基于Spring的微服务项目,以API注解为切入点,一步步分析系统架构;比如Angular开发的前端应用都是从main.ts开始的。比如IDEA插件从plugin.xml开始,从Action绑定用户行为。类似地,我们可以在不调试的情况下进一步验证架构的细化是否合理。7.回到版本,再三考虑我用的版本是不能编译成功的版本,所以花了点时间下载了一个老版本的系统来验证一些关系是否正确。毕竟只有编译成功的版本才是普通版本。8.总结输出这些相关产品可以包括:流程日志问题总结架构图仿MVPdemo这里重点强调一下最后一个,我经常用这种方法造轮子。人生苦短,我有古柯。http://github.com/phodal/古柯
