最近做了一个旧系统迁移的项目,把一个用老技术栈写的系统迁移到新框架上。过程中尝试用AI辅助工具来加速代码迁移,效果出乎意料地好。记录一下整个迁移过程,以及AI辅助编程的经验和踩坑记录。

先说说项目背景。我们公司有一个内部管理系统,是四年前用jQuery + Bootstrap + 后端模板渲染的方式开发的。系统功能不少,大概有三四十个页面,代码量也不小,前端代码大概有三万行左右。随着业务发展,这个系统越来越难维护,加一个新功能要改好几个地方,而且用户体验也跟不上现在的标准了。

于是团队决定把这个系统迁移到Vue + Element UI的技术栈上。但问题是,三万行代码,如果纯手工迁移,至少需要两三个月的时间,而且期间还要维护旧系统的bug修复,人力根本不够。这时候我想到了最近很火的AI辅助编程工具,能不能用AI来加速代码迁移呢?

我花了一周时间做了一个试点,用AI工具辅助迁移了几个典型页面,效果非常好。原本预计需要两天的页面,半天就迁移完了,而且代码质量还不错。于是我们决定全面采用AI辅助的方式来做这个迁移项目。最终整个项目花了三周时间就完成了,比预计的两三个月快了很多。

今天就把这次迁移的经验分享出来,包括AI辅助编程的具体用法、效果评估、踩坑记录和注意事项。

一、迁移前的准备工作

在开始迁移之前,我们做了一些准备工作,这些工作对后续的迁移效率影响很大。

第一个准备是梳理旧系统的结构和功能。我们花了两天时间,把旧系统的所有页面列了一个清单,每个页面标注了功能描述、涉及的接口、特殊的交互逻辑、以及迁移的优先级。这样做的目的是对整个系统有一个全局的认识,避免迁移过程中遗漏功能。同时也可以按照优先级来安排迁移顺序,先迁核心功能,再迁边缘功能。

第二个准备是搭建新系统的基础框架。我们用Vue CLI创建了新项目,配置好了路由、状态管理、HTTP请求封装、全局样式、Element UI组件库等基础设施。还写了几个示例页面,统一了代码风格和组件使用规范。这样在迁移具体页面的时候,就不需要每次都纠结基础设施的问题,可以专注于业务逻辑的迁移。

第三个准备是整理API接口文档。旧系统的接口没有完整的文档,我们花了一天时间,把所有用到的接口都整理了出来,包括请求地址、请求方法、请求参数、响应数据结构。这些信息对AI迁移非常重要,因为AI需要知道接口的数据结构才能正确地生成数据处理逻辑。

第四个准备是制定代码规范。我们制定了新系统的代码规范,包括文件命名、组件结构、样式写法、注释要求等。这些规范会作为提示词的一部分传给AI,让AI生成的代码符合我们的规范。如果没有明确的规范,AI生成的代码可能风格不统一,后期还需要大量调整。

这些准备工作看起来花了不少时间,但实际上是非常值得的。因为AI辅助迁移的效果很大程度上取决于你给它的信息是否充分、规范是否明确。准备工作做得越充分,AI生成的代码质量越高,后期需要修改的地方就越少。

二、AI辅助迁移的具体流程

准备工作做好之后,就开始了正式的迁移工作。我们的迁移流程大致是这样的:

第一步,选择一个要迁移的页面,把旧代码完整地复制出来。包括HTML模板、JavaScript逻辑、CSS样式,以及相关的接口调用代码。

第二步,写一个详细的提示词(prompt),把以下信息都包含进去:

  • 任务描述:把这段旧代码迁移到Vue + Element UI
  • 旧代码的技术栈:jQuery + Bootstrap + 后端模板渲染
  • 新系统的技术栈和规范:Vue 2 + Element UI,单文件组件,样式用scoped
  • 接口信息:这个页面用到的所有接口的地址、参数、返回结构
  • 特殊要求:比如某些交互逻辑需要保持不变,某些组件需要用特定的Element UI组件
  • 输出格式:要求输出完整的Vue单文件组件代码

