由于依赖于大型语言模型(LLM)的 GitHub Copilot 等工具的出现,自动编程越来越受欢迎。同时,由于对质量和信任的担 忧,自动生成的代码在部署过程中面临挑战。在本文中,我们研究了一般意义上的自动化编码,并研究了围绕代码质量、安 全性和程序员责任相关问题的问题。这些是组织在决定使用自动生成的代码时的关键问题。我们讨论了软件工程的进步,如 程序修复和分析,如何实现自动编程。最后,我们以前瞻性的观点结束,重点关注不久的将来的编程环境,程序员可能需要 切换到不同的角色才能充分利用自动编程的力量。自动修复从 LLM 自动生成的程序,可以帮助从 LLM 生成更高的保证代 码,以及保证的证据。 在过去的 50 到 60 年里,无论是在意图捕获(捕获用户的愿望)方面,还是在生成正确的代码—方面,编程任 务都占据了计算机专业的大部分时间。在建模和系统设计方面取得了重大进展,以支持准确的意图捕获,从而 导致形式规范的增长。然而,尽管取得了所有进展,但软件工程师不愿意编写正式的规范,对于大型软件系统 来说,没有正式的意图描述—导致调试和修复错误的巨大困难。自动化程序修复领域在微观代码生成方面显示 出前景。关键问题是如何信任自动生成的代码。 从大型语言模型(LLM)自动生成代码的最新发展使自动编码中的信任问题更加突出。这不仅引发了自动生 成代码正确性的整体问题,而且提出了我们何时可以开始信任自动生成的代码以将其集成到我们的代码库中。 在过去的几十年里,利基行业已经从模型中生成了代码,但是没有从自然语言规范中自动生成代码被广泛使 用的先例。在本文中,我们将彻底讨论此类自动生成代码的信任问题。虽然本文的直接动机是研究大型语言模 型(LLM)代码中的信任问题,但我们在本文中更广泛地研究了自动化编程的主题。 我们注意到,越来越多的组织正在转向自动生成代码,即使除了大型语言模型的普及之外。最近在 Oracle CloudWorld 2023 [? ] 上的主题演讲中提到,Oracle 正在考虑放弃用 Java 编写软件,而是用一种称为 Apex 的语 言自动为新软件项目生成代码。Apex 是一个著名的低代码应用程序平台,用于从应用程序页面中组装应用程 序。这种向低代码的转变带来了其他好处,例如轻松实现软件项目的安全审计。总的来说,我们注意到自动编 程超越了大型语言模型的使用,并且隐含地包括了 低代码无代码 应用程序开发增长的最新趋势。 由于最近对自动编程的兴趣,与自动生成的代码相关的一系列问题受到了广泛的关注。除了正确性之外,还 存在对代码的安全性、隐私性和可解释性的担忧——尤其是当从大型语言模型生成时。务实地说,当包含自动 生成代码的软件项目失败时,人们可能仍然担心“推卸责任”。为了理解潜在的问题,我们可以在应用软件和 系统软件之间的交互之间进行类比,这导致了众所周知的 应用程序兼容性 (通常被开发人员称为 appcompat )问题(例如,参见 [? ] )。通常,由于操作系统(OS)等系统软件的版本更改,在操作系统上运行的特定应 用程序(如 PDF 阅读器)可能会失败。但是,这不一定是由于操作系统本身。这可能是由于对应用软件和操作系统之间 期望 的错误理解。同样,当自动生成的代码和手动编写的代码在软件项目中共存时,由于错误地理 解了不同软件组件之间的期望,错误可能会悄然出现。 因此,在本文中,我们将研究当我们将自动生成的代码集成到软件项目中时,信任边界如何变化。研究界可 能感兴趣的技术问题之一是将 LLM 生成的代码集成到软件项目中的可接受性标准。正如最近提出的 SWEbench [? ] 中所阐述的那样,程序分析工具增强了 LLM 在自动化关键编程任务(如错误修复和功能添加)方面的能力 也值得研究。通过系统地使用程序修复 [? ] ,从 LLM 自动生成的代码的最后一英里改进仍然是一个探索的可 能性 [? ] 。这种倒数第二个自动修复策略可以帮助提供正确性的具体证据(例如通过精选测试),从而建立对 接受 LLM 生成的代码进入代码存储库的信心。 我们还研究了 LLM 在自动化非代码工件和流程(如测试生成、代码审查和代码摘要)方面的影响。更重要 的是,从人类与 LLM 交互的角度来看,我们试图在未来的日常编程中提供一种新兴的新前景。传统上,当正 式规范不可用时,软件工程师会求助于 程序理解 或规范推理来理解复杂软件系统的功能。当软件系统不是作 为整体工件构建的,而是通过不同团队的合作或通过开源贡献进行组装时,这种做法尤其重要。 我们注意到,传统的程序理解问题是由人类完成的,可能涉及使用分析/调试工具来理解复杂软件系统的工 作。在 LLM 驱动的编程时代,我们可以假设一个 新的理解问题 - 基于自然语言要求,LLM 由程序分析工具增 强,可以自动执行大部分理解任务。在理解过程的不同阶段,可以有结构化的规定来咨询人类以消除需求的歧 义。研究这种人类与 LLM 协作的机制,并为 LLM/分析器向人类程序员咨询提供足够的原语,可以为我们指明 不久的将来的编程环境。我们还强调了自动生成的代码的自动程序修复的可能性,作为可信自动编程的灵活 机制。这些可能会在 2030-35 年及以后的未来编程环境中发挥作用。 https://arxivtools.blob.core.windows.net/xueshuxiangzipaperhtml/2024_5_6/2405.02213.pdf

