三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

遗留系统,AI 为什么测不动

遗留系统,AI 为什么测不动

摘要:AI 给新项目写测试成千上万、绿得漂亮,一碰遗留系统就碎。三层拆开讲:现象是 AI 直接测会焊死实现;焦虑是 Java 会不会被取代;解法是瓶颈在上下文——特征测试钉现状,上下文工程补历史。

遗留系统,AI 为什么测不动?

先说个对比。

给新项目写测试,AI 现在几乎是降维打击。你描述一个模块,它刷刷生成几十个测试文件,覆盖率拉满,一跑全绿。你甚至懒得逐条看,反正过了。

这套"全绿"体验,一到遗留系统(圈内也叫棕地项目)就变了味。

独立开发者 NotAShelf 在 8 月初发了篇《Taste Is All That's Left》,8 月 7 日被网易科技编译后传了一圈。里面一句话戳中很多人:

AI 给新项目写测试易如反掌,但大多数人面对的是遗留系统——多年荒废、堆满糟糕决策、没有测试。

这句话值得拆开看。AI 不是不能测,是它的默认打法在老代码上失效了。

现象层:AI 直接测,测试和实现焊死了

新代码长什么样?目录规整、依赖清晰、一个类一个职责。AI 顺着结构写测试,天然能对上。

老代码长什么样?一个方法里,一边计算金额,一边开事务,还顺手把结果持久化了。层次职责混在一起,谁也分不清。

这时候你让 AI"补测试",它会干什么?

它没多问,直接开写。一会儿,几十个测试文件生成出来了——你满怀期待跑一遍,挂掉大半。

不是 AI 菜。是它把"代码长什么样"当成了"代码应该长什么样"。测试写出来,跟具体实现绑得死死的。

// AI 直接生成的"单元测试":断言绑死内部调用
when(ledger.persist(any())).thenReturn(true);
verify(ledger).persist(argThat(tx -> tx.amount().equals("100.00")));
// 内部实现一改,这条测试就碎

这种测试的问题不在"测不准",在于它把实现细节焊死在断言里。你重构一个内部方法,测试先碎给你看——测试反而成了重构的阻力。

NotAShelf 给的解法,叫特征测试(characterization tests)

思想一句话:不判断代码对不对,先把当前行为钉下来。

@Test
void 特征测试_锁定当前工单审批行为() {BigDecimal fee = legacyBilling.calc("企业客户A", "工单#T-20260810");// 这不是"正确值",是"当前值"——先钉住,再谈改assertEquals(new BigDecimal("58.00"), fee);
}

注意注释:这不是"正确值",是"当前值"。

特征测试不纠结单元测试、不 mock 依赖、不断言内部实现。它从上到下,以"活代码"的方式跑真实调用,把现状记录下来。对不对先不管,先保证"没人动它"。

为什么 AI 特别适合干这个?

NotAShelf 的观察:AI 写的东西,在有人验证之前都是错的——验证比写还难。而特征测试恰好不需要验证:它只记录现状,不判断对错。风险低、不限制重构,正好绕开 AI 最不擅长的部分。

焦虑层:Java 会被 Python 取代吗

特征测试解决了"怎么测",但一个更扎心的问题会追着你问:

我守着这么一堆老代码,是不是已经被时代淘汰了?

这个焦虑不是空穴来风。两个消息放在一起看:

一是新业务 AI 原生、全程无人工;二是历史债务重的项目,AI 作用有限。

前者让人热血,后者让人心凉——Java 开发者大多是后者。

先看数据,别急着下结论。

TIOBE 2026 年 8 月榜单:Python 18.53% 排第一,Java 8.25% 排第四,差约 10 个百分点。

但有个反直觉的细节:Python 同比跌了近 8 个百分点。前两年 AI 热潮把它捧到过 27% 的历史高位,现在退烧了——退烧之后,第一还是它。

TIOBE 的口径要说清楚:它衡量的是搜索和学习热度,不是岗位数,也不是生产代码量。它回答的是"现在大家想学什么",回答不了"系统跑在什么上"。

看岗位数据,另一番景象。LinkedIn 2026 年 Q1:Java 岗位约 11.2 万,Python 约 9.8 万,Java 绝对数更大。但 Python 同比增长 18%,增量几乎全来自 AI 和数据工程;Java 只涨 3%。

企业现实里,两者是配合不是替代:Python 做算法训练,Java 做业务落地、接口承载、线上服务。

Azul《2026 年 Java 现状调查》也印证了这点:62% 的企业用 Java 写 AI 功能(2025 年是 50%),多数是给存量 Java 系统加 AI 能力。byteiota 有篇评论说得好:"Python 主导一切 AI"的叙事,漏掉了生产部署那一段——算法是 Python 写的,跑起来承载业务的还是 Java。

Priceline 的 CTO Sejal Amin 的说法也值得参考:招聘不再看精通什么语言,看能不能借 AI 用合适的语言把系统搭出来。

所以结论分三种情况:

  • 存量上,不会。 银行、保险、核心交易系统还在 Java 上,迁移成本高到没人敢提。
  • 增量上,趋势不利。 新项目、AI 原生应用,默认 Python/TypeScript 的越来越多。
  • 岗位上,绝对数仍大但增速放缓。 只会 CRUD 的初级岗承压最大。

