智能软件工程 课件 Ch10-智能化浪潮下软件工程的未来_第1页
智能软件工程 课件 Ch10-智能化浪潮下软件工程的未来_第2页
智能软件工程 课件 Ch10-智能化浪潮下软件工程的未来_第3页
智能软件工程 课件 Ch10-智能化浪潮下软件工程的未来_第4页
智能软件工程 课件 Ch10-智能化浪潮下软件工程的未来_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

智能软件工程第10章智能化浪潮下软件工程的未来引言大模型、生成式AI的出现对各行各业都带来了巨大的冲击。那么,在这股智能化浪潮下,软件工程将会受到怎样的影响?作为软件工程的学生与相关从业者,我们又应该如何在学习与工作中合理利用AI,并从容应对其带来的挑战呢?在这一章,我们将对智能化浪潮下软件工程的现状与未来进行探讨。10.1

现状AI在软件工程不同阶段的应用XinyiHou,YanjieZhao,YueLiu,ZhouYang,KailongWang,LiLi,XiapuLuo,DavidLo,JohnGrundy,HaoyuWang,LargeLanguageModelsforSoftwareEngineering:ASystematicLiteratureReview,ACMTrans.Softw.Eng.Methodol.,33,8,Article220,November2024AI在编程相关任务上已有许多成功的落地应用,取得了令人惊叹的效果。除了编程,AI也在软件生命周期的其他重要环节发挥作用。AI应用:软件需求阶段软件需求涉及大量的自然语言信息,正是AI擅长处理的信息。可能的应用:代词歧义与共指检测解决需求文本中的歧义与术语不一致问题提高需求清晰度与准确性,减少理解偏差需求分类与术语识别自动分类需求(如安全、性能等)辅助识别项目关键术语可追溯性自动化建立需求、设计、代码、测试之间的关联、支持问题追踪、版本控制与审计自动识别需求变更影响范围其他应用:需求分析与评估、规范生成与形式化、用例自动生成等目前大模型在需求工程中的应用相对其它应用来说非常少(占比3.9%)AI应用:软件设计阶段AI辅助设计工作:生成有意义的架构设计描述。辅助开发者进行UML设计图的自动生成。应用于“快速原型生成”(fastprototyping),例如快速生成移动应用的GUI原型,帮助可视化并迭代软件设计。现状:目前大模型在软件设计上的应用是极少的(<

1%)

AI应用:软件实现阶段AI在代码实现阶段的应用最广泛:StackOverflow2024年调查显示,62%的开发者在软件开发过程中使用了AI。一项2024年研究指出,Copilot用户31%的代码由AI辅助生成。使用场景生成重复性代码(78x):如模板代码(boilerplatecode),CRUD代码等生成逻辑简单的代码(68x):如排序,文件操作等。自动补全(28x)测试生成(21x)概念验证(20x):辅助开发者快速验证模糊的想法学习(19x):辅助开发者学习新的编程语言或者库回忆(19x):帮助开发者快速回忆不熟悉的语法或者API用法提高效率(18x)生成文档(6x)代码风格(4x):辅助开发者保持统一的代码格式与风格AI应用:软件质量验证漏洞/缺陷定位:识别常见的安全漏洞(如SQL注入、XSS),发现潜在的安全风险。通过学习代码和错误报告,快速、自动定位代码中的缺陷。测试:辅助单元测试、GUI测试、以及测试输入的生成。特定大模型生成的测试在代码覆盖率及缺陷覆盖率等方面表现不俗。辅助常用的自动化测试方法,如变异测试和模糊测试。代码审查大模型在“代码解释”等任务上的应用,可以辅助开发者更好地理解和审查代码。AI应用:软件维护阶段纠错性维护:自动程序修复(APR,AutomatedProgramRepair);大模型的出现对此问题产生了革命性的突破预防性维护:如代码克隆检测,帮助减少系统中的重复性代码,增加可维护性。完善性维护:例如代码优化。适应性维护:代码转换(codetransformation):可将输入代码转换为新的代码,适应新的API或编程语言。Dora2024年调查:约45%的开发者在“语言转换”和“现代化代码库”等演化任务中使用过AI。现状:仅次于开发过程中的应用,占比23%。AI应用:现状总结热门AI应用集中在DevOps环的左半部分(Devs)。Devs环节:AI应用进一步集中于“编码”阶段。Ops环节:在软件进入部署与运营阶段后,AI的已知应用大大减少。10.2

