深圳生产型企业网站建设专业,注册一家公司需要多少钱,网站如何吸引人,wordpress动态图片不显示有一定规模的 IT 公司#xff0c;只要几年#xff0c;必然存在大量的代码#xff0c;比如腾讯#xff0c;2019 年一年增加 12.9 亿行代码#xff0c;现在只会更多。不管是对于公司#xff0c;还是对于个人#xff0c;怎么低成本的了解这些代码的对应业务#xff0c;所提…有一定规模的 IT 公司只要几年必然存在大量的代码比如腾讯2019 年一年增加 12.9 亿行代码现在只会更多。不管是对于公司还是对于个人怎么低成本的了解这些代码的对应业务所提供的能力都是非常有必要的
今天阿七就带大家破解这个难题根据这个文档你能使用 AI 编程技术根据包含 Java 完整代码的项目实现可视化下面三个方面的内容
模块和功能应用内部的业务模块和功能及相互间的关系为用户提供应用的整体视图。类和接口应用模块提供的业务能力以及对应的类和接口以及接口对应业务流程语义化。方法实现语义化方法实现逻辑的语义化和可视化
一、先秀一下成果
一Java 项目概览图
根据一个 Java 项目可以生成下面这样的项目整体概览图对于不需要了解实现细节的产品、运营同学直接看这个图就能够了解这个 Java 项目在干什么、能提供什么能力。
对于部分技术同学不需要了解代码详情的也可以直接看这个图即可。满足新入职同学对于接手不常变更项目的理解和全局业务的了解
PS由于保密需要所有的成果图仅为示例图。实际的图会更好看、更震撼因为一个 Java 项目的功能模块可能很多提供的能力可能很多。 对于需要了解技术细节的同学点击入口能看到当前方法的流程图快速了解当前方法提供的能力具体的细节。还能迅速发现流程上可能存在的问题快速纠正。
二具体方法流程图 有了上面的两层可视化图表不管是产品、技术、测试、运营以及小领导都能快速的根据一个 Java 项目获取到他所需要的层级的信息降低开发人员通过阅读代码梳理业务逻辑和代码逻辑的时间尤其是新入职的同学。这个时间据统计基本上在 25%-30%百度、阿里等大公司调研数据更大为 55%-60%对于新同学这个比例会更大
二、实现步骤
一整体概述图怎么生成
一个 Java 项目所有对外接口在做的事情就是一个 Java 项目的核心业务。这个对外接口包括HTTP 接口、Dubbo 接口、定时任务。
1、获取一个 Java 项目所有对外接口
1通过 Trace 平台
可以查询到一个 Java 项目所有对外的 HTTP 接口和 Dubbo 接口通过注解可以查询一个 Java 项目所有定时任务。
优点
数据准确跑出来的数据一定是还在用的接口 缺点需要依赖 Trace 平台数据部分公司可能没有 Trace 平台。
2通过 JavaParser 工具
可以通过 JavaParser 工具扫描整个 Java 项目代码。找到所有的对外入口。
优点
不依赖 Trace 数据 缺点可能不准确因为有些接口已经不被使用了。
2、获取对外接口的方法内容
1根据 HTTP 的接口 url 可以反解析出来这个 url 对应的方法的全路径。
具体来说在项目中获取 Spring 上下文Spring 上下文中有一个 Bean 叫 RequestMappingHandlerMapping这个 Bean 中提供了一个方法 getHandlerMethods这个方法中保存了一个 Java 项目中所有的对外 HTTP 方法。
这个方法返回一个 MapT, HandlerMethod对象key 是 HTTP 接口的 URLvalue 就是这个 URL 对应方法的全路径名称。 2根据方法全路径获取方法内容
根据上面的全路径名使用 Spoon 框架我们能拿到对应方法的方法体。
dependencygroupIdfr.inria.gforge.spoon/groupIdartifactIdspoon-core/artifactId
/dependency我们让 ChatGPT 帮我们写代码提示词 写一个 Java 方法使用 Spoon 框架解析 Java 方法的完整内容 其中入参是方法全路径名 PS这个代码一会还有用我们往下递归的话能拿到这个 Controller 方法调用的所有方法体。
3、根据方法内容生成方法注释
就和 GitHub Copilot 和百度 Comate 代码助手一样GPT 可以根据代码生成方法注释提示词 角色 你是一个 Java 技术专家。 任务 # 号开头的是一个 Java 方法。请你逐行阅读代码然后为这个 Java 方法生成一句话注释。 限制不要超过 20 个字 举个例子我有个工具方法使用 GPT 为他生成注释如下 4、生成 Java 项目一句话描述 角色 你是一个 Java 技术专家。 任务 — 符号以上的是一个 Java 项目中所有对外方法的注释请你逐行阅读这些注释然后给这个 Java 项目生成一句话描述。 限制 结果不要超过两句话。 这个利用的是 GPT 的总结概要的能力GPT 能总结论文、总结文章他也能总结一段描述 Java 项目的文字。这样就能获取对于一个 Java 项目的一句话描述也就是项目概览图的第一层。
5、总结生成项目概览图
我们要求 GPT 根据 Java 项目的一句话描述和所有对完方法的方法注释生成思维导图数据。为了项目概览图的层级更可读、更清晰我们可以要求 GPT 根据方法注释的相似性进行分类形成项目概览图的第二层。第三层就是所有项目中对外方法的注释。
生成思维导图可以让 GPT 根据结构内容生成 puml 格式的思维导图数据我们把 puml 格式的数据存储为 puml 文件然后使用 xmind 或者在线画图工具 processOn 打开就能看到完整的思维导图。
参考提示词如下 应用代码appCodeValue 项目描述appCodeDescValue 项目描述appCodeDescValue 方法描述methodDescListValue 角色你是一个有多年经验的 Java 技术专家在集成 Java 项目方面有丰富的经验。 任务根据 Java 项目中所有公共接口的描述信息生成思维导图。 要求思维导图只有四个层级。 详细要求思维导图的中心主题是 appCodeValue第一层分支是 appCodeDescValue第二层分支是公共接口的分类下层分支是每个分类下方法的描述信息。 返回正确格式的 opml 思维导图 xml 数据并且内容是中文。 二流程图怎么生成
1、获取递归代码
直接问 GPT让 GPT 改造上面的获取方法体的方法。
prompt; {获取方法体的方法} 上面的 Java 代码是使用 Spoon 框架解析 Java 方法的完整内容 其中入参是方法全路径名 任务现在要求你改造这个方法除了打印当前方法的完整内容还要求递归打印所有调用方法的方法体内容包含被调用方法调用的方法 这样我们能获取到一个 controller 方法所有递归调用的方法每个方法生成自己的流程图最后通过流程图嵌套的形式进行展示。
比如这个例子当前能看到的是当前方法的流程图带 号的内容是当前方法调用方法的流程图。这样方便我们按照自己需要的深度去了解当前方法的具体实现流程
2、无效代码剪枝
按照上面生成的流程图可能分支很多还有一些无效的信息影响用户判断我们可以通过删除一些业务无关代码的方法精简流程图。
比如我们可以删除日志、监控等与业务逻辑无关的代码删除没有调用的代码现在市面上有些这种技术方案可以检测当前项目中没有被实际调用的代码。
3、生成流程图
先让 GPT 根据代码生成结构化的 Json 数据。 给你一段 Java 代码请你使用 spoon 输出结构化的 Json 数据。要求请你直接输出结构的 json 结果数据不需要过程代码 然后可以让 GPT 根据 Json 数据生成流程图数据使用流程图工具打开即可。 给你一段 Spoon 结构化 Java 代码的 Json 数据整理对应 Java 代码的意思生成一个流程图数据流程图使用 PlantUML。现在请输出能直接绘制 PlantUML 图的数据 三、改进方案
我们可以从下面几个方面改进这个项目从而实现真正落地解决实际公司需求
获取代码修改为从 gitlab 等代码仓库直接拉取这样使用的时候不需要将工具包导入到具体的 Java 项目中。优化生图提前生成全量图标通过浏览器的形式进行访问。增加图表内容手动校正功能生成不准确的支持开发人员手动调整。增加检索功能可以按照自然语言进行检索。把项目中的方法和类信息存起来生成更准确的图标。根据完整项目代码反向生成项目概要图可能能得到更准确的概要图。递归方法流程图可以使用流程图嵌套如下进行展示。 四、总结
AI 在编程领域除了大厂都在卷的代码助手结合自己公司还有很多可探索的地方比如本文说的可视化 Java 项目还可以通过分析日志进行异常、故障的根因分析做到快速定位问题帮助快速解决问题减少影响。
如果故障根因分析这个工具做出来了阿里云的 P0 故障滴滴的 P0 故障还有很多大中小厂的故障是不是能更快恢复减少声誉、金钱损失
就说项目可视化这个需求据我了解的内部消息有些互联网中大厂已经在使用这个方式进行落地了。另外我陪伴群里也有同学接触到了类似不少甲方的类似的强需求如果想深入这块技术的同学不管是进互联网大厂还是做自己的副业产品都是不错的方向
对这个方向感兴趣点我