AI编程:可视化 Java 项目

70 篇文章 0 订阅
19 篇文章 1 订阅

有一定规模的 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 方法。

这个方法返回一个 Map<T, HandlerMethod>对象,key 是 HTTP 接口的 URL,value 就是这个 URL 对应方法的全路径名称。

2)根据方法全路径,获取方法内容

根据上面的全路径名,使用 Spoon 框架我们能拿到对应方法的方法体。

<dependency>
    <groupId>fr.inria.gforge.spoon</groupId>
    <artifactId>spoon-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 图的数据

三、改进方案

我们可以从下面几个方面改进这个项目,从而实现真正落地,解决实际公司需求:

  1. 获取代码,修改为从 gitlab 等代码仓库直接拉取,这样使用的时候不需要将工具包导入到具体的 Java 项目中。
  2. 优化生图,提前生成全量图标,通过浏览器的形式进行访问。
  3. 增加图表内容手动校正功能,生成不准确的,支持开发人员手动调整。
  4. 增加检索功能,可以按照自然语言进行检索。
  5. 把项目中的方法和类信息存起来,生成更准确的图标。
  6. 根据完整项目代码,反向生成项目概要图,可能能得到更准确的概要图。
  7. 递归方法流程图,可以使用流程图嵌套,如下进行展示。

四、总结

AI 在编程领域,除了大厂都在卷的代码助手,结合自己公司还有很多可探索的地方,比如本文说的可视化 Java 项目,还可以通过分析日志,进行异常、故障的根因分析,做到快速定位问题,帮助快速解决问题,减少影响。

如果故障根因分析这个工具做出来了,阿里云的 P0 故障,滴滴的 P0 故障,还有很多大中小厂的故障,是不是能更快恢复?减少声誉、金钱损失?

就说,项目可视化这个需求,据我了解的内部消息,有些互联网中大厂已经在使用这个方式进行落地了。另外,我陪伴群里也有同学接触到了类似不少甲方的类似的强需求,如果想深入这块技术的同学,不管是进互联网大厂还是做自己的副业产品都是不错的方向!

对这个方向感兴趣,点我

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目 录 1概述 1 1.1背景 1 1.2应用领域与使用对象 1 1.3术语与缩写解释 1 2系统总体介绍 2 2.1系统架构 3 2.2可视化智能仓储管理系统的功能介绍 4 2.2.1出入库信息采集 4 2.2.2可视化查询 5 2.2.3作业管理 6 2.2.4维修管理 7 2.2.5试验管理 8 2.2.6预约管理 9 2.2.7申领管理 10 2.2.8盘点管理 11 2.2.9统计管理 12 2.2.10货品柜管理 12 2.2.11工器具管理 13 2.2.12备品备件管理 13 2.2.13系统管理 13 2.3其他说明 14 4手持机操作 15 4.1参数设置 15 4.2信息查询 16 4.3资产盘点 16 4.4资产出入 17 3大屏操作 19 3.3库房布局 19 3.2后台信息 19 3.1出入库登记 21 3.4大屏系统设置 22 1概述 1.1背景 传统的仓库管理一般依赖于一个非自动化的、以纸质文件为基础的系统来记录、追踪 进出的资产。由于仓储管理完全由人工实施,效率低下,能管理的仓库规模也很小,随 着仓储管理的资产种类、数量和出入库频率的不断增加,仓储管理作业也已十分复杂和 多样化。另外,传统系统中的资产存放地点是由一个或者一组抽象的字符串表示,仓库 作业人员根据这样的数据不能迅速、准确地找到资产,从而降低了仓库作业效率。由此 可见,面对繁多的出入库流程和信息,以及仓库错综复杂的货区和资产的码放,传统的 手工管理和普通的信息管理系统无法快速、直观的提取有效信息,成为提高仓库作业及 存储效率的瓶颈,在仓库管理过程中采用新技术来提高仓库管理的工作效率已经迫在眉 睫。 我司开发的可视化智能仓储管理系统是一套全方位的仓储管理系统,一方面,作为仓 储管理系统,利用RFID射频识别技术、条码技术、网络技术,实现对仓库内资产出入库 的信息化管理;另一方面,运用管理信息系统与可视化技术相结合,将图像、图形加入 库存信息管理系统中,使货位信息便于识别,增加它们的可读性,提高人机交互效率, 实现了仓库管理的可视化,不仅能够及时、准确的掌握资产的位置、状况、活动等信息 ,还可以监控仓库的实时情况,保证仓库的安全,从而提高仓库管理水平和质量,真正 实现资产货位管理,作业流程监控管理,在数字化和信息化的基础上最大限度提升仓储 管理的效率。 1.2应用领域与使用对象 该软件所能使用的领域主要涵盖铁路仓库、国网仓库以及各种中小型仓库;使用的对 象主要是希望实现对仓库进行可视化信息管理的用户。 1.3术语与缩写解释 "缩写、术 "解释 " "语 " " "Tomcat "是一个免费的开放源代码的Web应用服务器,是开发和调试JSP " " "程序的首选。 " "JSP "是一种动态技术标准,所有程序操作都在服务器端执行,网络 " " "上传送给客户端的仅是得到的结果,这样大大降低了对客户浏 " " "览器的要求,即使客户浏览器端不支持java,也可以访问JSP网" " "页。 " "B/S结构 "Browser/Server,浏览器/服务器模式,Web浏览器是客户端最 " " "主要的应用软件,这种模式统一了客户端,将系统功能实现的 " " "核心部分集中到服务器上,简化了系统的开发、维护和使用。B" " "/S最大的优点就是可以在任何地方进行操作而不用安装任何专 " " "门的软件,只需一台安装了浏览器能上网的电脑即可使用,客 " " "户端少安装、零维护。 " "SSH "SSH为Struts+Spring+Hibernate的一个集成框架,是目前较流 " " "行的一种Web应用程序开源框架。 " 2系统总体介绍 本项目中的可视化智能仓储管理系统需要将所有的子功能进行整合,统一进行管理。 建立集出入库信息采集、可视化查询、作业管理、维修管理、试验管理、预约管理、申 领管理、盘点管理、统计管理、货品柜管理、工器具管理、备品备件管理、系统管理等 十三大子功能为一体的可视化智能仓储管理系统,用以提高仓库管理的工作效率。 在仓管中心采用可视化智能仓储管理系统,可以实现一套软件控制前端设备,实现设 备的无缝对接。用户通过此平台的使用,即可完成对仓库内资产的出入库信息采集、可 视化查询、追踪资产的出入库状态、提前预约资产、申领资产、统计资产使用情况、资 产管理以及系统管理等多项功能,如下图所示。 图2-1 可视化智能仓储管理系统功能图 2.1系统架构 整个系统的应用软件为C/S+B/S模式协同运作,充分地利用计算机网络资源和硬件资 源,支持并行与协同操作;系统基于业界成熟的J2EE平台,采用Intranet网络技术及JA VA、JSP、JS、AJAX等编程技术;系统支持Windows操作系统,使用MYSQL数据库作为存储 层; 图2-

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍六七AI编程

你猜你给我1分我要不要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值