00:00
哈喽,大家好,我是人月聊it,今天准备再接着聊一下AI辅助的逆向工程,因为在这个周末我又对我原来的那一套逆向工程提示词做了一些优化和调整,所以今天想再讲几个关键点,第一个关键点就是你为什么要去做逆向工程这个事儿,那无外乎就两个目的,第一个就是我需要逆向一套文档给人看,第二个或者就是我需要逆向一套原模型给AI看。那这两种思路下,你实际上做逆向的方法过程都有很大的一个差异。首先来讲逆向一套东西给人看,我原来也讲过,对于一个软件建设实施项目,可能你为了甲方验收的需要,你需要去立项相关的需求文档、设计文档、测试文档,然后一并交付给甲方,这是一个需求。第二个就是我需要意向一套整体系统的介绍架构数据库,包括核心的一些公共的基础组件,核心的接口的文档。
01:00
给开发团队看,方便开发团队后面去做相关的变更,但是大家思考一下,随着整个AI大模型能力的发展。后续你要逆向一个模型给开发团队看的这种情况会变得越来越少,更多的时候逆向文档的作用就是向甲方做验收交付。所以我才一直强调我们去考虑意向工程意向的这么一个文档或者是原模型,它更多的就是给AI看,方便AI后续代替人去做大的工程级的变更,方便AI去做整个项目的重构或者是复刻这一些操作。嗯,这是我想说的第一个点,第二个点就是谈到立项工程的时候,大家都会谈到一个项目叫开源的photograph graph这么一个项目,大家注意看一下这个项目它的核心的思路,他在做整个源代码立项的时候,他不是说所有工作都交给AI去做,而是对于里面精确化的部分,它仍然是通过精确化的代码去做逆向,大家思考一下,在十几年前我们再去做代码的时候,当时就有工具能够将你的代码逆向为一个UM模型,但是在当时实际上还没有大模型的,所以说我们通过精确代码去逆向你实际的源代码里面的类的关系,包括类之间的行为,调用、交付行为。
02:25
这个不需要依赖任何AI大模型就可以完成,但是我要去解释逆向出来的代码的中文含义,我要去解释某个代码究竟完成了某个什么样的业务功能,对于这些东西,那你必须就要借助大模型才能完成。这是我想说的第二个点,第三个点就是我们再去做一个项目的立项的时候,包括去分析photograph gra的时候,就发现photograph gra的立项更多的还是围绕代码,围绕类和类之间的关系,类之间的方法行为的交互调用形成的这么一个知识图谱。所以Photograph的逆想,它其实没有解决两个关键的问题,就是我实际核心的代码层的逻辑是怎么样去支撑我的业务场景和业务功能的,第二个就是我任何一个业务功能的实现怎么样从业务需求一直穿透到我的数据库,这个实际上photograph gra仍然没有办法很好的回答。第三个点就是虽然说它逆向的核心的知识图谱,但是它对于一些关键的规则的位置,它实际上是丢失了的。
03:33
也是正是基于这些原因,我们可以看得到,我们真的要去做好一个完整的逆向工程,那里面一定就有几个最最关键的东西,也是我经常强调的东西。第一个东西,它就是一定要去实现整个从业务场景、业务需求到数据库的穿透,整个穿透里面就是我具体去操作某个业务功能的时候,它涉及到哪一些核心的对象类,调用了哪一些接口,操作了什么样的规则逻辑,最终从哪里取数,又把数据存储到哪个数据库表,这条核心的调用链一定要相当的清楚。
04:13
这个是我们在去做逆向的时候相当重要的一个关键点。第二个就是关键点,我就一直在讲,我逆向的东西究竟是为了AI方便他后续基于我现有的平台架构去改变,更还是说我希望预向一个东西能够方便AI从0~1,用另外一种语言框架复刻我已有的系统。那么这两种逆向其实也有千差万别的区别,对于第一种,我把它叫做技术的逆向,技术的逆向它既要包括业务需求,又要包括当前实际实现的开发语言、开发框架、技术架构,所有的内容它都需要包括。第二种我把它叫做业务方面的立项,业务方面的立项核心的是围绕需求对象模型的立项,对于你当前的系统实现的开发框架、开发语言、技术架构这些东西,它应该把它丢弃掉,它立项的实际上类似于我们原来MBA模型驱动架构的时验时候的出现的一个叫语言平台无关性的模型,那么你拿着这个模型去做相关的重新的新语言的复刻,那就一点问题都没有。
05:22
第三个点就是大家都知道,任何一个软件需求,它不仅仅是包括了核心的业务用例规则,它一般还会提供相关的界面交付的规则约束或者是界面原型。那么我们去做一个逆向工程,怎么样去逆向展现成核心的内容呢?其实这个地方最最简单的方法就是仍然需要对UI原型进行逆向,但是这个逆向你没有必要去逆向源代码。你用文字也说不清楚,所以这个时候最好的逆向的方法就是把所有的UI原型都逆向成阿斯克玛的方式进行展现。这种Askma的方式,你想的UI就足够AI理解和阅读,方便你后续去做相应的一些复刻。
06:06
所以这个三点可能反而变成了我们在AI辅助下面形成一个完整的逆向工程最最重要的几个关键点。当然你整个的逆项,我在上一个视频也讲了,你一定是一个分级立项的过程,首先立项核心的整体的架构框架,核心的对象模型、数据库接口,接着才是去逆向到每一个细节的功能点的实现,这样的话可以尽量的控制你脱子的消耗,包括整个AF辅中的印象,你也可以考虑怎么样更好的跟Co graph去做结合。因为photograph这个逆向虽然没解决我前面谈到的几个关键点,但是它已经理清楚了你核心的代码里面的类之间的关系,类之间的相互调用的行为接口这个语义对于推送到后面去做更深层次的业务功能,业务需求这块的立项是完全有帮助的。好了,今天的简单分享就到这里,再见。
我来说两句