4006-998-758
新闻动态

AI如何助力、驱动软件研发?

2023-08-03
图片

注:本文内容由人工撰写(以后的文章需要注明是人写的,还是chatGPT写的),除了人工智能(AI)生成的图像和代码块,用于演示所引用的AI工具的各种功能。

人工智能(AI)正在颠覆一切,软件工程也不能幸免。生成式人工智能(AIGC)在编码、设计、测试和 DevOps 方面的最新展示确实令人印象深刻,甚至可以说令人敬畏。

AIGC是人工智能的一个分支,专注于创建和生成新的内容,如图像、文本、音频甚至视频,这些内容很难与人类生成的内容区分开来。近几个月来,由于大型语言模型(LLM)的进步,以及 OpenAI、Stable Diffusion 和其他大厂的产品发布,AIGC备受关注。虽然很难量化AIGC的准确传播范围,但可以肯定的是,研究人员、开发人员和软件从业人员正在积极探索和利用AIGC的各种功能领域,如图像和文本生成、音乐和声音合成、视频生成、虚拟人物和数字人创建以及数据增强。

软件工程是AI革命的一部分,而AIGC可以为软件开发生命周期(SDLC)的各个阶段带来显著的帮助

图片
由于软件有着天生的数字化特性,软件工程尤其适合借助AIGC的力量。具体的工程任务,如数值分析和数据工程、文档编制、编码和质量控制,在某种程度上可能是重复性的;因此,非常适合由训练有素的AI模型提供帮助。其次,复杂的算法代码结构适合由AI助手生成。此外,软件开发人员面临的许多挑战可能已经解决。因此,对于训练有素的AI模型来说,代码模块已经可用,生成整个函数或类也就变得可行了。
AIGC是增强人类能力和加速软件开发的有力工具。对于业务依赖于创建、维护或销售软件的公司来说,使用正确的AIGC工具可以提高开发人员的效率、创造超越竞争对手的机会。企业可以通过多种方式利用AIGC工具,包括开发人员的优化和和培训的工作,以及为关键工程任务启用AIGC工具。
本文将对AI驱动/辅助软件工程生态系统、可用的最新工具、可帮助完成的工程任务以及应避免的注意事项进行高屋建瓴的阐述。

1.当前的 SDLC(软件开发生命周期)





要了解AIGC对软件工程的帮助有多大,快速了解一下目前公认的敏捷软件开发生命周期(SDLC)可能会有所帮助。
经典的敏捷软件开发生命周期(SDLC)以较小的、可操作的、迭代的和增量的周期启动并进行演化,直到代码完全开发、测试并部署到生产环境中。同样,分析、设计、编码和测试也被分成较小的块来执行,而 DevOps 则在整个过程中持续进行。
在敏捷分析阶段一般会包括用户故事和史诗(Epic)的编写,而设计阶段则会引入架构图的创建和数据结构的设计。编码和测试阶段通常包括用不同的语言编写软件和制作测试线束,以确保它们按照特定要求运行。测试和QA还可能包括独立测试,以确保一切按预期运行。同样,DevOps 也采用不同的方法,如环境配置、基础设施即代码和 CI/CD 流水线。
图片
图1 当前的敏捷 SDLC

2. AI驱动的 SDLC





AI可以协助 SDLC 的每个阶段,缩短整个SDLC的反馈环路,使公司能够更快地推出产品。结果如何?企业通过在 SDLC 中使用人工智能驱动的工具来提高竞争优势。
OpenAI 开发的 ChatGPT 等工具可以帮助进行市场调研和趋势分析。AI可以分析客户偏好,并通过简单的文本提示帮助编写用户故事。从技术角度来看,它们还可以在产品发布前自动执行 CI/CD 流程、环境脚本、安全测试和性能测试。
GPT-4 还能帮助开发人员生成功能代码、测试线束和自动化。此外,还可以创建数据模型、DDL 和序列图。
图片
图1 AI的敏捷 SDLC
GitHub Copilot 、AWS CodeWhisperer 、华为CodeArts Snap等AI工具可在集成开发环境中自动完成大型代码块并检查代码质量问题,从而提高开发人员的工作效率。GitHub 和微软最近进行的一项研究 表明,当开发人员使用 Copilot 提供代码帮助时,开发人员的效率提升超过 55%。从历史的角度来看,这是生产率的显著提高,超过了 19 世纪中期蒸汽机的引入,当时蒸汽机 "仅 "将大型工厂的生产率提高了 15%。
人工智能在整个 SDLC 中的累积效应可使综合效率提高 30-50%。

