[论文阅读] 人工智能 + 软件工程 | LLM辅助软件开发:需求如何转化为代码?

LLM辅助软件开发:需求如何转化为代码?------解读《From Requirements to Code》

论文标题:From Requirements to Code: Understanding Developer Practices in LLM-Assisted Software Engineering

arXiv:2507.07548

From Requirements to Code: Understanding Developer Practices in LLM-Assisted Software Engineering

Jonathan Ullrich, Matthias Koch, Andreas Vogelsang

Comments: This paper has been accepted for publication at the 33rd IEEE International Requirements Engineering (RE) conference

Subjects: Software Engineering (cs.SE)

研究背景:LLM来了,需求工程就没用了吗?

近年来,生成式大语言模型(LLM)如GPT-4、CodeLlama等展现出惊人的代码生成能力。有人畅想:未来,领域专家只要把需求告诉LLM,就能直接得到完整的软件,传统软件工程流程可能会被颠覆。

但现实真的如此吗?

在实际开发中,软件的诞生离不开"需求-设计-实现"的流程:需求描述"做什么",设计衔接"怎么做",最终由开发者转化为代码。而LLM虽然能生成代码,却面临一个关键问题------它能直接理解原始需求吗?

论文中提到一个生动的案例:有开发者直接把"为Keithley万用表写一个命令接口"这样的需求输入LLM,结果生成的代码完全无法使用。另一位从业者也表示,直接用大粒度需求生成代码,往往需要大量调整,效率极低。

这揭示了一个核心矛盾:现有研究多关注LLM的代码生成能力,却很少思考它如何融入完整的软件工程流程,尤其是需求和设计在LLM辅助开发中到底扮演什么角色。这正是这篇论文要解决的问题。

主要作者及单位信息

  • Jonathan Ullrich、Matthias Koch:德国弗劳恩霍夫IESE研究所(Fraunhofer IESE Kaiserslautern)
  • Andreas Vogelsang:德国杜伊斯堡-埃森大学Ruhr软件技术研究所(paluno -- The Ruhr Institute for Software Technology)

创新点:首次揭开工业实践中LLM与需求的"互动密码"

这篇论文的独特之处在于,它跳出了实验室里的代码生成 benchmark,聚焦真实工业场景,首次系统回答了"开发者如何在LLM辅助开发中处理需求和设计信息"。

具体来说,它的创新点包括:

  • 打破"LLM直接接收需求就能生成可用代码"的误区,明确传统需求必须经过"翻译"才能被LLM有效利用;
  • 构建了两个实用模型:描述需求到代码的过程模型 (怎么做)和提示词的内容模型(输入什么);
  • 总结了开发者使用LLM的三种典型交互模式,揭示了LLM在实际开发中的"真实位置"。

研究方法:18位从业者的"真心话"如何变成理论?

论文采用定性访谈法,整个研究过程可以拆解为4个步骤:

  1. 选对人:访谈18名从业者,覆盖14家公司(大中小规模都有)、12个领域(如汽车、医疗、电商),角色包括开发者、软件架构师、产品负责人等。他们使用的需求类型(用户故事、标准化规格等)和LLM交互方式(ChatGPT等聊天工具、GitHub Copilot等IDE集成工具)也多样化,确保结论的普适性。

  2. 问对问题:采用半结构化访谈,分两部分:

    • 第一部分:了解从业者不用LLM时的开发流程,以及需求、设计等前期文档的情况;
    • 第二部分:聚焦LLM使用场景,比如"什么时候会想到用LLM?""提示词里会写什么?""怎么确保生成的代码符合需求?"。
  3. 挖深信息:访谈时长30-60分钟,全程录音并转录(德语访谈用DeepL翻译成英语),最终提炼出179条关键引用作为分析基础。

  4. 建出模型:通过"归纳编码"分析数据------先把引用归类成"主题",再合并成更高层次的模型。比如从"需求太抽象,得拆成小任务"这个共同反馈,提炼出"需求分解"的过程;从"提示词里要写架构约束"等说法,总结出内容模型的要素。整个过程由三位作者交叉验证,确保结论可靠。

主要贡献:原来LLM辅助开发是这样"玩"的

论文的核心发现可以总结为"1个核心结论+2个模型+3种模式",直接告诉你在实际开发中该如何用好LLM:

核心结论:传统需求不能直接喂给LLM

开发者不会把用户故事、功能需求等原始需求直接输入LLM,因为这些需求太抽象。他们会先把需求拆解、细化成"编程任务"(比如"实现用户登录的密码加密功能"),再用这些具体任务作为LLM的输入。

