规范驱动开发的几点思考

摘要

2025年,AI编程工具经历了从狂热到理性的深刻演变。本文基于一线实践,系统梳理了AI辅助编程的核心范式演进------从依赖模糊描述的"氛围编程",走向以规范驱动开发(SpecDD) 为核心的严谨方法。本文基于规范驱动开发,提出了优化规范驱动开发的几点措施:统一领域语言 、验收测试驱动 与存量业务理解,并深入分析了在团队中落地的四大难点与五项策略。我们正站在开发范式转变的关键节点,而这次变革的核心,是让人与AI在各司其职中协同创造更大价值。

引言

2025年是AI一日千里的一年。年初,DeepSeek 大火,紧接着 Andrej Karpathy 带火 Vibe Coding,然后上下文工程、MCP、Workflow和Agent之争,从Cursor、Windsurf到Claude Code、kiro、trae等AI IDE你方唱罢我登场,但核心问题愈发清晰:如何系统化地利用AI提升软件工程效能? 当前给出的答案是规范驱动开发(SDD)

在阅读Martin Fowler关于软件工程演进的一篇采访后,我深感共鸣。我们正面临与昔日面向对象、敏捷、微服务等变革相似的前沿场景。以下是我的几点思考。

规范驱动开发的几点思考

如今,规范驱动开发(Specification-Driven Development, SDD)大火,对于如何落地规范驱动开发,个人觉得如何加上如下三点之后,效果会更佳。

1. 需求拆解与AI能力评估

尽管 AI 发展一日千里,但是,它不是万能的,上图是 SWE-bench Multilingual 在不同语言的解决率,很容易发现 Rust、Java、Python的效果要显著好于C/C++。同样,即使是 Java 语言的功能,在实现不同功能时,AI的效果也是不同的。

比如,框架代码、工具类用简单的ChatGPT、Qwen2.5 32B 模型就能解决,但是,你如果要实现具体的业务功能,那么,必须得 Qwen3-Coder-480B。因此,作为程序员,需要具备两个新能力

1、准确评估AI 能力:能准确评估哪些功能使用 AI,哪些需要自己亲自操刀

2、需求拆解能力:模型的上下文是有限的,因此,不能把需求一股脑给 AI,需要将需求拆分为合适的粒度

当你具备着两个能力的时候,你的能力在AI 时代将得到成倍的放大

讲这个点是,我们产品线的 AI IDE能力在 10 月份有一个非常大的能力提升,之前基于 workflow+qwen2.5 32B的模型,简单说就是只能实现基本的 CRUD,稍微加点业务就不行,一个不到 200 行代码,我花了一个下午验证,最后,通过对需求增加了更多详细的约束之后,基本一次能相对生成 80%的代码直接可用,于是,我们针对业务梳理了各种典型的开发场景,评估哪些场景可以使用 AI。而到了10月份底,重新基于Agent+Qwen3-Coder-480B实现之后,能力出现了一个很大的飞跃,同事利用周末一天开发了 3k 的代码,而全程几乎没有人工写代码,仅仅改了配置。

2 面向AI的领域统一语言

结构:如果你的代码能满足金字塔原理,那么,你的代码一定不会差。

词汇表:使用过 AI 的人都知道,其实大多数场景自然正常表达即可,涉及存量方法调用,尽量用方法名英文单词替代中文。核心一个要领,言简意赅

声明式表达:想法来自Kubernets和函数式编程,你不需要详细描述每一步,比如,你直接说快排,模型就能理解。业务中如何抽象某种业务操作,核心就是方法抽象,比如你实现一个订单付款的方法,你直接说调用payxxx方法,大模型通过上下文工程自动会封装对应的业务。

对于企业内部特有的领域逻辑,应对策略是:新增业务功能,封装为函数;存量功能,描述其名称即可。

比如,调用已经存在的一个业务功能,不需要详细给出参数,只需要说类名和方法名即可,如果方法是唯一的,给方法名即可,AI 可以通过你描述的关键词准确找的对应代码位置,自动将代码的参数、返回值添加到上下文。

注:这种子语言依赖大模型上下文工程对存量代码的理解程度。比如,底层同样的模型,我用qwen cli时,需求就需要比用Claude Code描述得更详细才行,所谓能力不够,描述来凑。

统一语言的事情,是 24 年的时候我就在思考这个事情,记得公司的 ICT 软件技术大会结束后,软件总工邀请了徐昊老师进行线下交流,我当时问了两个问题,其中一个就是是否存在一种更抽象语言来编程?看到Martin Fowler的采访之后,第一次感觉和大牛同频了,才有了此文。