3. 在软件工程中应用AI





现在众所周知,AI具有为技术组织增值的巨大潜力。但是,AI能直接帮助哪些关键的软件工程活动呢?下面列出的只是AI能为创建软件的团队做些什么。
1)代码生成
GitHub Copilot 、CodeWhisperer 、CodeArts Snap等AI工具可以根据简单的文本提示生成整个代码功能。
让我们来看看下面这个例子:在 Visual Studio Code 中,安装 AWS CodeWhisperer 扩展后,当用户键入下面的提示时,就会得到一个能解决问题的完整函数:
图片
(在 JavaScript 中生成 CSV 字符串解析函数的文本提示)
生成的结果是一个完全可用的函数:
图片
当我们尝试上述提示的变体,增加额外的复杂度时,我们很可能会发现当前AI工具的一个缺陷。
让我们试试下面的提示:
图片
(提示:用于生成美国邮政编码的解析函数,同时将邮政编码转换为经度和纬度)
结果生成如下所示的函数:
图片
(生成的代码确实会根据提示接收字符串并解析 CSV,但不会进一步将邮政编码地理编码为经纬度值。)
虽然这项更为复杂的任务需要进一步引导它去查询,例如访问 REST API(如美国人口普查局 Geocoder REST APIs8 提供的 REST API),但还是需要谨慎和警惕,因为该工具甚至没有尝试彻底解决问题。相反,它只是提供了一个模板代码,没有达到预期效果。这个例子凸显了当前AI工具的局限性之一:不能盲目相信生成的代码,开发人员仍处于主导地位。“检查代码的准确性、完整性和错误” 对于AI驱动的开发人员工作流程至关重要。随着工具日臻完善并向每位开发人员学习,生成代码的准确性和复杂性也会随之提高。尽管如此,如今开发人员仍然牢牢掌握着控制权。
2)代码解释
作为开发人员,我们有时会加入一个项目或继承复杂的应用程序代码。我们可能需要花上好几天的时间才能理解项目的结构和代码的工作原理,尤其是在文档很少的情况下。在这种情况下,ChatGPT 可以帮助我们解释代码。例如,让我们看看下面的 Angular 函数:
图片
我们可以给出提示 "解释下面的 Angular 代码是做什么的"。下面 ChatGPT 的回复相当全面、准确地解释了函数的作用:
图片
正如该示例所示,ChatGPT 可以减少阅读、理解和解释现有应用程序代码所需的时间,并进一步帮助开发人员加快入职或在新代码库中提高工作效率。
3)AI驱动的软件工程的其他任务
除了编写和解释代码,AI每天都在掌握新的技能。下面列出的只是AI辅助软件开发能力不断增长的少数例子:
  • 编写用户故事
  • 生成数据模型
  • 生成 DDL 和 DML
  • 用人鱼脚本生成数据图表
  • 生成序列图
  • 生成系统图
  • 用任何语言生成 OO 类模型
  • 生成代码
  • 将代码从一种语言翻译成另一种语言
  • 编写自动测试
  • 编写代码文档
  • 为基于 REST 的应用程序接口编写 Swagger 定义
  • 改进(重构)现有代码
  • 编写代码注释
  • 生成线框(GalileoAI)
  • 调试代码 + 静态分析(Deepcode)
  • 自动代码重构(Sourcery)
  • 设计模式识别
  • 代码审查(DeepScan)
更完整的清单超出了本文的范围,将在后续文章中介绍。不过,在开始一项复杂的任务之前,最好先在网上查看一下AI功能。可能已经有AI工具或插件可以解决问题。未来还将带来更多工具,并扩展现有工具的功能。在AI的帮助下,开发人员、架构师和参与 SDLC 的每个人都将变成能够更快地编写出更好代码的超人。

