生成式 AI 可以帮助改进软件开发的 7 种方法

Alan Zeichick | 高级撰稿人 | 2024 年 10 月 8 日

生成式 AI 既能效仿莎士比亚的风格创作十四行诗,又能根据原始数据和分析结果起草可行的商业计划。只要输入正确数据并经过充分训练,GenAI 甚至可以帮助构思产品概念、创作朗朗上口的广告曲、设计徽标,并制定包含定价建议的完整营销方案。因此,让 GenAI 协助软件开发团队贯穿整个开发生命周期,甚至用 Java、C++、JavaScript、SQL 或组织偏好的任何语言编写代码,并非难事。

对 GenAI 系统来说,编写代码与用英语、西班牙语或拉丁语写一首具有特定格律音韵的诗歌并无二致。而使用 GenAI 辅助软件开发蕴含巨大机遇:PwC 分析师指出,开发团队使用 GenAI 代码生成工具,当下即可实现 20% 到 50% 的性能提升。让我们一探其运作机制。

什么是生成式 AI?

生成式人工智能 (GenAI) 是一项快速发展的技术,能够根据训练数据进行推理,帮助生成新内容。GenAI 模型的工作原理是:先创建一个通过软件编码实现的人工神经网络,再利用该网络开展工作。许多神经网络包含数十亿甚至数万亿个特定参数(即值),这些参数通过处理海量数据进行“训练”。值得庆幸的是,一旦接受过足够大且多样化的功能性、安全高效的代码示例训练后,更高效的模型便能成为出色的程序员。

在训练过程(这一过程会生成一个大型语言模型,即 LLM)中学习编写代码时,GenAI 系统会尝试预测下一个命令是什么。然后,它会测试该预测:如果预测正确,神经参数会以一种方式进行调整;如果预测错误,参数会以另一种方式进行调整。经过充分的迭代后,GenAI 系统可以基于训练数据高效辅助生成结果。然后,当准确性满足需求时,GenAI 系统就开始根据输入参数(即提示词)生成新代码。如果表现良好,即可投入使用。如果未达标,则需由 AI 科学家排查问题根源。

好消息是,您无需自行开发专注于代码的 LLM。工具提供商已经为您完成这项工作。

关键要点

  • GenAI 在学习具有严格语法和规则的编程语言方面非常高效。
  • 培训 GenAI 成本高昂且耗费资源,但部署后系统能显著降低资源消耗。
  • 基于 GenAI 的开发工具既可以作为单个软件开发人员的助手,也可以成为团队的完整成员。

软件开发中的生成式 AI 详解

截止本文撰写时,不要指望通过描述一个复杂的程序,就能让 GenAI 系统根据提示词输出一个完整的、可直接使用的应用。我们还没达到那个阶段。但是,GenAI 工具正被用于增强企业开发团队的工作效率,帮助他们提升代码质量和个人生产力。您可以将 GenAI 视为团队中的一员,承担一个或多个角色。

  • 团队可以使用通用的 GenAI 来帮助描述问题,并创建开发人员可遵循的项目计划。
  • 人类可以指示 GenAI 生成测试用例,这些用例可用于评估人工编写的代码的质量。
  • GenAI 系统可以帮助生成样板代码或代码片段,供开发人员定制、完善或整合至其他代码模块。
  • GenAI 的一个常见用途是帮助保证质量,在将代码纳入软件配置管理系统之前检查代码是否存在错误或安全漏洞。系统可以根据外部标准(如企业编码标准或 OWASP Top 10 安全漏洞列表)检查代码库并突出显示问题。
  • GenAI 系统可帮助设计复杂系统的架构,例如使用微服务的架构。
  • GenAI 可以帮助审查现有代码,提出性能改进或其他代码重构想法。它还可以分析陈旧的“意大利面式”混乱代码,并帮助描述其功能。
  • 当部署的代码无法正常工作时,正确的提示词可能有助于 GenAI 查找缺陷的根本原因并提供补救措施。
  • GenAI 可以通过识别开发人员的错误并教授更好的技术,助力个人提升技能。

为什么 GenAI 对软件开发很重要?

生成式 AI 对软件开发非常重要,因为它可以帮助开发团队在软件开发生命周期的每个阶段提高工作效率。这点尤为关键,因为现代企业完全依赖软件运行,这一点毋庸置疑。其中许多软件(包括文字处理器、电子表格以及会计和人力资源系统)都是现成的。但真正的竞争优势源于为后端运营、网站、数据库、移动应用等定制开发软件。