3. 验收测试驱动开发(AI-ATDD)

当为AI提供具体的验收测试用例时,AI会具备多轮自我迭代与优化的能力,大幅减少人工干预轮次。这种能力能实现的核心是Claude Code在生成代码的时候,自动会生成测试用例和代码(依赖具体的模型,我用的后台模型是 GLM 4.6),但是由于有时候它不能理解我们的环境,有时候命令不可运行,测试失败了,大部分情况下,我们选择忽略,而当把测试的方法告诉它之后,它就会严格按照我给的用例进行迭代。

这个想法来源是,我最近用Claude Code实现一个"合并连续编号文件"的功能。在没有提供测试用例时,Claude Code生成的初版代码不正确,我需要通过多轮交互、反复澄清需求才能修正。而当我在需求中附上了简单的输入输出示例后,AI在生成代码后,自动以其为基准进行验证,首次失败后自我反思,在第三次迭代即成功通过用例。

如下示例

复制代码
遍历文件夹,找的所有的.md文件,取文件名的第一个数字,进行排序;排序之后,取文件
名中的第二个数字,如果数字连续,就将相邻的文档合并。验证:输入
test/xuexijuexing/,存在
xuexijuexing10_6_selector_1_0.md,xuexijuexing11_2_selector_1_0.md,xuexijuexing
12_3_selector_1_0.md,xuexijuexing13_4_selector_1_0.md,xuexijuexing9_5_selector
_1_0.md,合并xuexijuexing9_5_selector_1_0.md,xuexijuexing10_6_selector_1_0.md为
xuexijuexing9_5_selector_1_0.md,合并xuexijuexing11_2_selector_1_0.md,xuexijuex
ing12_3_selector_1_0.md,xuexijuexing13_4_selector_1_0.md
为xuexijuexing11_2_selector_1_0.md   首先排序

通过预先提供验收用例,将调试与澄清的成本从"人-AI多轮对话"转移给"AI自我迭代",极大提升了首次生成的成功率与整体效率。

还有就是B 站的一个视频,关于 SWE-Bench发展趋势的图,虽然 SWE-Bench不能代表编码的能力,但已经能说明一些问题

综合起来,在 SDD 的基础上,可以叠加如下能力能获得更好的效果

1、需求拆分为功能点

2、面向AI的领域统一语言

3、增加必要的验收用例

如何落地

难点 1:人员惯性

虽然年初DeepSeek 在全国范围已经出圈,如果你关注 AI 相关的自媒体,每天看到的都是颠覆,而现实是,只有 10%的开发人员在持续使用 AI 辅助编码,90% 的开发人员只是偶尔用于,

但是,即使 AI 可以胜任,90%的人也不会使用,为什么?这就是埃弗雷特·罗杰斯的创新扩散理论曲线的厉害之处

以我推广AI在团队的运营经验,在一个人均 211 的公司,50%以上的人根本没有改变的意愿,很多人你不管怎么宣传他也从不会主动使用,这就是事实,更不用说其他公司了。大部分人对 AI 的理解仍然停留在年初的DeepSeek,仍然在网页上通过 AI 生成一些简单的工具类,如果你经常使用 Cursor 或 Claude Code等 AI IDE解决你的各种开发问题,你已经属于早期采纳者了。

难点 2:范式转移

程序员要从写具体的代码转变为写准确的文档、软件设计、设计测试用例,这与之前的习惯和要求的技能树发生了变化。据我接触的情况来看,大部分程序员描述需求的能力一般般,必须经过必要的培训才行。

写文档vs写代码:要求开发人员写代码改为写文档,是逆人性的。因为以前写完代码,再补充文档,大家觉得没挑战,现在要从有挑战的写代码改成写文档,很难接受。

有人觉得是解放:我以为我真的很喜欢写代码,结果发现,我喜欢的其实是写代码能带来的东西。

有人则有些怀念:整天提示 Claude 并不那么有趣或有成就感。自己戴上耳机、进入心流状态、亲手实现一个东西,那种感觉要好多了。

有人悲喜交加:我不止听到一位同事说,经常使用 AI IDE,发现自己不想手写代码了,他们既有不用手写代码的兴奋,也有自己技能退化的担忧,这么持续下去,会不会不会写代码了