第三步,把提示词和旧代码一起发给AI,让它生成新的Vue组件代码。

第四步,拿到AI生成的代码后,做人工审查和调整。重点检查以下几个方面:

  • 功能是否完整:有没有遗漏旧系统的功能
  • 逻辑是否正确:数据处理、条件判断、事件处理是否正确
  • 接口调用是否正确:请求地址、参数、响应处理是否正确
  • 组件使用是否合理:有没有用错Element UI的组件或者属性
  • 代码风格是否符合规范

第五步,把调整后的代码放到新系统里运行测试,确保页面能正常显示和交互。

第六步,做对比测试,在旧系统和新系统中分别操作同样的功能,对比结果是否一致。

这个流程看起来步骤不少,但实际上大部分时间花在第四步和第五步的人工审查和测试上。AI生成代码的速度非常快,通常一个页面一两分钟就能生成完,但人工审查和测试可能需要一两个小时。不过即使这样,也比纯手工写代码快了很多。

三、AI迁移的效果评估

迁移了一批页面之后,我们对AI辅助迁移的效果做了一个评估。

从速度上来说,AI辅助迁移比纯手工迁移快了大约3到5倍。简单的页面(比如纯展示的列表页),AI生成的代码几乎可以直接用,人工只需要做少量调整,半小时就能完成一个页面。复杂的页面(比如有大量表单和交互逻辑的页面),AI生成的代码需要较多的人工修改,但仍然比从零开始写快很多。

从代码质量上来说,AI生成的代码整体质量不错。它能正确地使用Vue的模板语法、计算属性、生命周期钩子等概念,也能正确地使用Element UI的大部分组件。代码结构清晰,命名规范,注释也比较到位。对于常规的CRUD页面,AI生成的代码甚至比一些初级工程师写的还要好。

但AI生成的代码也有一些常见的问题,需要人工修正:

第一,接口数据处理有时候不准确。AI可能会假设接口返回的数据结构,而不是根据我们提供的文档来处理。比如接口返回的是嵌套对象,AI可能会当成扁平对象来处理。这就需要人工仔细检查接口相关的代码。

第二,复杂的交互逻辑可能会出错。比如多级联动、动态表单、条件渲染等比较复杂的逻辑,AI有时候理解不到位,生成的代码逻辑有问题。这部分需要人工重点审查和测试。

第三,样式还原度不够。AI生成的样式通常只能做到大致相似,很难完全还原旧系统的样式。尤其是一些比较特殊的样式或者动画效果,AI可能生成不出来。这部分需要人工调整样式。

第四,有时候会生成一些"幻觉"代码。也就是AI会编造一些不存在的API或者组件用法,看起来很合理但实际上是错的。比如它可能会用一个Element UI根本没有的组件,或者调用一个不存在的方法。这就需要人工有能力识别这些错误,不能盲目相信AI生成的代码。

总体来说,AI辅助迁移的效果超出了我们的预期。它不能完全替代人工,但可以作为一个非常高效的"初级程序员",帮你完成大量重复性的、常规性的代码编写工作,让你可以把精力集中在复杂的逻辑和质量把控上。

四、提高AI迁移质量的技巧

在使用过程中,我们总结了一些提高AI生成代码质量的技巧,分享给大家。

第一个技巧是提示词要尽可能详细。不要只说"把这段代码转成Vue",而是要把技术栈、规范、接口信息、特殊要求都写清楚。你给的信息越充分,AI生成的代码就越准确。我们后来形成了一个提示词模板,每次迁移只需要填一下具体的页面信息就行,效率很高。