挑战在于:高质量代码需要时间和专业知识才能创建,无论是依靠内部开发人员还是承包商。当需要开发新应用来把握机遇或应对挑战时,通常会有大量积压的项目排队等待。招聘更多开发人员是一个缓慢的过程,入职培训也同样耗时。而时间就是金钱。借助 GenAI,新想法可以更快投入生产,这有助于开源节流,提高员工和客户满意度,并有助于组织履行其使命。

GenAI 在软件开发中的潜在优势

GenAI 可以成为企业软件开发团队的宝贵补充,与帮助开发人员的工具一样,您的组织可以定义、衡量和评估这些改进。所有使用现代技术(例如 GitHub 或源代码管理系统)的开发平台都会定期收集有关开发人员和团队的绩效指标,例如每日代码行数和代码质量。

那些在项目规划、架构设计、代码分析和问答环节全程融入 GenAI 的开发团队,通常会发现他们的工作效率显著提升。以下是 GenAI 提供的一些帮助:

  • 提高生产率。代码和测试用例通常由 AI 生成,然后由人工审核,这比单靠人工完成整个流程速度更快。
  • 减少错误。GenAI 系统可以帮助生成缺陷更少的代码,例如使用错误的变量名或忘记初始化指针。在重复性日常任务中,经验丰富的开发者容易产生倦怠感,此时该优势尤为显著。
  • 提高代码质量。GenAI 可以帮助进行代码审查,识别逻辑错误、安全漏洞或代码可能未能反映业务场景需求的地方。
  • 快速创建原型。GenAI 可以帮助创建模型代码,虽然可能不适用于生产环境,但可以作为概念证明向利益相关者展示。
  • 降低非开发人员的开发门槛。GenAI 让非开发人员可以通过在聊天窗口中用自然语言输入需求来创建简单程序。

GenAI 如何帮助软件开发?

生成式 AI 可以通过提高开发人员个人和团队的工作效率来助力企业软件开发,从而更快地创建质量更高的软件。其特别擅长的领域包括定义软件架构、制定产品计划以及生成代码。

GenAI 在处理重复性任务方面同样表现出色,能生成适用于多种程序的通用代码(所谓的样板代码),开发人员可以据此进行定制和完善或者复用。GenAI 还可以帮助审查软件源代码中的缺陷和潜在问题,例如安全漏洞以及代码功能可能偏离用户要求或公司标准的情况。

GenAI 可以帮助改进软件开发的 7 种方法

在许多领域中,基于 GenAI 的开发工具可以作为单个企业软件开发人员的助手,也可以作为团队的完整成员。以下是该技术目前可以提供帮助的几个更常见的领域,涵盖从软件设计到软件部署的各个环节。

1. Bug 检测和调试。GenAI 系统能高效地帮助识别和修复代码中的错误,或者提供修复建议。当然,围绕缺陷修复已经形成了完整的产业;开源和商业工具可以扫描源代码以发现安全或功能缺陷,包括仅在系统高负载时才会触发的隐蔽错误、内存泄漏、多线程执行问题、尝试访问受保护的内存等问题。

GenAI 可以通过多种方式为 bug 修复增值。首先,它可以使用提示词来帮助分析代码是否符合开发人员或利益相关者的预期,因为即使代码编译运行无误,也可能无法执行正确的操作或返回期望的结果。其次,GenAI 可以帮助总结传统工具的缺陷报告,帮助测试团队和开发人员了解隐蔽错误,发现错误代码模式,并提出解决方案。

2. 代码生成。GenAI 可以根据提示词或规范自动编写代码。如前所述,GenAI 在短期内不太可能生成复杂的业务应用。然而,它可以帮助创建开发人员可以完善的样板代码,以及实现复杂算法、进行困难的过程调用或访问外部资源的代码片段。

例如,许多开发人员知道如何使用 SQL 读取、写入和更新数据库信息。但是,编写 SQL 存储过程需要技巧,这类存储过程需要能够处理复杂的数据库表并在海量数据集上高效运行。GenAI 工具可以使用提示词帮助程序员表达数据库访问需求,然后提供一个建议的 SQL 调用或过程,程序员可以将其复制粘贴到应用中。