但别把三件事混为一谈:Java 语言热度下降 ≠ Java 开发者失业 ≠ 老系统该推倒重写。

更准确的说法是:Java 开发者正在分层。会带上下文、懂业务、能把 AI 用起来的那批人,反而在涨价。

解法层:瓶颈在上下文,不在能力

那 Java 开发者的机会在哪?

回到开头的问题。AI 测不动老代码,真不是能力问题。腾讯技术工程 8 月 7 日的文章里,作者自称"AI 铲屎官",讲自己重构大半年,从 AI 胡言乱语到精准改代码,转折点不是换了更强的模型,而是——给项目搭了 AI 上下文工程

他的核心判断:AI 和开发者的区别,只在上下文。

包括什么?

  • 业务历史背景
  • 项目协作方式、和其他模块的关系
  • 过去的需求文档、技术文档
  • 真实运行情况——哪些分支还在跑,哪些只是历史兼容
  • 架构设计和技术债务——哪些改造只做了一半

这些都是"代码里看不出来、改错会出事"的信息。

那篇文章里有个例子,特别典型。

系统里有一段"看起来是重复"的持久化逻辑——审批单被写进库两次。AI 把这当成重复代码,删掉了一次写入。

测试挂掉。

报错现象:删完测试全红,审批单查不到完整历史。

排查:顺着写入链路翻,发现两个流程分支都在跑——早年流程走第一次写入,后来流程又走第二次,线上老工单还依赖它。

解法:不是让 AI"别再删",而是把"这是老工单流程的兼容分支,线上仍在运行"写进项目上下文。从此 AI 再遇到这段代码,会先判断是不是兼容分支,而不是一刀删掉。

关键发现:这段信息不在代码里,在当年的业务决策记录里。

这就是上下文工程:把代码里看不出来的信息,显式交给 AI。

具体做起来,三件事就够起步:

  • 写一份"现状说明书":哪些模块还在被真实调用、哪些是历史兼容、哪些改造只做了一半。不用长,够 AI 判断就行。
  • 把散落的需求文档、技术文档收拢成 AI 能读的格式,按模块归档。
  • 在 AI 工具里把这份上下文挂上。国内外的工具都支持,关键不是格式,是内容有没有喂进去。

做完这三件事再让 AI 动手,效果完全不同。腾讯作者的原话是:搭上下文之前 AI 胡言乱语,搭完之后,它能精准定位问题、给出贴合项目的方案。

当然,这份现状说明书不会自己长出来,得靠人写。这本身就是成本——但它是一次性投入,换来的是一年 365 天不重样的 AI 协作效率。

这件事对 Java 开发者是利好,不是利空。因为上下文恰恰来自人——来自那些在系统里泡了很多年、知道哪段代码是坑的人。

把人和 AI 的协作成本显性化

现在很多团队算 AI 提效,只算"生成代码省了多少小时"。漏了另一半:人和 AI 的沟通协作成本。

代码生成成本已经趋近于零,真正卡住的是"让 AI 理解这个项目"的成本。

上下文工程就是把这笔成本显性化:写成文档、做成规范、沉淀进工具配置,一次投入,反复复用。

这套做法不挑工具。Claude Code、Cursor 能做,国内的 CodeBuddy、WorkBuddy 也能做;模型用 DeepSeek、Kimi、豆包都一样——关键是上下文喂得够不够。

特征测试 + 上下文工程,正好是一对:

  • 特征测试管"现状"——先把老代码的行为钉住,AI 改坏了立刻能发现;
  • 上下文工程管"为什么"——把代码里没有的历史和约束喂给 AI,让它别踩坑。

两个都做完,遗留系统才算真正对 AI 开放。

回到标题:AI 为什么测不动遗留系统?

因为它看到的只是代码,不是系统。代码纠缠、没有测试、历史藏在文档和人的脑子里——AI 在单点上是强的,在"理解一个活了十年的系统"上是弱的。

但解法不是等更强的模型。特征测试钉住现状,上下文工程补齐历史,把人和 AI 的协作成本显性化——这套组合拳,现在就能做。

至于 Java 会不会被取代?数据说了:热度降了,岗位还在,存量不会跑。真正被淘汰的不是 Java,是"只会 CRUD、不掌握上下文"的那批用法。

延伸阅读

  • 特征测试是《Working Effectively with Legacy Code》(Michael Feathers)里的经典概念,书里讲得很透,建议整本读。
  • NotAShelf 原文《Taste Is All That's Left》值得读全文,讲的是 AI 时代"品味"为什么成了稀缺品。
  • 腾讯技术工程那篇《从胡言乱语到精准改代码:我是如何让 AI 读懂老项目的》,讲上下文工程落地的完整过程。

参考资料

  • NotAShelf:《Taste Is All That's Left》
  • TIOBE Index,2026 年 8 月榜单
  • 腾讯技术工程:《从胡言乱语到精准改代码:我是如何让 AI 读懂老项目的》
  • Azul:《2026 年 Java 现状调查》
  • LinkedIn 岗位数据,2026 年 Q1

作者:唐悦玮 | 公众号同名
从后端出发,用 AI 拓展到全栈的工程师。

← 返回列表