过程模型:从需求到代码的"两步走"

第一步:把需求拆成编程任务。比如"做一个电商购物车"这个需求,会被拆成"计算商品总价""处理优惠券折扣"等具体任务;

第二步:用LLM实现编程任务,有三种方式可选:

  • 技术探索:如果任务不熟悉(比如"如何用Python解析JSON"),先让LLM给出解决方案思路;
  • 代码生成:明确任务时,让LLM生成代码(需提供代码上下文,比如现有函数、框架约束);
  • 手动编码:生成的代码不合适时,手动编写或调整,可能搭配IDE的自动补全功能。

内容模型:好提示词得包含这些"料"

想让LLM生成能直接用的代码,提示词不能只写编程任务,还得加这些信息:

  • 业务逻辑/算法(比如"按用户等级计算折扣");
  • 架构与部署约束(比如"必须符合公司的云原生规范");
  • 语言和库(比如"用Java 17和Spring Boot框架");
  • 接口和数据格式(比如"返回JSON格式,包含code和message字段");
  • 单元测试要求(比如"需要覆盖90%的分支");
  • 现有代码上下文(比如"调用已有的UserService类")。

三种交互模式:不同开发者的"LLM使用偏好"

  • 增量代码生成:像"结对编程"一样,交替用LLM探索方案、生成代码和手动调整,适合用聊天工具(比如ChatGPT),能复用聊天历史的上下文;
  • 手动编码+智能补全:主要自己写代码,偶尔接受IDE集成工具(比如GitHub Copilot)的自动补全建议,LLM的作用较小;
  • 广泛代码生成:尽可能让LLM多干活,自己专注于写提示词和检查代码(比如"我几乎不自己写代码了,主要和AI迭代")。

1. 一段话总结

本研究通过对14家公司的18名从业者进行访谈,探究了从业者在LLM辅助开发中如何整合需求和设计信息。核心发现包括:传统需求文档过于抽象,需分解为编程任务 才能作为LLM输入;从业者通过过程模型 (分解需求为编程任务,结合技术探索、代码生成、手动编码实现)和内容模型 (在提示中加入业务逻辑、架构约束、代码上下文等)使用LLM;存在增量代码生成、手动编码与智能自动补全、广泛代码生成 三种交互模式。研究表明,LLM辅助开发仍需需求工程和软件工程专业知识,全自动软件工程仍为远景


2. 思维导图


3. 详细总结

一、研究背景
  • 生成式LLM(如GPT-4、CodeLlama)在代码生成等任务中表现出色,工具(如GitHub Copilot)提升了易用性。
  • 现有研究多关注LLM的代码生成能力,但较少结合软件工程流程,尤其是需求工程和设计阶段的作用,存在研究空白。
二、研究目的
  • 核心问题:从业者如何在LLM辅助开发中整合需求和设计信息。
  • 具体目标:明确从业者是否将需求作为提示输入,以及提示中需包含的设计信息。
三、研究方法
  1. 参与者:18名来自14家公司(含大中小型)的从业者,覆盖12个领域,角色包括开发者、架构师、产品负责人等;使用的需求类型有用户故事、标准化规格等,交互方式包括聊天界面(如ChatGPT)和IDE集成(如GitHub Copilot)。
  2. 数据收集:2024年11月至2025年2月进行在线访谈(30-60分钟),半结构化访谈提纲,内容涵盖开发流程、LLM使用场景等;访谈记录转录并翻译(德语→英语)。
  3. 数据分析:通过体内编码(179个引用)归纳主题,构建过程模型和内容模型,编码经三位作者交叉验证。
四、主要发现
  1. 过程模型

    • 需求分解 :传统需求(如用户故事)过于抽象,无法直接作为LLM输入,需分解为更具体的编程任务(补充实现细节)。
    • 实现方式 :结合三种模式
      • 技术探索:开发者对任务不熟悉时,用LLM探索解决方案。
      • 代码生成:生成大部分代码,需选择代码上下文,构建提示(含设计决策等)。
      • 手动编码:手动编写或调整生成的代码,可能使用自动补全。
  2. 内容模型:提示需包含的关键信息(图2)

    • 核心:编程任务(含业务逻辑/算法)。
    • 补充:架构与部署约束、语言与库、接口与数据格式、单元测试、代码上下文。
  3. 交互模式

    • 增量代码生成:如"结对编程",交替进行技术探索、手动编码和代码生成,复用聊天历史上下文。
    • 手动编码与智能自动补全:依赖IDE集成工具,主要手动编码,接受自动补全建议。
    • 广泛代码生成:尽可能将任务交给LLM,重点在提示构建和代码检查。