第二个技巧是分批迁移,不要一次给太多代码。如果一个页面非常大,代码很长,不要一次性全部发给AI。可以把页面拆分成几个部分,比如先迁移模板结构,再迁移数据逻辑,再迁移事件处理。或者把页面拆成多个子组件,逐个迁移。因为AI的上下文长度有限,代码太长的话,它可能会遗漏前面的内容,或者生成的代码不完整。

第三个技巧是提供示例。如果你有已经迁移好的页面作为示例,可以把示例代码也发给AI,告诉它"按照这个风格和结构来生成"。这样AI生成的代码会更符合你的规范,风格也更统一。我们在迁移了几个页面之后,就把其中一个质量比较高的页面作为示例,后续的迁移都参考这个示例,效果好了很多。

第四个技巧是让AI解释它的代码。对于比较复杂的逻辑,你可以让AI在生成代码之后,再解释一下每部分代码的作用。这样你在审查的时候,可以更快地理解AI的思路,也更容易发现逻辑错误。而且有时候AI在解释的过程中,自己就会发现错误并修正。

第五个技巧是迭代优化。不要指望一次就能生成完美的代码。如果AI生成的代码有问题,可以把问题指出来,让它修改。比如你可以说"这个接口的返回数据结构是这样的(附上结构),请修正数据处理逻辑",或者"这个交互逻辑不对,应该是这样的(描述正确逻辑),请修正"。通常经过一两轮的迭代修正,代码质量就能达到可以使用的水平。

第六个技巧是建立可复用的组件库。在迁移过程中,我们发现很多页面有相似的功能,比如搜索表单、数据表格、分页器等。我们把这些通用的功能抽成了可复用的组件,后续迁移类似页面的时候,直接告诉AI使用这些组件,而不是让它重新生成。这样不仅提高了迁移效率,也保证了代码的一致性和可维护性。

五、踩坑记录和注意事项

在这次迁移过程中,我们也踩了不少坑,这里记录一下,希望大家不要重蹈覆辙。

第一个坑是盲目相信AI生成的代码。一开始的时候,我们对AI生成的代码审查不够严格,觉得看起来没问题就直接用了。结果测试的时候发现了不少bug,有些还是比较严重的逻辑错误。后来我们制定了严格的审查流程,AI生成的代码必须经过人工逐行审查,并且必须通过完整的功能测试,才能合并到主分支。记住,AI是辅助工具,最终的代码质量还是要由人来负责。

第二个坑是没有做好版本管理。迁移过程中代码变动很大,如果没有做好版本管理,很容易出现代码混乱或者丢失的情况。我们用Git做版本管理,每个页面的迁移单独建一个分支,迁移完成测试通过后再合并到主分支。而且每次AI生成代码之后,我们都会先提交一个版本,然后再做人工修改,这样如果修改出了问题,可以回退到AI生成的版本重新开始。

第三个坑是忽略了旧系统中的隐性逻辑。旧系统运行了四年,里面有很多隐性的业务逻辑,可能不在代码的明面上,而是藏在各种条件判断和特殊处理里。AI在迁移的时候,可能会忽略这些隐性逻辑,因为它只看代码表面,不理解背后的业务含义。比如有一个页面,当用户的角色是管理员的时候,会多显示一个按钮,这个逻辑藏在一个很隐蔽的条件判断里,AI迁移的时候就漏掉了。后来我们在对比测试的时候才发现。所以迁移的时候,一定要对业务逻辑有深入的理解,不能只做表面的代码转换。

第四个坑是性能问题。AI生成的代码通常是"能用"的,但不一定是"高效"的。比如它可能会在模板里写很复杂的表达式,或者在计算属性里做耗时的操作,或者没有正确使用v-if和v-show的区别。这些问题在功能测试的时候可能发现不了,但在生产环境中可能会导致性能问题。所以迁移完成之后,最好做一下性能检查,看看有没有明显的性能瓶颈。

