前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大型语言模型(LLMs)在软件工程中的应用:过度炒作还是颠覆性变革?

大型语言模型(LLMs)在软件工程中的应用:过度炒作还是颠覆性变革?

作者头像
Antony
发布2024-05-22 20:17:18
1250
发布2024-05-22 20:17:18
举报
文章被收录于专栏:软件测试那些事

本文英文原文来自SEI blog,由KIMI翻译

大型语言模型(LLMs)终于到来,能让我们都成为更好的软件工程师吗?还是说LLMs为软件开发创造了比功能性更多的炒作,并且同时让每个人都陷入了一个难以区分由人工智能(AI)程序生成的完美但有时是虚假和错误的代码与经过验证和充分测试的系统的世界?

LLMs及其对软件工程未来潜在影响

这篇建立在IEEE论文《大型语言模型在软件工程任务中的应用:机遇、风险和影响》中介绍的想法上的博客文章,重点关注了LLMs在软件开发中的机会和警告,将LLMs纳入依赖软件系统的涵义,以及需要更多研究和创新以推进其在软件工程中使用的领域。软件工程社区对自2022年最后一个季度以来LLMs展示的加速进步的反应,从蛇油到对程序员无帮助,到我们所知的编程和计算机科学教育的终结,再到彻底改革软件开发过程。正如通常情况一样,真相在中间某处,包括使用LLMs的开发人员面临的新机遇和风险。

研究议程已经预见到,软件工程的未来将包括一个由AI增强的软件开发生命周期(SDLC),在这个周期中,软件工程师和AI支持的工具共享角色,如副驾驶、学生、专家和监督者。例如,我们在2021年11月出版的书《构建软件工程的未来:软件工程研究与开发的国家议程》描述了一条研究路径,即人类和AI支持的工具作为值得信赖的合作伙伴一起工作。然而,那时(在ChatGPT向公众发布前一年),我们没有预料到这些合作机会会如此迅速地出现。因此,下面的图表扩展了我们在2021年书中提出的视野,以编目AI增强在系统操作和软件开发生命周期(图1)中可以应用的程度,从传统方法到完全AI增强的方法。

使用传统SDLC技术构建的常规系统——这个象限代表了系统操作和SDLC的AI增强程度低,这是当今大多数依赖软件项目的基线。一个例子是使用传统数据库查询进行操作的库存管理系统,并且是使用没有AI基础工具或方法的常规SDLC流程开发的。

使用AI增强技术构建的常规系统——这个象限代表了软件工程社区中的一个新兴研发领域,其中系统操作的AI增强程度低,但在SDLC中使用了AI增强的工具和方法。一个例子是一个网站托管服务,其内容不是AI增强的,但开发过程使用了基于AI的代码生成器(如GitHub Copilot)、基于AI的代码审查工具(如Codiga)和/或基于AI的测试工具(如DiffBlue Cover)。

图1:系统操作和软件开发生命周期的AI增强分类法

使用传统SDLC技术构建的AI增强系统——这个象限代表了系统中AI增强程度高,特别是在操作中,但在SDLC中使用了传统方法。一个例子是电子商务平台中的推荐引擎,它使用机器学习(ML)算法来个性化推荐,但软件本身是使用传统的敏捷方法开发、测试和部署的。

使用AI增强技术构建的AI增强系统——这个象限代表了AI增强的最高点,系统操作和SDLC的AI增强程度都很高。一个例子是自动驾驶汽车系统,它使用ML算法进行导航和决策制定,同时也使用AI驱动的代码生成器、代码审查和修复工具、单元测试生成和DevOps工具进行软件开发、测试和部署。

这篇博客文章主要关注LLMs在右下角象限(即使用AI增强SDLC技术构建的常规系统)的影响。未来的博客文章将讨论其他AI增强的象限。

使用LLMs执行特定的软件开发生命周期活动

围绕使用LLMs进行软件开发的初始炒作已经开始降温,期望现在更加现实。对话已经从期望LLMs取代软件开发人员(即人工智能)转变为考虑LLMs作为合作伙伴,并集中考虑如何最好地应用它们(即增强智能)。提示的研究是LLMs已经如何影响软件工程的早期例子。提示是给LLM的指令,以执行规则、自动化流程,并确保生成输出的特定质量(和数量)。提示也是一种编程形式,可以定制化LLM的输出和交互。

