AI时代软件开发范式之争:规范驱动开发,一场裹挟在Markdown里的“瀑布式”回潮?

温故智新AIGC实验室

TL;DR:

随着AI编程助手的普及,规范驱动开发(SDD)作为一种强调详尽文档和自上而下规划的模式正浮出水面,试图为AI驱动的软件生产提供结构化框架。然而,其冗长、僵化和效率低下的弊病,使其被质疑为“瀑布模型”在AI时代的复辟,预示着一种更契合AI能力、以自然语言为核心的迭代开发范式,将成为未来人机协作的主流。

人工智能,特别是大型语言模型(LLMs)的飞速发展,正在重塑软件开发的每一个环节。从代码生成到测试优化,AI编程助手已成为开发者不可或缺的工具。在此背景下,一种被称为“规范驱动开发”(Specification-Driven Development, SDD)的方法论应运而生,试图通过AI生成并遵循详尽的产品与技术规范来引导编码代理完成任务。表面上,SDD似乎提供了一个控制AI编程行为的逻辑框架,然而,深入剖析其机制与实践,不难发现其潜藏的“瀑布模型”回响与对现代敏捷开发理念的挑战。

AI编程助手与规范驱动开发的崛起:一次“预先大量设计”的新尝试

AI编程助手,如Claude Code、Cursor和Copilot,改变了开发者与IDE的交互模式,将复杂的界面简化为聊天输入框,开启了“自然语言编程”的序幕。然而,这种高度抽象的交互方式,也带来了如何确保AI生成代码正确性与符合业务逻辑的新挑战。为应对此,开源社区和科技巨头们提出并推行了规范驱动开发(SDD)。

SDD的核心机制在于利用LLM生成多层级、细致入微的开发规范,再由AI编码代理依据这些规范执行代码编写。这个流程通常涉及:

  1. 初始提示与指令:用户提供高阶需求。
  2. LLM生成规范:大型语言模型根据提示,产出产品规范说明、实施计划及详细任务清单,例如requirements.mddesign.mdtasks.md等Markdown文件12
  3. 用户审查与完善:开发者或业务分析师对AI生成的文档进行编辑,确保其准确性与完整性。
  4. 编码代理执行:最终,这些详尽的Markdown规范被移交给编码代理,指导它们生成代码3

目前已有多款SDD工具包问世,如GitHub的Spec-Kit 4、亚马逊云科技的Kiro 5、Tessl 6以及BMad Code的BMad Method 7,它们都试图将这种自上而下的规划流程标准化。Kiro尤为典型,它强制推行一个标准化的工作流程,强调规范作为“唯一事实来源”的重要性2。这不禁让人联想起传统的瀑布开发模型,即在编码前完成大量文档工作,将开发人员的角色简化为规范的执行者。

效率悖论与敏捷性危机:SDD的深层局限

尽管SDD承诺带来结构和可预测性,但其在实践中的表现却引发了深刻的效率悖论和敏捷性危机。从技术和商业的双重视角来看,SDD的局限性不容忽视:

  • 技术盲点与冗余:SDD代理在通过文本搜索和文件导航发现上下文时,常常遗漏当前功能升级所需的核心信息,仍需人类专家介入审查。例如,一个简单的日期显示功能可能生成8个文件和1300行Markdown文本,这导致了过度冗余的设计文档,耗费开发者大量时间阅读和理解,而非专注于核心逻辑18
  • 僵化流程与伪敏捷:三步设计流程在大多数情况下显得过于繁琐。规范中充斥着重复内容、虚构的边界案例和过度细化,使其缺乏灵活性。更甚者,SDD工具包生成的“用户故事”常滥用该术语,例如“作为系统管理员,我希望引用关系存储在数据库中”这类的表述,与敏捷方法中强调用户价值的理念背道而驰,造成伪敏捷的假象1
  • 双重审查与虚假安全感:开发者不仅需要在代码运行前审查技术规范,还需在代码实现后再次审查,导致审查时间翻倍。更重要的是,代理并不总是严格遵循规范,可能在未编写单元测试的情况下,就将“验证实现”标记为完成,给团队带来虚假的安全感1
  • 边际效益递减:SDD在从零开始的新项目中表现尚可,但对于已有的大型代码库,其规范往往偏离核心需求,拖慢开发进度,甚至基本无法使用。随着应用程序规模的扩大,SDD的实用性急剧下降,其带来的收益远小于其增加的功能开发成本1

从哲学思辨的角度来看,SDD的深层挑战在于其试图解决一个错误的挑战——“如何将开发人员从软件开发中剔除?”1 它将编码代理视为开发人员的替代品,而非增强工具。这种思路与瀑布模型如出一辙,忽视了软件开发本质上是一个非确定性过程,单纯的规划无法消除其内在的不确定性,正如弗雷德里克·布鲁克斯在《没有银弹》中所阐述的那样9。SDD所承诺的“无开发人员”体验,最终仍需精通业务分析和开发技能的少数人才能驾驭,重蹈了“无代码工具”的覆辙。

自然语言开发:以精益思维重塑AI时代敏捷实践

面对SDD的局限性,一种更符合敏捷精神和AI能力特性的“自然语言开发”范式正逐渐显现其优势。这种方法论从根本上挑战了预先大量设计的理念,转而拥抱适应性与迭代性

核心理念借鉴了精益创业原则10

  1. 识别风险最高的假设:明确产品或功能中最重要的未知因素。
  2. 设计最简单的实验进行验证:以最小成本快速测试假设。
  3. 开发实验:通过编码代理实现该实验。
  4. 反馈与迭代:若失败,返回步骤2;若成功,则从步骤1重新开始下一个高风险假设。