4. 结论





AIGC的出现为技术组织提供了提高效率的工具和技术。团队可以创建更好的软件产品,缩短开发生命周期,并对新原型进行市场测试,从而接触到更多客户,提高团队效率。
中智凯灵
,赞18
企业可以通过拥抱变化并将AI定位为技术转型的核心(AI+X),从AI革命中获益;我们需要将AI的力量视为一种推动力,而不是一种威胁;我们的员工必须根据新出现的新一代AI工具接受再培训,以了解其真正的潜力。此外,企业还可以将AI的应用范围从软件工程扩展到产品管理、质量保证、网络安全和 DevOps。总之,本文表明,虽然AIGC仍处于起步阶段,但每天都会出现新的、功能更强的工具,这为专注于不断学习、适应和发展的企业提供了可持续的长期竞争优势。

5. 好消息:AiDD峰会日程出来了





图片
*点击 “阅读原文” 查看详情 

作者:Test Ninja

来源:软件质量报道

版权申明:内容仅供分享学习,版权归原创者所有



图片

未完待续

图片

如果想进一步了解AIGC相关内容,请关注8月4日晚8点K+Talk大咖对话,本期K+Talk邀请为研发工具测试技术专家/万锐媛、蚂蚁集团技术风险效能部高级技术专家/周海莲(慕蓝)、OPPO测试架构师/贾琳玉共同做客直播间,深入探讨“AIGC时代的测试智能化”~

AI如何助力、驱动软件研发?(图14)
中智凯灵
将在08月04日 20:00 直播
《AIGC时代的测试智能化》
-从量变到质变,我们一致致力于软件测试的智能化,在AIGC促进下会不会发生突破性的进展?
视频号
  • 从第一性原理、达尔文进化论角度去看AIGC下的测试智能化
  • 从量变到质变,在AIGC促进下会不会发生突破性的进展?
  • 哪些领域更见成效?哪些地方更容易取得突破?
  • 在企业QA活动和场景落地时还要重点解决哪些问题?
  • 未来会诞生出“中高级水平的测试领域AI助手”或超人?

图片

图片

点这里↓↓↓记得关注标星哦~