提示工程是一门新兴学科,研究与新兴LLM计算系统的交互和编程,通过自然语言接口解决复杂问题。这门学科的一个关键组成部分是提示模式,它们类似于软件模式,但专注于捕获与LLMs交互时遇到的问题的可重用解决方案。这些模式将LLM交互的研究从个别的临时示例提升到一个更可靠和可重复的工程学科,该学科正式化并编目基本的提示结构、它们的能力和它们的影响。

许多软件工程任务可以通过使用更复杂的工具受益,包括LLMs,辅以相关的提示工程策略和更复杂的模型。让我们暂时假设我们已经解决了棘手的问题(如信任、伦理和版权所有权),因为我们列举了LLMs可以在软件开发任务中创造生产力进步的潜在用例,风险可控:

·分析软件生命周期数据——软件工程师必须审查和分析大型项目仓库中的许多类型的数据,包括需求文档、软件架构和设计文档、测试计划和数据、合规性文档、缺陷列表等,以及软件生命周期中的许多版本。LLMs可以帮助软件工程师快速分析这些大量信息,以识别人类难以以同样的可扩展性、准确性和努力找到的不一致性和差距。

·分析代码——使用LLMs和提示工程模式的软件工程师可以以新的方式与代码交互,寻找差距或不一致性。通过基础设施即代码(IaC)和代码即数据的方法,如CodeQL,LLMs可以帮助软件工程师以新的方式探索代码,这考虑了多种来源(从需求规范到文档到代码到测试用例到基础设施)并帮助找到这些不同来源之间的不一致性。

·即时开发人员反馈——LLMs在软件开发中的应用已经受到了一些应得和不应得的怀疑。虽然像Copilot这样的当前AI助手生成的代码可能会引起更多的安全问题,但随着LLMs在更彻底审查的数据集上进行训练,这些问题将随着时间的推移而改善。在开发人员编写代码时提供语法纠正也有助于减少代码符合性检查所花费的时间。

·改进测试——开发人员经常简化生成单元测试的任务。通过AI支持的工具轻松生成有意义的测试用例可以增加整体测试的有效性和覆盖率,从而帮助提高系统质量。

·软件架构开发和分析——早期采用者已经使用设计词汇驱动的提示来指导使用LLMs生成代码。使用多模型输入通过图像或图表以及支持文本来沟通、分析或建议软件设计的片段是未来研究的一个领域,这可以帮助增强软件架构师的知识和影响力。

·文档化——LLMs在软件开发过程中对文档工件的应用范围很广,从合同语言到监管要求和棘手代码的内联注释。当LLMs被赋予特定数据,如代码时,它们可以创建连贯的评论或文档。反之亦然,当LLMs被赋予多个文档时,人们可以使用提示工程向LLMs查询,以快速生成摘要甚至回答特定问题。例如,如果软件工程师必须遵循一个不熟悉的软件标准或软件采购政策,他们可以向LLM提供软件标准或政策文件,并使用提示工程进行总结、记录、提出具体问题,甚至要求示例。LLMs加速了工程师的学习,他们必须使用这些知识来开发和维护依赖软件的系统。

·编程语言翻译——遗留软件和棕地开发是今天许多系统开发和维护的常态。组织通常在需要现代化其系统时探索语言翻译工作。虽然一些好的工具支持语言翻译,但这个过程可能是昂贵且容易出错的。可以使用LLMs将代码片段翻译成其他编程语言。以增加的准确性和速度执行此类翻译,为开发人员提供了更多时间来填补其他软件开发空白,如专注于重新架构和生成缺失的测试。

使用LLMs推进软件工程

生成性人工智能真的代表了软件开发的未来高效生产力吗?大量进入软件开发自动化领域的产品,包括(但不限于)AI编码助手工具,如Copilot、CodiumAI、Tabnine、SinCode和CodeWhisperer,都以这一承诺定位其产品。对于软件工程社区来说,机会(和挑战)在于发现基于LLM的AI助手的快速改进是否根本改变了开发人员参与和执行软件开发活动的方式。