第五个坑是样式兼容性问题。AI生成的样式通常是基于它对旧样式的理解,但有时候理解会有偏差,导致新系统的样式和旧系统不一致。尤其是一些比较老的CSS写法(比如浮动布局、IE兼容写法),AI可能转换得不对。我们的做法是,迁移完成后做一次全面的UI走查,逐个页面对比新旧系统的样式,确保一致性。

第六个坑是迁移过程中的需求变更。迁移项目通常周期比较长,期间业务需求可能会变化,旧系统可能会加新功能或者改bug。如果不同步到新系统,最后迁移完的新系统就会和旧系统不一致。我们的做法是,在迁移期间,旧系统的所有变更都要记录下来,并且同步更新到新系统的对应页面中。如果一个页面还没迁移,就先在旧系统上改,迁移的时候把变更包含进去;如果已经迁移了,就要在新系统上同步修改。

六、对AI辅助编程的一些思考

这次迁移项目让我对AI辅助编程有了很多新的认识。

首先,AI辅助编程不是要取代程序员,而是要改变程序员的工作方式。以前程序员的大部分时间花在写代码上,现在AI可以帮你写大部分常规代码,程序员的工作更多地变成了:定义问题、设计方案、审查代码、调试问题、优化性能。也就是说,程序员从"代码的生产者"变成了"代码的管理者和质量把控者"。这种转变对程序员的能力提出了更高的要求:你需要有更强的架构设计能力、代码审查能力、问题排查能力,而不仅仅是写代码的能力。

其次,AI辅助编程的效果很大程度上取决于使用者的水平。同样的AI工具,高手用和新手用,效果可能天差地别。因为高手知道怎么写好提示词,知道AI生成的代码哪里可能有问题,知道怎么审查和修正。而新手可能盲目相信AI生成的代码,出了问题也不知道怎么排查。所以,AI辅助编程不是降低了对程序员的要求,反而可能提高了门槛。它会放大你的能力:你越强,AI对你的帮助越大;你越弱,AI可能反而会给你带来更多问题。

第三,AI辅助编程在重复性高、规范性强的任务上效果最好。比如代码迁移、模板生成、CRUD页面开发、单元测试编写等。这些任务有明确的输入输出,有固定的模式,AI可以很好地学习和模仿。而在创新性强、不确定性高的任务上,比如系统架构设计、复杂算法实现、疑难问题排查,AI的作用就比较有限了。所以,我们应该把AI用在它擅长的地方,把人的精力用在需要创造力和判断力的地方。

第四,AI辅助编程需要建立相应的流程和规范。不能让每个人随便用AI生成代码然后直接提交,这样会导致代码质量参差不齐,甚至引入安全漏洞。需要建立AI代码的审查流程、测试要求、安全检查等规范,确保AI生成的代码符合质量标准。我们团队在这次项目中就建立了一套AI辅助开发的流程,包括提示词模板、代码审查清单、测试要求等,后续其他项目也可以复用。

七、写在最后

这次用AI辅助编程做系统迁移的经历,让我深刻感受到了技术变革的力量。三年前,谁能想到AI可以帮你写代码呢?而现在,它已经可以实实在在地提高我们的工作效率了。

但我也想提醒大家,AI辅助编程是一把双刃剑。用好了,它可以大幅提高效率,让你从繁琐的重复劳动中解放出来;用不好,它可能会给你带来大量的bug和技术债务。关键在于,你要理解它的能力边界,知道它擅长什么、不擅长什么,把它用在合适的地方,并且始终保持对代码质量的把控。

未来,AI辅助编程肯定会越来越普及,能力也会越来越强。作为程序员,我们不应该抗拒它,而应该学会使用它,让它成为我们的得力助手。同时,我们也要不断提升自己的能力,尤其是那些AI暂时还做不好的能力:架构设计、问题判断、业务理解、创造力。这些才是我们作为程序员的核心竞争力。

希望我的这次经验分享能对大家有所启发。如果你也在用AI辅助编程,或者打算尝试,欢迎在评论区交流你的经验和看法。