上个世纪90年代,当人们提起软件编程时,通常意味着选择一个编辑器,将代码检入CVS或SVN代码库,然后将代码编译成可执行文件。与之对应的Eclipse和Visual Studio等集成开发环境(IDE)可以将编程、开发、文档、构建、测试、部署等步骤纳入到一个完整的软件开发生命周期(SDLC)中,从而提高了开发人员的工作效率。
近年来,流行的云计算和DevSecOps自动化工具提升了开发者的综合能力,使得更多的企业能够更加轻松地开发、部署和维护软件应用。
如今,生成式AI作为下一代开发范式转变的催化剂,有望改变企业创建和维护软件的方式,并带来新的开发工具和范式。对此,许多开发人员开始疑惑,AI是否会让我们所熟知的编程技能走向消亡。同时,各个企业的IT领导也在考虑:在未来十年中,AI将如何影响SDLC和DevSecOps的发展。带着这两个问题,我将和您在下文中一同寻找答案。
生成式AI是一种新工具,还是一种新的开发方式?
Pulumi的首席执行官Joe Duffy认为:“AI将会增强编程的自动化,大幅提升企业的生产力和产出,从而提高人类操作的抽象水平,而不会真正取代编程。”Thomvest Ventures的负责人Ashish Kakran则认为:“生成式AI正在颠覆软件交付的生命周期。”开发和DevOps团队将变得更具生产力。
同时,随着生成式AI功能的不断完善,开发人员的职责会随之调整。Matillion公司的首席技术官Ed Thompson认为:“Copilots的当前形式,实际上是在提高开发人员的工作效率,消除他们过往的繁忙状态。那些认为Copilots已经从根本上改变了编程江湖的人,是错误地假设了开发人员的工作只是编写代码,而不是解决现实问题。”那么,生成式AI到底在会怎样改变软件开发江湖呢?
1.根据自然语言提示生成标准的代码
Astronomer的Airflow工程总监Kaxil Naik认为:“通过AI生成的代码模板、以及AI辅助的Copilot将自然语言翻译成功能性代码,简化了对复杂代码库的理解,并确保了遵守开发最佳实践,从而将让编程工作变得更加高效。”
StackOverflow的2023年开发者调查显示,有70%的开发者正在或计划在开发过程中使用AI工具。而在那些已经使用AI进行开发的人群中,有超过82%的使用了AI来编写软件代码。这些数字足以表明,开发人员传统的编写代码、重用现有代码、以及构建组件的方式,正在发生模式上的转变。
2.代码验证是开发人员的重要职责
除了让编程变得更加简单和高效,开发人员需要的担负着重要责任是,花费大量的时间、以及使用高效的工具,来验证代码,避免生成的代码存在安全问题、或有性能缺陷。
Sonar的开发者关系部主管Peter McKee认为:“随着开发人员更多地采用AI来提高生产力,他们有责任对AI生成的内容进行全面检查。”通常,边编程边清理,可以确保在交付过程中执行持续的检查和监控。据此,开发人员可以将更多时间花在新的任务上,而无需修复那些人工创建的、或由AI生成的代码里潜在的错误与漏洞。McKee补充说:“如果开发人员未能通过自动化来扫描和监控AI生成的代码,那就意味着后续需要修复的代码和技术债会成倍增加。
3.成为大企业新的开发模式
使用生成式AI工具开发代码,可能会如何影响各个开发团队在大型企业中,支持数千种应用工具和标准。如果开发人员只需编写较少的代码,并更多地与由生成式AI开发的代码相集成,那么大型企业的开发工作会成什么样子?
Red Hat开发工具与战略推广部的Markus Eisele认为:“不同团队的不同工具组合,会导致缺乏标准化和统一的开发实践,更不用说由此增加的开发人员的认知差异。”而由AI构建的集中式开发门户,能够方便开发团队的轻松访问,并通过消除协同过程中的摩擦,来成就跨团队应用的最佳实践。这就意味着集成开发环境可能会蜕变为装配平台,类似于制造业中的计算机辅助设计(CAD)或建筑业中的建筑信息建模(BIM)。其重点将从构建定制组件转移为组装已有组件,以及利用内置工具来验证设计。
4.编程量的减少,代码供应链风险的增加
使用生成式AI开发的代码的另一个影响,是涉及到企业领导者将如何制定相关政策,以及如何监控企业应用中嵌入了哪些供应链的代码。一直以来,企业需要持续跟踪的是开源和商业软件组件。将来,它们需要增加生成式AI的输出这一新的层面。
Sonatype的现场首席技术官Ilkka Turunen认为:“开发人员需要在维护和管理AI供应链方面发挥重要作用。他们将会在企业的日常运营中,对AI模型的安全性、真实性和来源予以更严格的审查。通过实施AI风险评估,并妥善管理AI模型物料清单,企业应确保开发基础架构拥有适当的AI安全和管理。”
在实践中,SAST、DAST、以及其他安全与代码管理工具,能够提高代码扫描的自动化能力,并且可以在开发人员将代码集成到企业资源库之前,协助验证生成式AI的产出代码是否符合安全策略。
5.新模式加速整合
在过去十年中,通过应用程序接口(API)、IFTTT的SaaS集成平台、集成平台即服务(iPaaS)、以及其他生态系统技术,开发人员的代码集成能力有了数量级的提升。尽管如此,开发人员仍然需要做大量的基础性工作,来映射数据字段、编程逻辑转换、以确保可靠性与性能。而利用生成式AI,开发人员可以构建出具备自然语言需求、可视化流程的无代码集成。
供职于SAP AI与创新团队的Emmanuel Cassimatis认为:“过去,从设计、构建、测试、集成、部署、交付到审查,整个开发生命周期中的不同步骤向来是分散的。而AI则可以从不同应用的数据中挖掘并实现一个统一的集成层面,从而加强开发人员之间的协作。”
6.开发人员将成为AI代理的管理者
Honeycomb的首席产品经理Phillip Carter认为,生成式AI将改变开发人员和质量保证(QA)工程师未来的工作任务。“将来,自然语言很可能会指导更多的代码生成和验证生成代码的测试。其中,AI代理将完成大部分工作,而开发人员则需要为这些代理设定需要遵循的编程目标和约束条件。”
Carter继续大胆地预测:“AI代理能够通过分析程序运行时的行为,检查未知的因素,以执行过去开发人员难以企及的QA、可观察性和安全任务。”据此,开发人员可以高屋建瓴地从上层定义系统架构、非功能性、以及操作要求,从而指导生成式AI进行代码开发和自动测试,而非亲历亲为。
7.AI被引入SDLC的多个阶段
虽然目前Copilots和许多生成式AI工具主要侧重于编程,但是其新的功能也会改变SDLC中的其他阶段。Gigster的首席解决方案工程师Humberto Moreira认为:“随着生成式AI被纳入SDLC,不同的模型会有其最为适合的特定周期阶段。例如,A模型可能会针对需求进行优化;B模型则是针对代码开发,而C模型却针对的是QA。”
实际上,由于各类工具提供了更为强大的测试用例,并且能够对代码的更改提供更快的反馈,因此生成式AI模式的转变已经对QA产生了一定的影响。Descope的联合创始人Gilad Shriki说:“随着AI的崛起,从SDK到测试、再到文档,所有围绕着软件工程的方方面面都会得到生成式AI的辅助。开发人员甚至需要以特定的AI使用格式,来记录他们的工作。”
8.生成式AI细分开发角色
生成式AI在软件开发中的角色可能会从目前传统的人类开发职能中分离出来。也就是说,由机器扮演的不同代码生成器、编译器、以及其他开发细分角色会逐渐出现。
Chainguard的工程副总裁Dustin Kirkland认为:“除了人类开发者熟悉的传统代码开发视角,另一种隐蔽的视角将会出现。这种视角虽然对于人类的可读性较低,但是可以被由AI扮演的编译器和解释器完全领会。它将作为另一种代码的中间层,提供所谓AI安全优化的防御视图。”不过,也有人质疑:AI本身的安全识别能力是否准确、高效。
9.AI提高开发过程的运营能力
LaunchDarkly的开发者体验总监Cody De Arkland提出了使用生成式AI、以及交互式学习,来协助提高软件应用的可靠性和操作性的用例。其中包括:
开发并生成符合已学到的、满足设计标准的Web应用组件
在检测到开发人员创建了新的功能时,创建相应的功能标记
启动新的软件部署(CI/CD),并能在发现问题时将其回滚
通过定制运行而非部署后运行,为QA提供实时的反馈回路
当然,这些用例也伴随着一个问题:生成式AI将启用或增强哪些下一代开发和SRE能力。
10.企业必须防范的AI风险
随着生成式AI更多地参与到整个SDLC中,一个新的问题可能会出现,即:生成式AI可能引发的知识产权(包括代码和数据)等风险。为此,企业需要权衡其收益是否大于风险。
Tabnine生态系统和业务开发副总裁Brandon Jung认为:我们需要密切关注进入模型的数据,特别是训练集中的数据,花费时间和精力去评估和选择AI模型,以保护企业最宝贵的资产--代码和数据。
虽然我们还处于用生成式AI开发软件的初期,但是生成式AI算法、以及支持这些算法的工具,是否能够建立起保护企业资产的保障措施,则在很大程度上需要依赖于生成式AI本身对于软件开发、测试、部署、以及维护的掌控能力上。