挑战版权所有©️仅限于教学使用大模型在软件工程任务上的局限性抽象能力欠缺:AI应用集中在编程,而很少应用于软件需求和架构设计。软件设计需要具备对问题高度抽象化的能力。目前的AI在具体的任务上表现不错,但在面对需要高度抽象思维的任务时,表现往往不尽如人意。创造力不足:大模型的生成能力高度依赖于训练数据中的模式和框架。缺乏“创造力”,难以胜任创新性的任务,如提出独特、突破性的架构方案。现有研究用“Accelarationoverexploration”(加速优先于探索)概括此现象。大模型在软件工程任务上的局限性问题规模与复杂度受限:大模型最成功的用例限于生成重复性或逻辑简单的代码。在解决大规模、复杂软件问题时,表现仍然不尽如人意。难以保持整体上下文理解和一致性,在面对跨模块依赖和复杂业务逻辑时,易产生误判或错误修复。StackOverflow2024年调查显示,45%的开发者认为AI在复杂问题上表现不佳。难以适应软件的动态、长期演化:大模型的训练数据和模型参数通常是静态的,更新往往滞后于实际需求变化(如CI/CD场景)。缺乏对软件长期演化过程的深入理解(如从单体架构向微服务架构的转变)。缺乏特定领域的深度知识和最新的技术动态。缺乏灵活性和适应性,在面对新兴技术时可能无法及时掌握和应用。大模型在软件工程任务上的局限性可用性问题:2024年调研显示,54%的参与者提到大模型生成的代码未能满足某些功能或非功能需求;48%的参与者表示使用大模型的最大挑战是无法确定输入的哪部分影响了输出;34%的参与者指出AI工具未能提供有帮助的建议。部分开发者担忧AI编程助手生成的代码侵犯知识产权(46%)或访问自己的代码(41%)。泛化能力有限:泛化能力指模型在未见过任务、数据集或领域中表现一致性和准确性的能力。在软件工程领域,任务差异大,可能导致大模型难以有效泛化到新的环境中。大模型在软件工程任务上的局限性缺乏上下文信息:软件开发决策是“权衡利弊、妥协取舍”的过程,需要大量的项目上下文信息。AI对项目上下文信息掌握有限,例如缺陷修复通常只提供缺陷代码与描述。将所有上下文提供给AI会增加用户难度和任务复杂度,可能导致AI表现下降。过度依赖提示(Prompt):大模型的表现非常依赖于提示词的设置及轮数,通常需要多轮提示才能达到最好效果。这种依赖要求人类开发者全程参与,与端到端、自动化的现代软件工程理念相悖。另一层复杂性:部分开发者担心AI反而成为另一个需要学习、维护、包含各种Bug的软件。这会为目标软件的开发过程带来另一层复杂性与更多额外的工作(如审查和调试AI生成的代码)。挑战:计算资源与基础设施大模型参数量的飞速增长GPT-1:1.17亿参数GPT-2:15亿参数GPT-3:1750亿参数对个人电脑的超越即便是2019年的CodeBERT(1.25亿参数,476MB体积),也已超出普通个人电脑的处理范畴。更先进的模型如Codex和CodeGen,参数数量已攀升至十亿以上,模型容量超过100GB。基础设施压力如此庞大的体量,对软件系统的存储、内存及计算能力(尤其是训练与推理过程)带来了巨大的挑战。这对于缺乏高性能硬件(如GPU和TPU)的个人开发者及小型团队尤为严峻。挑战:训练成本和时间消耗训练拥有1760亿参数的BLOOM模型,需耗费1,082,880GPU小时。训练规模较小的GPT-NeoX-20B(20亿参数):需要配置8台NVIDIAA100-SXM4-40GBGPU(每台价值逾6,000美元),耗时长达76天。高昂的资源消耗,对多数小型开发团队而言难以承受。挑战:供应商服务与运营风险不同供应商的集群可靠性差异大,可能出现硬件问题(如电缆问题、GPU故障)导致节点频繁失效。硬件质量和稳定性难以预测,给项目规划带来困难。即便节点稳定,也可能存在I/O性能差或文件系统不稳定的问题;可能导致保存检查点时发生超时或长时间等待。集群存在硬件问题或文件系统性能差时,模型浮点运算效率(MFU)会大幅下降,导致大量计算资源被浪费。特定计算资源可能需要特定的软件环境,与开发团队现有代码库不兼容,产生额外的迁移成本。挑战:供应商服务与运营风险服务运营风险计算供应商有时会延迟硬件交付,可能导致项目停滞。某些供应商可能意外删除用户的检查点数据,造成工作成果丢失。持续监控与维护训练过程常伴随硬件故障、网络问题、GPU过热等意外情况。团队需要持续监控损失函数、数值稳定性、计算吞吐量等指标;任何延迟诊断和修复都可能浪费大量昂贵的计算资源。曾任职于特斯拉与OpenAI的人工智能专家AndrejKarpathy表示:“成熟的公司有专门的团队维护集群。随着规模的扩大,集群已经脱离了工程学的范畴,变得更加生物化(Biological)。因此,需要专门负责“硬件健康”(Hardwarehealth)的团队。”10.3未来版权所有©️仅限于教学使用更自然的人机交互未来AI技术的引入应使开发者与环境的交互更加直观和自然,无需花费大量精力学习新的工具或流程。例如,ChatGPT的交互环境是浏览器,微软Copilot的交互环境是开发者常用的IDE。开发者可以通过简单的自然语言描述需求,AI工具即可生成相应的代码与配置,简化环境搭建流程,降低技术门槛,提高开发效率。端到端工作流目前AI应用集中于DevOps环的Devs部分(代码实现)。Devs环节的扩展应用:代码审查:AI系统基于风格指南自动检测潜在问题(如冗余代码、安全漏洞)并提出修改建议。构建优化:AI智能优化构建脚本,并通过分析依赖树确定最优构建顺序,加快构建速度。测试生成:AI自动生成测试用例,模拟用户行为,覆盖边界条件和异常情况。未来目标:深入Ops环节,形成完整的端到端解决方案。部署:AI能够生成部署脚本,优化部署策略,确保发布平滑过渡到生产环境。运维:AI根据实时流量数据动态调整服务器资源,保证应用性能和稳定性。监控:AI监控系统运行状态,预测潜在故障并提前采取措施,减少停机时间。隔离环境在一个独立且受控的隔离环境(沙盒)中搭建并执行AI生成的软件。保证AI生成软件的可靠性和安全性。:有效隔离开发、测试和生产系统。即使生成的软件存在漏洞,也不会直接影响生产环境中的其他系统或数据。防止AI生成的软件意外接触到敏感数据或外部网络,减少安全风险。在隔离环境中,团队可以使用模拟真实世界的数据集和场景来验证AI生成的软件是否符合最初的设计要求。可以将需求转换为精确的规格说明,并使用形式化方法验证软件是否按照这些规格说明执行。实践案例:微软的AutoDev采用Docker作为隔离环境,运行并测试AI生成的项目。自学习与自适应挑战:生成式AI在不同任务、数据和领域的泛化能力有限。通过AI代理(Agent)提高能力方法:采用多个AI代理处理不同类型的任务。示例(AutoDevforIntellij):AutoCRUD:自动生成Spring框架代码。AutoSQL:自动生成SQL代码。AutoPage:自动生成ReactWeb应用代码。未来:使用调度器(Scheduler)调度和编排Agent,最终进化成一个“无所不能”的融合AI。自学习与自适应通过持续学习提高泛化性方法:让AI不停地从成熟的代码库学习,自主查找并修复缺陷。示例:SWE-bench数据集于2024年发布,用于测试AI系统自动解决GitHub问题(issues)的能力,包含2,294对问题-拉取请求。排行榜上,最领先的AI已能解决19.27%的GitHub问题。目标:未来AI通过实时学习,补足知识短板,发展出自适应能力,能够自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论