五、讨论与影响
  1. 与现有研究的关系:支持现有关于LLM需上下文信息、与开发流程整合的观点,补充了架构约束等关键信息的重要性。
  2. 对研究的影响:需探索任务分解粒度、上下文复用、提示工程与代码调整的权衡等方向。
  3. 对实践的影响:全自动软件工程暂不现实,需求工程和软件工程技能仍不可或缺;提示词未被视为重要工件,需关注其可追溯性。
六、结论

本研究提出的理论揭示了LLM辅助开发中需求和设计信息的整合过程,强调了需求分解和上下文构建的重要性,为相关研究和实践提供了基础。


4. 关键问题

  1. 问题 :为什么传统的需求文档不能直接作为LLM辅助代码生成的输入?
    答案:传统需求文档(如用户故事、功能需求)过于抽象,缺乏具体实现细节,直接输入LLM会导致生成的代码难以使用或需要大量调整,效率低下。例如,有从业者尝试用"为Keithley万用表编写命令接口"这样的需求输入LLM,却未得到可用代码。因此,需将其分解为更具体的编程任务。

  2. 问题 :为了生成可整合到现有代码库的有用代码,提示词中需要包含哪些关键内容?
    答案:提示词以编程任务为核心,需补充多类信息:①业务逻辑或算法细节;②架构与部署约束(如基础设施要求);③语言与库(避免过时或领域特定信息缺失);④接口与数据格式;⑤单元测试;⑥相关代码上下文。这些信息确保生成的代码符合项目环境和需求。

  3. 问题 :从业者使用LLM辅助代码生成时,主要有哪些交互模式?这些模式的差异是什么?
    答案:主要有三种模式:①增量代码生成:如"结对编程",交替使用技术探索、代码生成和手动编码,依赖聊天历史复用上下文,适合聊天界面;②手动编码与智能自动补全:以手动编码为主,接受IDE集成工具的自动补全建议,交互抽象层次低;③广泛代码生成:尽可能让LLM生成代码,重点在提示构建和代码检查。差异体现在LLM的依赖程度、交互界面和抽象层次上。

总结:LLM很能打,但需求工程仍"不可替代"

这篇论文通过真实的工业实践案例,打破了"LLM能搞定一切"的幻想:

  • 解决的问题:填补了"需求和设计在LLM辅助开发中到底起什么作用"的研究空白,让我们知道LLM不是孤立的"代码生成器",而是需要融入现有软件工程流程的工具。
  • 关键成果:提出的过程模型和内容模型,相当于给开发者画了一张"LLM使用说明书";三种交互模式则揭示了不同场景下的最佳实践。
  • 现实意义 :全自动软件工程(领域专家直接给需求,LLM出完整软件)还很遥远。至少现在,需求拆解、提炼上下文这些需求工程和软件工程的核心能力,依然是开发者的"必修课"
相关推荐
归去_来兮26 分钟前
生成式对抗网络(GAN)模型原理概述
人工智能·深度学习·生成对抗网络
在努力的韩小豪1 小时前
如何从0开始构建自己的第一个AI应用?(Prompt工程、Agent自定义、Tuning)
人工智能·python·llm·prompt·agent·ai应用·mcp
云卓SKYDROID1 小时前
无人机环境感知系统运行与技术难点!
人工智能·计算机视觉·目标跟踪·无人机·科普·高科技·云卓科技
网安INF1 小时前
深度学习中的 Seq2Seq 模型与注意力机制
人工智能·深度学习·神经网络·注意力机制·seq2seq
火山引擎开发者社区2 小时前
ByteBrain x 清华 VLDB25|时序多模态大语言模型 ChatTS
人工智能·语言模型·自然语言处理
SoaringPigeon2 小时前
从深度学习的角度看自动驾驶
人工智能·深度学习·自动驾驶
产品经理独孤虾2 小时前
如何利用AI大模型对已有创意进行评估,打造杀手级的广告创意
人工智能·大模型·aigc·产品经理·数字营销·智能营销·智能创意生成
MobotStone2 小时前
无代码+AI时代,为什么你仍然需要像个开发者一样思考
人工智能·算法
whabc1003 小时前
和鲸社区深度学习基础训练营2025年关卡3_Q1(1)
人工智能·深度学习