3. 代码审查。GenAI 可帮助审查代码质量、安全性以及是否遵循优秀实践。代码审查是软件开发过程的一个重要环节,团队通过集体审阅复杂代码(投影在屏幕或大型显示器上),旨在验证其功能是否正常并提出改进建议。开发人员常因代码审查感到压力,尤其是在面对只挑毛病的资深软件工程师时。代码审查也非常耗时,许多人只想草草了事,导致审查不够严谨。

GenAI 可以引导开发人员进行初步代码审查来帮助发现明显错误,既能帮助初级开发人员学习成长,又能加快面对面审查的过程。GenAI 还可作为团队代码审查成员参与其中,突出显示需要重点关注的部分,甚至提供优化建议。

4. 文档。AI 可以自动生成或优化代码库的文档。即便初衷再好,开发人员在回顾几个月前编写的软件时也很容易问自己:“我当时到底在想什么?”正因如此,文档在许多层面都至关重要,包括完整项目架构的阐述,以及特定模块或微服务功能的说明。在模块与服务内部,文档能阐明开发人员在库、API 和算法选择中的决策依据,尤其是有多种选择时。当初的考量必然有其道理,只是现在记不清了?GenAI 可以在编码过程中主动询问开发人员决策逻辑,并将这些解释转化为易于理解的文档。

此外,当 GenAI 用于辅助生成代码本身时(参见上文第 2 点),它还能编写完整的文档,阐明代码片段或微服务的功能及正确使用方式。

5. 学习和培训。GenAI 可即时提供示例和解释,帮助开发人员提升技能。软件开发人员(即便是优秀的程序员)都在持续学习。新技术层出不穷,如人工智能和微服务;新工具、新语言特性、新设计模式、新安全漏洞、新企业标准和优秀实践,乃至新合规要求,不断涌现。

尽管有大量课程、内部培训和导师指导,但持续的即时帮助仍弥足珍贵。当开发人员尝试使用已弃用的功能或过时的 API 时,GenAI 能自动识别困境并提供即时的个性化培训。当开发人员不知道或不记得如何执行新的或不常用的任务时,它还可以通过提示词提供即时指导。这如同定制化的帮助界面,精准匹配具体情境。

6. 代码重构。GenAI 可以帮助优化和重构现有代码以提升性能。代码重构是软件开发生命周期中的关键环节:通过对代码段进行改造,在不改变其功能的前提下,提升运行效率。这可能意味着提高速度和可扩展性、降低内存消耗、更新算法、利用新的微处理器快捷方式,或使用新的语言指令。开发人员使用运行时指标来发现那些运行缓慢、资源消耗过高或导致端到端延迟的代码段,并针对这些问题进行代码重构。

代码重构堪称 GenAI 代码生成的理想场景,开发人员只需将有问题的代码输入系统,简单问一句:"能否生成运行更快的版本?”虽然我们的描述过于简单,但通过观察代码的功能和运行机制,GenAI 凭借其预测能力往往能找到更优解。更重要的是,由于旧代码和重构后的代码可以进行对比和基准测试,因此既能轻松评估代码重构带来的好处,又能验证底层功能确实未发生改变。

7. 测试。GenAI 可帮助创建测试用例、自动执行测试流程以及模拟边缘情况。不同的方法论对软件测试过程有自己独特的见解。例如,测试驱动开发 (TDD) 主张在编写任何代码前先创建测试用例,以确保所编写的代码能正常运行。在其他方法中,开发团队可能会在冲刺结束时进行测试;还有些方法中,有专门的测试团队进行测试。利益相关者在测试中的角色至关重要,并且因方法而异:有时需全程参与,有时仅需审核候选版本。

GenAI 在测试和测试管理方面可发挥多种作用。除已提及的 bug 检测外,GenAI 还能帮助编写可作为自动化测试工具的脚本,这对许多开发人员来说是一个繁琐的过程。这类 GenAI 增强工具还能帮助测试边缘情况,即那些发生概率极低但代码模块、存储过程或微服务仍需妥善处理的特殊情况。此外,GenAI 还可以帮助审查测试用例(包括人工编写的测试用例),评估其有效性及覆盖范围,确保涵盖所有可能情况,包括错误状态和运行时代码破解尝试。

GenAI 在软件开发领域的未来发展