还有人直接接受了这个 trade-off:确实有些东西我会怀念------比如重构代码时进入那种禅定般的心流状态。但我现在生产力高了太多,这点代价我愿意付

难点 3:错误容忍度

不同的人对错误的容忍度不一样,有些人因为1-2 次AI 效果不达预期,就不愿意再尝试。而有些人,对AI 效果不达预期的容忍度要高很多。比如,竟然有人因为 AI 生成的注释中时间不对,觉得 AI 不行,拿着 AI 解决不了某个智力问题来评测 AI 的能力!思维还停留在质疑AI的能力上,而不是欣然接受不确定性

难点 4:担心AI 替代

当 AI 介入之后,效率提升,原有工作量必然被压缩,同样的需求,人力必然被压缩,必然面临裁员。但趋势已无法改变,唯有拥抱变化,拥抱变化说起来容易,做起来难。从多方面想信息来看,本轮 AI 只能解决编码的问题,不能解决软件工程的问题。所以,大可不必担心,尽快专注到业务、设计等高价值的事情

那么,如何在团队中落地呢?除了对 AI能力的宣传之外,

1、流程优化:

  • 流程的变革就是一种方式,比如,在团队集中澄清需求的时候,每个程序员写的设计文档必须是AI 友好的。比如,需求拆分为功能、采用统一的描述语言、添加必要的验证用例等。
  • 在代码提交环节,通过 预提交钩子(pre-commit hook) 进行卡点,对AI高胜任度的任务(如框架类、生成工具类等 100 行以上的代码),检查是否合理使用了AI辅助。

2、梳理 AI 胜任矩阵:团队共同维护一份动态更新的清单,明确列出当前已验证的、AI能高质量完成的场景。这为开发者提供了清晰的使用指南,降低了试错成本。

3、宣传好的案例:定期分享内部成功的、提效显著的AI应用案例,用实实在在的结果刷新团队认知,证明AI在复杂场景下的能力。

4、技能培训与激励:组织关于"如何编写优质AI提示词"、"SDD文档编写规范"的培训。将AI工具的有效使用纳入绩效考核或贡献度表彰体系。

5、文化引导 :坦诚讨论AI带来的变化,强调未来的核心价值在于 "业务设计、架构决策与复杂问题解决",而AI是解放开发者专注于此的利器。

总结与展望

回顾软件工程发展史,每一次范式转移------面向对象、敏捷、TDD、微服务------都源于对前沿工程挑战的深刻回应。今天,我们正站在AI重构软件开发流程的起点。

Martin Fowler在采访中谈及技术变革的本质,与我实践中的感悟不谋而合:真正的进步,不在于工具本身,而在于我们如何重新定义角色、流程与协作方式。规范驱动开发(SDD)、统一语言、验收测试驱动,正是我们为这一新协作模式奠定的基石。

这不仅仅是效率的量变。它要求我们从"代码编写者"转变为蓝图设计者、质量定义者与AI训练师。确实,我们或许会怀念亲手编码时进入的心流状态,但换来的,是驾驭更复杂系统、创造更大业务价值的可能性。这个代价,值得付出。

改变已至,唯拥抱者先行。

相关推荐
siuser小伟的AI实验室4 小时前
主目录还有改动,怎么让 Codex 另开任务?一次 worktree 小练习
ai编程
siuser小伟的AI实验室4 小时前
Codex 说完成了,怎么验收?先核对范围、测试、用户路径和上线
ai编程
blackappleD4 小时前
MCP 是什么?按 2026-07-28 新版规范讲清架构、调用流程和配置
ai编程
zw_onemaker_ai4 小时前
让 Agent 自己收钱:72 小时搭出 x402 Agent 经济体(附八个真实踩过的坑)
人工智能·ai编程
程语AI4 小时前
RAG 混合检索实战:向量 + BM25 怎么用 RRF 融合
ai编程
程序员大狐狸5 小时前
Ultra X7 358H 笔记本电脑,本地三个大模型编程能力、速度、上下文全面对比与选型报告
llm·ai编程
IllegalCreed5 小时前
让文档不烂——Agent 时代的文档生命周期(四)
ai编程
qinglongcn5 小时前
Agent 可靠性的数学——为什么编程是第一个跑通的赛道
agent·ai编程
IllegalCreed5 小时前
Agent 不是失忆,是找不到入口——大型项目文档分层设计(一)
ai编程
IllegalCreed5 小时前
让每份文档都有唯一的位置——文档寻址设计(三)
ai编程