成为VIP会员查看完整内容
34

相关内容

多语言大型语言模型:资源、分类和前沿综述
专知会员服务
47+阅读 · 4月9日
大型语言模型的模型压缩与高效推理:综述
专知会员服务
77+阅读 · 2月17日
大型语言模型在软件工程:调查与待解决的问题
专知会员服务
73+阅读 · 2023年10月6日
可解释的机器学习模型和架构
专知会员服务
88+阅读 · 2023年9月17日
KnowledGPT:基于知识库的检索和存储访问增强大型语言模型
面向自然语言处理的知识图谱嵌入:从理论到实践
专知会员服务
51+阅读 · 2022年10月16日
基于模型的强化学习综述
专知
27+阅读 · 2022年7月13日
[CVPR 2021] 序列到序列对比学习的文本识别
专知
10+阅读 · 2021年4月14日
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
NLP实践:对话系统技术原理和应用
AI100
34+阅读 · 2019年3月20日
自然语言处理中的语言模型预训练方法
PaperWeekly
14+阅读 · 2018年10月21日
深度学习超参数搜索实用指南
云栖社区
28+阅读 · 2018年10月14日
MNIST入门:贝叶斯方法
Python程序员
23+阅读 · 2017年7月3日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
6+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
2+阅读 · 2015年12月31日
国家自然科学基金
3+阅读 · 2014年12月31日
国家自然科学基金
1+阅读 · 2014年12月31日
国家自然科学基金
8+阅读 · 2014年12月31日
国家自然科学基金
15+阅读 · 2013年12月31日
A Survey of Large Language Models
Arxiv
395+阅读 · 2023年3月31日
Arxiv
66+阅读 · 2023年3月26日
Arxiv
137+阅读 · 2023年3月24日
Arxiv
19+阅读 · 2023年3月17日
VIP会员
相关VIP内容
多语言大型语言模型:资源、分类和前沿综述
专知会员服务
47+阅读 · 4月9日
大型语言模型的模型压缩与高效推理:综述
专知会员服务
77+阅读 · 2月17日
大型语言模型在软件工程:调查与待解决的问题
专知会员服务
73+阅读 · 2023年10月6日
可解释的机器学习模型和架构
专知会员服务
88+阅读 · 2023年9月17日
KnowledGPT:基于知识库的检索和存储访问增强大型语言模型
面向自然语言处理的知识图谱嵌入:从理论到实践
专知会员服务
51+阅读 · 2022年10月16日
相关资讯
基于模型的强化学习综述
专知
27+阅读 · 2022年7月13日
[CVPR 2021] 序列到序列对比学习的文本识别
专知
10+阅读 · 2021年4月14日
初学者的 Keras:实现卷积神经网络
Python程序员
24+阅读 · 2019年9月8日
NLP实践:对话系统技术原理和应用
AI100
34+阅读 · 2019年3月20日
自然语言处理中的语言模型预训练方法
PaperWeekly
14+阅读 · 2018年10月21日
深度学习超参数搜索实用指南
云栖社区
28+阅读 · 2018年10月14日
MNIST入门:贝叶斯方法
Python程序员
23+阅读 · 2017年7月3日
相关基金
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
6+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
2+阅读 · 2015年12月31日
国家自然科学基金
3+阅读 · 2014年12月31日
国家自然科学基金
1+阅读 · 2014年12月31日
国家自然科学基金
8+阅读 · 2014年12月31日
国家自然科学基金
15+阅读 · 2013年12月31日
微信扫码咨询专知VIP会员