例如,一个AI增强的SDLC(软件开发生命周期)可能与当前的敏捷和迭代开发工作流程的任务流程、效率和障碍有所不同。特别是,与其将开发步骤视为需求、设计、实现、测试和部署,不如LLMs可以将这些任务捆绑在一起,特别是当与最近的基于LLM的工具和插件(如LangChain和ChatGPT高级数据分析)结合使用时。这种整合可能会影响交接的次数和发生地点,转移SDLC内的任务依赖性。

尽管对LLMs的兴奋情绪仍在持续,但陪审团对于由生成性AI工具和其他自动化方法和工具支持的AI增强软件开发是否能够实现以下雄心勃勃的目标仍然没有定论:

·资源需求和错误率减少10倍或更多

·支持开发人员管理复杂系统中变更的连锁反应

·减少对广泛测试和分析的需求

·以所需的一小部分努力将DoD(美国国防部)的代码库从内存不安全语言现代化到内存安全语言

·支持认证和保证考虑,知道存在不可预测的新兴行为挑战

·通过增加自动化,支持对日益增长的软件规模和复杂性的分析

即使上述目标的一小部分得以实现,它也将影响SDLC中的活动流程,可能会促进和加速软件工程中的左移行动。软件工程社区有机会通过直接了解LLMs的工作原理,并通过提出如何有效和合伦理地使用它们的关键问题,来塑造未来关于开发和应用LLMs的研究。

在软件工程中应用LLMs时需要考虑的警告

在将LLMs应用于软件工程时,也必须承认其缺点。LLMs在构建输出时,下一个字的选择是概率性和随机的,这可能会给最终用户留下正确性的印象,然而内容经常包含错误,这些错误被称为“幻觉”。对于那些盲目应用LLMs生成的输出而不花时间和精力验证结果的人来说,幻觉是一个重大的担忧。虽然模型最近已经取得了显著改进,但其生成和使用周围仍有几个需要谨慎的领域,包括:

·数据质量和偏见 - LLMs需要大量的训练数据来学习语言模式,它们的输出高度依赖于它们所训练的数据。训练数据中存在的任何问题,如偏见和错误,都会被LLMs放大。例如,ChatGPT-4最初是训练到2021年9月的数据,这意味着该模型的建议直到最近才不知道过去两年的数据。然而,训练数据的质量和代表性对模型的性能和泛化能力有显著影响,因此错误很容易传播。

·隐私和安全 - 隐私和安全是使用LLMs的关键问题,特别是在DoD(美国国防部)和情报界等环境中,信息通常受到控制或分类。大众媒体充斥着泄露专有或敏感信息的例子。例如,三星的工人最近承认,他们无意中向ChatGPT披露了机密数据和代码。在敏感环境中应用这些开放模型不仅存在产生错误结果的风险,还可能无意中泄露机密信息并将其传播给他人。

·内容所有权 - LLMs是使用他人开发的内容生成的,这些内容可能包含专有信息和内容创作者的知识产权。在推荐输出中使用这些数据进行训练,就会产生抄袭的担忧。一些内容是模板化的,能够以正确和可理解的方式生成输出,这为提高效率创造了机会。然而,其他内容,包括代码,不易区分是人类还是机器生成的,特别是在个人贡献或认证等问题重要的情况下。从长远来看,LLMs的日益普及可能会在数据共享和开源软件以及开放科学周围创建界限。在最近的一个例子中,日本政府确定,用于AI训练的数据上的版权是无法执行的。可能会出现指示所有权或甚至防止某些数据被用来训练这些模型的技术,尽管这些补充LLMs的技术和属性尚未广泛传播。

·碳足迹 - 训练深度学习模型需要大量的计算能力,这引起了对碳足迹影响的担忧。不同训练技术、算法效率和计算资源分配的研究可能会增加。此外,预计改进的数据收集和存储技术最终将减少LLMs对环境的影响,但这些技术的开发仍处于早期阶段。

·可解释性和意外后果 - 深度学习和机器学习模型的可解释性是AI中的一个普遍问题,包括(但不限于)LLMs。用户希望理解建议背后的理由,特别是如果这些模型将用于安全、任务或业务关键环境中。依赖数据质量以及无法将建议追溯到源头增加了信任问题。此外,由于LLM训练序列是使用随机概率方法生成的,因此建议正确性的可解释性带来了额外的挑战。