人才培养、版权课程设计与输出、人才培养体系设计与开发等一系列的人力资本专业服务。本平台致力于为企业提供人才培养方面的内容分享。" data-from="2" data-is_biz_ban="0" data-origin_num="92" data-isban="0" data-biz_account_status="0" data-index="0" style="color: initial; font: initial; font-feature-settings: initial; font-kerning: initial; font-optical-sizing: initial; font-palette: initial; font-synthesis: initial; font-variation-settings: initial; forced-color-adjust: initial; text-orientation: initial; text-rendering: initial; -webkit-font-smoothing: initial; -webkit-locale: initial; -webkit-text-orientation: initial; -webkit-writing-mode: initial; writing-mode: initial; zoom: initial; accent-color: initial; place-content: initial; place-items: initial; place-self: initial; alignment-baseline: initial; animation: initial; app-region: initial; appearance: initial; aspect-ratio: initial; backdrop-filter: initial; backface-visibility: initial; background: initial; background-blend-mode: initial; baseline-shift: initial; block-size: initial; border-block: initial; border: initial; border-radius: initial; border-collapse: initial; border-end-end-radius: initial; border-end-start-radius: initial; border-inline: initial; border-start-end-radius: initial; border-start-start-radius: initial; inset: initial; box-shadow: initial; break-after: initial; break-before: initial; break-inside: initial; buffered-rendering: initial; caption-side: initial; caret-color: initial; clear: initial; clip: initial; clip-path: initial; clip-rule: initial; color-interpolation: initial; color-interpolation-filters: initial; color-rendering: initial; color-scheme: initial; columns: initial; column-fill: initial; gap: initial; column-rule: initial; column-span: initial; contain: initial; contain-intrinsic-block-size: initial; contain-intrinsic-size: initial; contain-intrinsic-inline-size: initial; container: initial; content: initial; content-visibility: initial; counter-increment: initial; counter-reset: initial; counter-set: initial; cursor: initial; cx: initial; cy: initial; d: initial; display: initial; dominant-baseline: initial; empty-cells: initial; fill: initial; fill-opacity: initial; fill-rule: initial; filter: initial; flex: initial; flex-flow: initial; float: initial; flood-color: initial; flood-opacity: initial; grid: initial; grid-area: initial; height: initial; hyphenate-character: initial; hyphens: initial; image-orientation: initial; image-rendering: initial; inline-size: initial; inset-block: initial; inset-inline: initial; isolation: initial; letter-spacing: initial; lighting-color: initial; line-break: initial; list-style: initial; margin-block: initial; margin: 0px; margin-inline: initial; marker: initial; mask: initial; mask-type: initial; max-block-size: initial; max-height: initial; max-inline-size: initial; max-width: 100%; min-block-size: initial; min-height: initial; min-inline-size: initial; min-width: initial; mix-blend-mode: initial; object-fit: initial; object-position: initial; object-view-box: initial; offset: initial; opacity: initial; order: initial; orphans: initial; outline: 0px; outline-offset: initial; overflow-anchor: initial; overflow-clip-margin: initial; overflow: initial; overscroll-behavior-block: initial; overscroll-behavior-inline: initial; overscroll-behavior: initial; padding-block: initial; padding: 0px; padding-inline: initial; page: initial; page-orientation: initial; paint-order: initial; perspective: initial; perspective-origin: initial; pointer-events: auto; position: initial; quotes: initial; r: initial; resize: initial; rotate: initial; ruby-position: initial; rx: initial; ry: initial; scale: initial; scroll-behavior: initial; scroll-margin-block: initial; scroll-margin: initial; scroll-margin-inline: initial; scroll-padding-block: initial; scroll-padding: initial; scroll-padding-inline: initial; scroll-snap-align: initial; scroll-snap-stop: initial; scroll-snap-type: initial; scrollbar-gutter: initial; shape-image-threshold: initial; shape-margin: initial; shape-outside: initial; shape-rendering: initial; size: initial; speak: initial; stop-color: initial; stop-opacity: initial; stroke: initial; stroke-dasharray: initial; stroke-dashoffset: initial; stroke-linecap: initial; stroke-linejoin: initial; stroke-miterlimit: initial; stroke-opacity: initial; stroke-width: initial; tab-size: initial; table-layout: initial; text-align: initial; text-align-last: initial; text-anchor: initial; text-combine-upright: initial; text-decoration-line: initial; text-decoration-skip-ink: initial; text-emphasis: initial; text-emphasis-position: initial; text-indent: initial; text-overflow: initial; text-shadow: initial; text-size-adjust: inherit; text-transform: initial; text-underline-offset: initial; text-underline-position: initial; touch-action: initial; transform: initial; transform-box: initial; transform-origin: initial; transform-style: initial; transition: initial; translate: initial; user-select: initial; vector-effect: initial; vertical-align: initial; visibility: initial; border-spacing: initial; -webkit-box-align: initial; -webkit-box-decoration-break: initial; -webkit-box-direction: initial; -webkit-box-flex: initial; -webkit-box-ordinal-group: initial; -webkit-box-orient: initial; -webkit-box-pack: initial; -webkit-box-reflect: initial; -webkit-highlight: initial; -webkit-line-break: initial; -webkit-line-clamp: initial; -webkit-mask-box-image: initial; -webkit-mask: initial; -webkit-mask-composite: initial; -webkit-print-color-adjust: initial; -webkit-rtl-ordering: initial; -webkit-ruby-position: initial; -webkit-tap-highlight-color: initial; -webkit-text-combine: initial; -webkit-text-decorations-in-effect: initial; -webkit-text-fill-color: initial; -webkit-text-security: initial; -webkit-text-stroke: initial; -webkit-user-drag: initial; -webkit-user-modify: initial; white-space: initial; widows: initial; width: initial; will-change: initial; word-break: initial; word-spacing: initial; x: initial; y: initial; z-index: initial; box-sizing: border-box !important; overflow-wrap: break-word !important;">

图片


返回列表