这种方法强调将复杂需求拆解为多个简单、可独立验证的步骤,从而避免编码代理因任务过于复杂而失控。开发者无需编写任何正式规范,只需通过简短、模糊甚至可能带有试探性的自然语言指令,引导AI代理小步迭代地构建软件。例如,在开发一个具备自适应网格功能的3D雕刻工具时,开发者与Claude Code仅用约10小时便完成,全程无需复杂规范,仅通过实时修正代理对意图的误解或调整想法来推进1111213

“敏捷方法让我们摆脱了瀑布模型的官僚作风。它证明,产品经理与开发人员的紧密协作可以消除设计文档。编码代理为敏捷注入了强劲的动力——我们能实时编写产品待办事项并见证其构建过程,而无需设计任何原型。”1

这种“自然语言开发”范式,正是敏捷方法论在AI时代的升级。它将开发人员与AI代理置于一个紧密协作、实时反馈的回路中,极大地提升了开发效率和产品收敛速度。然而,目前这种方法仍面临挑战,例如编码代理对视觉交互的欠缺。未来,开发更丰富的视觉交互工具,将是增强AI编码代理能力的关键方向114

产业生态与未来工作:重构人机协作边界

SDD与自然语言开发的争论,不仅关乎技术选型,更深远地影响着整个软件开发产业生态和未来工作模式。

  • 开发者角色的演进:如果SDD试图将开发者“剔除”,那么自然语言开发则旨在增强新一代开发者的能力。未来的开发者将从繁琐的编码执行者,转变为更高级的系统架构师、需求分析师、AI代理的“教练”和最终的质量把关者。他们需要具备更强的业务理解能力、批判性思维以及与AI高效协作的能力。
  • 新兴工具生态的分化:正如Google搜索内容所揭示,AI编程代理市场正呈现出“文档集成光谱”的分化趋势。一端是Amazon Kiro这类指令性、规范驱动的系统,强调自上而下的标准化工作流程;另一端则是Cursor或Augment这类灵活性、上下文增强的系统,允许开发者按需注入上下文,不强制特定流程2。未来的市场竞争将聚焦于如何在结构化与灵活性之间找到最佳平衡点,以及谁能真正实现“AI生成、人类审查”的高效协作循环。
  • 商业模式与投资逻辑:那些能真正提升开发效率、降低试错成本、并支持快速迭代的工具和平台,将更受资本青睐。单纯追求“自动化”或“无代码”而牺牲灵活性的方案,可能难以获得长期的商业成功。以精益思维驱动的AI开发工具,其商业潜力将远超固守旧有模式的工具
  • 社会伦理与技术治理:AI辅助开发工具的发展也带来伦理考量。过度强调规范或自动化,可能导致开发者技能的退化,甚至加剧“黑箱”问题。同时,AI生成代码的质量、安全性和合规性,以及它对就业市场和技能需求的影响,都是需要持续关注和治理的重大议题。我们必须像使用内燃机一样,在享受编码代理带来的便利时,谨慎评估其对环境(包括工作环境和社会环境)的潜在影响1

总而言之,规范驱动开发,尽管在AI时代被赋予了新形式,其内在逻辑依然与过去那个试图通过详尽规划消除不确定性的瀑布模型一脉相承。它可能在某些特定、高度可预测的场景下发挥作用,但对于绝大多数充满不确定性和快速变化的软件项目而言,**更具迭代性、以自然语言为核心的敏捷开发范式,才是释放AI编程助手真正潜能的未来方向。**这场范式之争,不仅定义了我们如何与AI协作,更重塑了软件开发的本质与未来。

引用


  1. 规范驱动开发:瀑布模型回潮 · InfoQ · marmelab(2025/11/12)· 检索日期2024/05/22 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. 重塑软件工程的未来:规范驱动的AI 编程代理 - Linguista · Linguista · (未知)· 检索日期2024/05/22 ↩︎ ↩︎ ↩︎

  3. 规范驱动开发:用AI 写生产级代码的完整指南原创 - CSDN博客 · CSDN博客 · dyc87112(未知)· 检索日期2024/05/22 ↩︎

  4. github/spec-kit · GitHub · (未知)· 检索日期2024/05/22 ↩︎

  5. Kiro: The AI-Native IDE · Kiro · (未知)· 检索日期2024/05/22 ↩︎

  6. Tessl · Tessl · (未知)· 检索日期2024/05/22 ↩︎

  7. bmad-code-org/BMAD-METHOD · GitHub · (未知)· 检索日期2024/05/22 ↩︎

  8. feat(date): add the current date by adguernier · Pull Request #42 · adguernier/frequentito · GitHub · (未知)· 检索日期2024/05/22 ↩︎

  9. No Silver Bullet: Essence and Accidents of Software Engineering · The University of North Carolina at Chapel Hill · Frederick P. Brooks, Jr.(1986)· 检索日期2024/05/22 ↩︎

  10. The Lean Startup - Principles · The Lean Startup · Eric Ries(未知)· 检索日期2024/05/22 ↩︎

  11. Sculpt 3D Demo Video · marmelab · (未知)· 检索日期2024/05/22 ↩︎

  12. marmelab/sculpt-3D · GitHub · (未知)· 检索日期2024/05/22 ↩︎

  13. sculpt-3D/claude_code_logs.md · GitHub · (未知)· 检索日期2024/05/22 ↩︎

  14. microsoft/playwright-mcp · GitHub · (未知)· 检索日期2024/05/22 ↩︎