在LLMs中的研究和创新领域 本文中描述的与LLMs相关的警告和风险激发了对新研究和创新的需求。我们已经开始看到对基础模型的研究重点在增加。其他研究领域也在出现,例如创建具有最新LLM能力的集成开发环境,以及针对软件工程的数据收集和使用技术的可靠性。以下是与软件工程相关的一些研究领域,预计在不久的将来会看到显著的关注和进展:

·加速上游软件工程活动 - LLMs在文档相关活动中的潜力扩展到软件采购前期文件准备和后期报告及里程碑活动。例如,LLMs可以作为解决问题的工具,帮助团队评估软件依赖采购计划的质量和性能,通过帮助采购者和开发者分析与源选择、里程碑审查和测试活动相关的大量文档库。

·模型的泛化能力 - LLMs目前的工作方式是在大量内容上预训练,然后对特定任务进行微调。尽管LLM的结构是独立于任务的,但其在特定任务中的应用需要进一步用大量示例进行微调。研究人员已经在关注将这些模型泛化到数据稀疏的应用中(称为少样本学习)。

·新型智能集成开发环境(IDE) - 如果我们被初步证据所说服,认为某些编程任务可以通过基于LLM的AI助手加速并提高正确性,那么传统的集成开发环境(IDE)将需要整合这些助手。这一过程已经开始,将LLMs整合到流行的IDE中,如Android Studio、IntelliJ和Visual Studio。当智能助手被整合到IDE中时,软件开发过程变得更加与工具基础设施互动,同时需要开发人员更多的专业知识来协助审查结果。

·创建特定领域的LLMs - 鉴于训练数据的限制和潜在的隐私和安全问题,能够训练特定于某些领域和任务的LLMs提供了一个管理安全、隐私和专有信息风险的机会,同时获得生成性AI能力的好处。创建特定领域的LLMs是一个新的前沿,有机会利用LLMs,同时减少幻觉的风险,这在医疗保健和金融领域尤其重要。FinGPT是一个特定领域LLM的例子。

·数据作为计算单元 - 推动下一代AI创新的最关键的输入不仅仅是算法,还有数据。因此,相当一部分计算机科学和软件工程人才将转移到数据科学和数据工程职业。此外,我们需要在数据收集、数据质量评估和数据所有权权利管理方面有更多的工具支持创新。这一研究领域存在重大差距,需要跨越计算机科学、政策和工程的技能,以及在安全、隐私和伦理方面的深入知识。

在软件工程中LLM创新的未来之路

在20世纪70年代末和90年代初的两次AI寒冬之后,我们不仅进入了AI蓬勃发展的时期,而且在资金、使用和对AI的担忧方面也呈现出指数级增长。LLMs的进步无疑是这三个方面增长的巨大贡献者。AI支持的软件工程创新的下一阶段是否包括超出我们想象的能力,或者它是否成为又一次AI寒冬,在很大程度上取决于我们的能力:继续技术创新;以最高水平的道德标准和负责任的行为实践软件工程和计算机科学。在尝试利用LLMs的潜力改善软件开发时,我们必须大胆,但同时也要谨慎,不能忘记工程伦理、严谨性和经验验证的根本原则和实践。

如上所述,在将LLMs应用于软件工程的创新研究中存在许多机会。在SEI(软件工程研究所),我们正在进行的倡议包括确定与DoD(美国国防部)相关的场景,试验LLMs的应用,以及推动将生成性AI技术应用于软件工程任务的界限。我们将在未来几个月报告我们的进展。在软件工程生命周期中应用LLMs的最佳机会可能是在发挥LLMs优势的活动中,这是我们将在即将推出的博客中详细探讨的主题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文英文原文来自SEI blog,由KIMI翻译
    • LLMs及其对软件工程未来潜在影响
      • 使用LLMs执行特定的软件开发生命周期活动
        • 使用LLMs推进软件工程
          • 在软件工程中应用LLMs时需要考虑的警告
            • 在软件工程中LLM创新的未来之路
            相关产品与服务
            CODING DevOps
            CODING DevOps 一站式研发管理平台,包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档