棒球巨星 Yogi Berra 曾说:“做预测很难,尤其是对未来的预测。”生成式 AI 是一个新兴领域:该技术的第一个例子直到 2020 年代初才出现,例如专注于生成文本的 ChatGPT 和用于创建图像的 DALL-E。许多消费者和企业高管大约在 2022 年开始关注 GenAI — 距今不过两年。

无论您如何看待 GenAI,这项技术仍处于早期阶段,毫无疑问,未来必将在软件开发等领域催生全新商业应用场景。

但我们不妨大胆预测:未来几年会发展成什么样子呢?

首先,GenAI 将全面提升现有能力,在代码生成、质量保证、文档编写以及测试用例创建等环节为开发团队提供更优质支持。GenAI 可能变得更具对话性,能够更好地与开发人员和非开发人员互动,引导其完成需求定义流程,进而将需求转化为项目计划、文档、测试用例和代码。

如果我们真的能够预测未来,或许有些软件根本无需编写。业务用户只需告诉 GenAI 系统他们想要完成的任务,软件就会自动生成能精准完成该任务的临时应用。无论 GenAI 在软件开发领域的发展前景如何,对于积极拥抱这项技术的企业来说,它很可能将带来巨大的价值。

利用 Oracle 的 GenAI 开发力量

Oracle 的生成式 AI 现已推出,其强大的功能已嵌入到业务应用(例如 Fusion 和 NetSuite)中,并内置于 Oracle Database 23ai 中 。

一个令人兴奋的探索领域是如何使用 GenAI 和 Oracle APEX 进行低代码应用开发,借助新功能 APEX AI Assistant 来帮助开发人员完成复杂任务。更广泛而言,您可以注册 Oracle Cloud Infrastructure (OCI) 账户,获得免费云储值,试用包括 GenAI 在内的 Oracle AI 服务。开始免费试用

作为新兴技术,生成式 AI 在软件开发领域的应用前景无限。您的开发人员很可能会发现 GenAI 不仅是得力助手,更将成为不可或缺的核心成员。

借助当今的 AI 服务,开发人员无需成为 AI 专家,即可训练定制模型、部署现成的机器学习工具,并为应用和解决方案注入 AI 能力。通过我们的 10 个真实 AI 项目快速启动您的下一个用例。

软件开发中的 GenAI 常见问题解答

如何在编程中使用生成式 AI?

GenAI 可应用于软件开发过程的多个环节。对于编程,GenAI 必须针对项目使用的特定编程语言进行训练。向系统提供非常具体的指令(称为提示词)来描述您希望完成的任务,它应该能够生成可编译运行的完整源代码,或者生成可以添加到源代码管理系统或在线存储库(如 Github)中的代码。

我可以使用 AI 构建软件吗?

您可以通过多种方式使用 GenAI 构建软件。它可以帮助生成代码,不过在当前技术发展阶段,生成的代码只能执行相对简单的功能。至少目前,GenAI 的真正价值在于帮助开发团队完成项目规划、架构设计、测试用例生成、代码审查和文档编写等任务。

AI 将在软件开发领域带来哪些挑战?

GenAI 仍然是新兴技术,尤其是在开发团队内部的应用方面。主要的挑战或许在于如何让持怀疑态度的开发人员接受这项技术,他们安于现状,抵触工作方法、工具链和流程的改变。也可能有人将 GenAI 视为影响职业生涯的潜在威胁。

除此之外,每个组织还需要建立对 GenAI 软件的信心。代码是否可靠、安全且高效?测试用例是否准确,能否实现全面代码覆盖?文档是否满足要求?GenAI 辅助软件开发的初始阶段将主要以实验为主。如果技术应用得当,应能大幅提升开发人员的生产力,更快、更低成本地将更优质的软件投入生产,助力组织履行其使命。

最后,关于 AI 生成代码的所有权和可保护性,法律仍在不断发展。能否为部分代码由 AI 生成的软件注册版权?如果使用商业 GenAI 系统,其服务条款是否要求您将任何输出授权给模型所有者?在开始使用 GenAI 进行软件开发之前,务必深入研究这些法律问题。。

注:为免疑义,本网页所用以下术语专指以下含义:

  1. 除Oracle隐私政策外,本网站中提及的“Oracle”专指Oracle境外公司而非甲骨文中国。
  2. 相关Cloud或云术语均指代Oracle境外公司提供的云技术或其解决方案。