当前位置: 首页 > news >正文

AI时代的软件工程:迎接LLM-DevOps的新纪元

在科技日新月异的今天,GPT的问世无疑为各行各业带来了一场深刻的变革,而软件工程领域更是首当其冲,正式迈入了软件工程3.0的新纪元。2024年,作为软件工程3.0的元年,伴随着软件工程3.0宣言的震撼发布,一个全新的软件范式——ML-DevOps(更精确地表述为LLM-DevOps:大模型驱动开发与运维)悄然崛起,引领着软件工程的新一轮革新。

回顾软件工程的发展历程,我们可以清晰地看到其演进的三个阶段:

  • 软件工程1.0时代(1968年):这是软件工程的诞生之年,以瀑布模型为标志,强调结构化、规范化和工程化。在这个时代,软件开发被视为一项严谨而系统的工程,为后续的发展奠定了坚实的基础。

  • 软件工程2.0时代(2001年):随着敏捷宣言的发布,敏捷和DevOps的风潮席卷全球,实现了持续构建、持续集成和持续交付。这个时代注重快速响应变化、团队协作和自动化流程,极大地提升了软件开发的效率和质量。

  • 软件工程3.0时代(2024年):如今,我们迎来了软件工程3.0的新时代。随着机器学习,特别是大模型驱动的LLM-DevOps成为新的核心驱动力,软件工程正经历着前所未有的变革。LLM-DevOps不仅优化了软件开发流程,还提升了软件质量和可维护性,为软件工程的未来发展指明了方向。

一、Agent在软件工程中的广泛应用

在AI技术的推动下,Agent正逐渐成为软件工程中不可或缺的得力助手。从SE(软件工程)视角深入分析LLM-based agents的应用,我们可以进一步探讨其在各个软件开发和维护活动中的具体作用和影响。

1.1 需求工程:精准捕捉用户需求

1.1.1 理论基础

需求工程(RE)是软件开发生命周期中的一个关键阶段。它初始化了软件开发过程,并涉及几个关键活动:

  1. 诱发(需求收集):这个步骤包括从各种利益相关者那里收集新的需求。技术可能包括访谈、调查和研讨会来捕捉用户的需求和期望。

  2. 建模:在这个阶段,使用抽象且可解释的模型来表示需求。常见的建模语言包括统一建模语言(UML)和实体-关系-属性(ERA)模型。

  3. 协商(需求规格):需求被详细描述并以正式格式记录。这份文档作为开发人员和利益相关者清晰且无歧义的参考。

  4. 验证:需求和模型被验证以确保它们准确反映了利益相关者的意图。这一步确保所有需求都是完整、一致和正确的。

  5. 演变:随着利益相关者需求的变化,需求也在不断演变。这个持续的过程涉及到更新需求,以符合新的业务目标或技术进步。

LM-based Agents能够深入理解用户需求,并将其转化为具体、可实施的开发任务。它们通过自然语言处理技术,分析用户意图,识别出关键信息和需求点。同时,它们还能根据历史数据和经验,提供智能化的需求分析和建议,帮助开发团队更加准确地把握用户需求。

1.1.2 实例场景

在一个在线教育平台的开发项目中,产品经理描述了一个关于“实现个性化推荐功能”的需求。LLM-based Agent能够分析这一需求,并自动生成详细的功能需求文档,包括用户画像构建、推荐算法选择、界面设计等关键要素。同时,它还能识别出潜在的用户需求,如多场景推荐、实时更新等,为开发团队提供更全面的指导。

1.1.3 当前应用(目前还在可研阶段没到软件工程)

MARE,是一个覆盖多个需求工程阶段的多智能体框架,包括收集、建模、验证和规范。在收集阶段,一组利益相关者智能体表达他们的需求,然后由收集者智能体将其组织成草案。随后,建模者智能体识别草案中的实体和关系,并构建需求模型;在验证阶段,检查者智能体根据其标准评估当前需求草案的质量,并将其移交给文档编写者智能体,该智能体将编写需求规范或报告错误。所有这些智能体都配备了预定义的操作,并可以在共享工作区内通信,从而实现中间信息的无缝交换。

1.2 软件设计:AI辅助的创新探索

在设计方面,尽管AI的应用相对较少,但它仍然可以辅助设计,甚至利用机器学习的洞察力探索复杂设计问题的新解决方案。

1.2.1 设计生成与探索

AI技术能够增强产品开发实践,从概念到设计验证全程指导设计人员。例如,Altair DesignAI等工具能够成倍提高工程团队的生产力,探索更广泛的客户满意的高性能、有意义且能实施的新产品设计替代方案。同时,Design Explorer等AI驱动的设计工具能够加强协作、加速设计迭代并推动产品创新。

1.2.2 优化设计

从设计微调到设计合成,AI能够利用各种信息探索和创造新理念,确定折衷方案并为决策提供支持。例如,Synopsys DSO.ai的强化学习引擎能够在优化过程中进行智能学习并缩小设计空间,有效优化数万亿的设计方案,实现更好的结果、加快结果转化速度并降低计算成本。

1.3 代码生成:AI技术的自动化编程新篇章

1.3.1理论基础

随着人工智能发展,代码生成被广泛探索。大型语言模型(LLMs)经大量文本数据预训练,在依给定代码上下文或自然语言描述生成代码时有良好效果,但存在如幻觉等问题,促使研究人员构建基于 LLM 的智能体,通过规划和迭代优化增强其能力, 下图展示了相关扩展情况

从Codex到Github Copilot,代码生成技术不断迭代升级。Codex模型包括非监督学习的Codex、监督训练的Codex-S以及通过代码生成代码文本描述的Codex-D。而Github Copilot则基于Codex模型训练,成为面向开发者的代码补全产品,迅速提升了代码生成技术的能力。

为了扩展LLMs的代码生成能力,研究人员采用了多种规划方法,如思维链(CoT)策略、动态规划策略、不同规划步骤的表示形式以及多路径规划策略等。同时,智能体还可以根据环境反馈多次迭代优化已生成的代码,包括模型反馈、工具反馈、人类反馈以及混合反馈等。

1.3.2实例场景

对于专业开发人员而言,代码生成工具能够提高其开发效率,从简单重复的劳动中解放出来,专注于架构、设计等复杂任务。而对于代码钻研者、寻求代码相关解答的开发者而言,这些工具则能够支持其快速创建小的、即时使用的任务型应用程序,如函数计算程序等。

1.3.3当前应用

当前,代码生成工具在软件开发领域的应用已经变得十分广泛。无论是国外的GitHub Copilot、Tabnine,还是国内的通义灵码、CodeGeeX、MarsCode、文心快码等工具,都展现出了强大的实力。这些工具通过分析大量的代码库和编程规范,能够自动生成高质量的代码片段,甚至完整的函数和类,从而极大地提高了开发者的生产效率。

在代码生成方面,AI技术已经得到了广泛的应用。其中,Codex作为这一领域的鼻祖,为后续的代码生成工具奠定了坚实的基础。而GitHub Copilot更是将代码生成技术推向了一个新的高度,使得更多的开发者能够享受到这一技术带来的便利。尽管GitHub Copilot在技术领域备受推崇,但我们也应该看到,国内的通义灵码等工具同样表现出色,并且提供了免费的服务。

因此,在选择代码生成工具时,我们不必局限于某一个特定的品牌或产品。相反,我们应该根据自己的实际需求和偏好进行选择,将更多的精力投入到如何更好地应用这些工具上。无论是GitHub Copilot还是国内的通义灵码等工具,它们都是为了提高开发者的生产效率而存在的。我们应该充分利用这些工具的优势,将它们应用到实际的软件开发过程中,从而创造出更加优质、高效的代码。

1.4 静态代码检查:AI智能守护代码质量与安全

1.4.1 理论基础

在静态代码检查领域,基于大型语言模型(LLM)的智能体(agents)展现了强大的分析能力,能够深入洞察代码中的潜在问题,包括语法错误、安全漏洞以及性能瓶颈等。通过集成静态程序分析工具,这些智能体不仅能提供详尽的错误报告,还能为开发者提供针对性的修复建议,从而加速问题的修正过程。

此外,LLM-based agents还具备学习和适应团队编码规范的能力。它们能够自动检测代码是否符合团队的编码标准,确保代码的一致性和可维护性。

1静态漏洞检测

尽管LLMs通过微调或特定提示能够识别代码中的潜在质量问题,但由于代码问题的复杂性和长代码上下文的挑战,独立LLMs在静态代码检查中的准确性和召回率仍受到限制。为了提升性能,可以采用多智能体系统来增强LLMs在漏洞或脆弱性检测方面的能力。这些智能体可以协同工作,共同分析代码,从而提高检测的准确性和效率。如下图

2代码评审

传统的代码评审通常被视为二分类或序列到序列生成问题,通过微调或提示深度学习模型来解决。然而,基于LLM的智能体则通过模拟真实的同行评审过程,实现了更加智能化的代码评审。例如,CodeAgent构建了一个包含多个智能体的团队,每个智能体都专注于特定的代码评审任务,如代码质量评估、漏洞报告、代码异味检测和代码优化等。这些智能体在相关的GitHub数据上进行训练,并在多个基于人工智能的项目上进行评估,证明了多智能体系统在代码评审任务中的巨大潜力。

1.4.2 实例场景

在一个大型金融应用系统的开发过程中,LLM-based Agent通过其静态代码检查功能成功识别出了一个潜在的内存泄漏问题。该智能体深入分析了代码中的内存分配和释放情况,发现了一处未正确释放内存的代码段,并立即为开发者提供了修复建议。这一及时的发现不仅避免了潜在的性能问题,还降低了安全风险,确保了系统的稳定性和可靠性。

1.4.3当前应用

目前,静态代码分析工具如SonarQube、Checkstyle等已经能够与LLM-based Agents相结合,实现更加智能化的代码审查。这些工具能够自动检测出代码中的错误和潜在问题,并提供详细的修复建议和代码重构建议。

1.5 软件测试:大型语言模型引领的高效验证之路

1.5.1 理论基础

大型语言模型(LLMs)在软件测试中的应用,特别是在单元测试和系统测试方面,已经取得了显著的成果。这些模型具备强大的自然语言处理和理解能力,能够学习并捕捉语言中的深层次语义和上下文信息,从而生成高质量的测试用例和测试脚本。

  1. 单元测试:单元测试是对软件中的最小可测试单元进行检查的过程,通常涉及对方法或类的测试。LLMs能够自动生成具有良好可读性和可用性的单元测试用例,这些测试用例能够覆盖多种可能的输入和输出情况,从而确保代码的正确性和稳定性。然而,独立LLMs生成的单元测试可能存在编译或执行错误以及覆盖度有限的问题。为了解决这些问题,可以基于LLM构建智能体,通过迭代优化来提升单元测试的正确性、覆盖度和故障检测能力。

  2. 系统测试:系统测试是一个全面的过程,用于评估集成的软件系统或组件在不同设置下的性能。LLMs在系统测试中的应用也颇具挑战,但基于LLM的智能体通过融合被测软件系统的领域知识,能够生成更加有效且实用的系统级测试用例。这些测试用例能够模拟真实用户场景,从而确保软件在实际使用中的稳定性和可靠性。

1.5.2 实例场景

  1. 单元测试场景:在单元测试中,LLMs可以自动生成测试用例来验证代码的正确性和边界情况。例如,在开发一个复杂的算法库时,测试人员可以利用LLMs生成大量的测试用例来覆盖各种可能的输入和输出情况。

  2. 系统测试场景:在系统测试中,LLMs可以生成模拟真实用户行为的测试用例来验证网站的性能和用户体验。例如,在开发一个电子商务网站时,测试人员可以利用LLMs生成模拟用户行为的测试用例,如注册、登录、浏览商品、下单等,以验证网站在不同场景下的稳定性和可靠性。

  3. 集成测试场景:集成测试是将各个模块组合起来进行测试的过程。LLMs可以帮助测试人员识别模块之间的接口问题,并生成相应的测试用例来验证接口的兼容性和稳定性。这有助于确保各个模块能够协同工作并达到预期的功能。

  4. 性能测试场景:性能测试是评估软件在特定条件下的性能表现。LLMs可以模拟大量用户同时访问软件的情况,并生成相应的测试数据来评估软件的性能瓶颈和优化空间。这有助于开发团队了解软件的性能表现并进行相应的优化。

1.5.3 当前应用

  1. 单元测试方面:结合通义灵码、JUnit及Mockito等工具,我们可以高效地实现单元测试。通义灵码提供了丰富的单元测试实践案例,为测试人员提供了有力的支持。

  2. 系统测试方面:Testim.io是一个创新的基于AI的自动化测试平台,为Web和移动应用的端到端测试带来了全新的解决方案。其强大的功能包括AI驱动的测试用例生成、智能元素定位器以及自我修复测试等,极大地提升了测试人员的工作效率。

  3. 集成测试方面:TestNG和Cucumber是两个备受推崇的自动化测试框架。TestNG适用于Java应用程序的单元、集成和端到端测试,而Cucumber则以其基于自然语言的方法而广受赞誉,成为行为驱动开发(BDD)爱好者的首选。

  4. 性能测试方面:HP LoadRunner和JMeter是两款值得关注的性能测试工具。HP LoadRunner能够模拟上万用户同时实施测试,帮助用户确认和查找存在的瓶颈;而JMeter则基于Java平台,不仅适用于接口测试,还广泛用于系统性能评估。

1.6 软件调试:AI辅助的精准定位与问题解决

1.6.1理论基础

在软件调试领域,尤其是在大型语言模型(LLM)逐渐崭露头角的时代背景下,故障定位、程序修复以及统一调试这三个关键环节均得到了显著的革新与推动。

  1. 故障定位

    1. 多智能体协同:在LLM时代,研究者们构建了多个由LLM驱动的智能体(如AgentFL和RCAgent等),每个智能体都具备专业知识和工具,以实现项目级代码的高效故障定位。这些智能体通过协同作用,能够简化复杂的故障定位过程,提高定位的准确性和效率。

    2. 工具调用:系统如AUTOFL通过工具调用增强了LLM的功能,使其能够更深入地探索代码库并精确定位故障。这些系统能够自主决定何时调用工具以及调用哪些工具,从而实现对代码库的全面分析。

  2. 程序修复

    1. 迭代优化:基于LLM的智能体在程序修复方面采用了迭代优化的方法。例如,ChatRepair、CigaR和RepairAgent等系统通过工具调用、模型反馈以及硬编码的反馈机制等方式,不断迭代生成和优化补丁,直至生成合理且多样的补丁。

    2. 多智能体系统:系统如AutoSD和ACFIX通过构建多智能体系统来实现更高效的程序修复。这些系统模拟科学调试过程,赋予LLM不同角色,并利用工具反馈和模型反馈来精细化控制补丁的生成和验证。

  3. 统一调试

    1. 多智能体协同:FixAgent等系统通过构建多智能体系统,实现了端到端的故障定位、错误修复和错误分析。这些系统通过智能体专业化和协同作用,纳入了关键变量跟踪和程序上下文理解等关键功能,从而提高了统一调试的准确性和效率。

    2. 控制流图分析:LDB等系统利用控制流图将有缺陷的程序划分为基本块,并通过LLM检测带有运行时执行值的不正确块。这种方法不仅提高了故障定位的精度,还为程序修复提供了更具体的优化建议。

1.6.2实例场景

  1. 企业运维自动化:大语言模型能够分析历史监控数据,学习系统的正常运行模式,并在异常发生时迅速识别出异常模式,实现智能监控和故障预警。同时,它还能通过分析故障现象、系统日志和历史案例等信息,自动推理出可能的故障原因和解决方案。

  2. 程序自动修复:大语言模型能够理解和生成代码,因此可以用于程序自动修复任务。通过迭代优化的方法,大语言模型可以不断生成和优化补丁,以修复代码中的缺陷。

  3. 统一调试平台:基于LLM的统一调试平台能够整合故障定位和程序修复功能,实现端到端的调试过程。通过多智能体协同和控制流图分析等方法,这些平台能够提供更准确、高效的调试服务。

1.6.3当前应用

  1. Replit:正致力于开发能够自动修复代码的大型语言模型。通过收集用户会话中的操作轨迹和语言服务器协议的诊断信息,重建项目状态,并利用LLM生成和筛选代码差异,实现代码的自动修复。通过监督学习对模型进行微调,并利用公共基准测试集和新创建的数据集对模型进行评估,以提升模型在代码修复任务上的表现。

  2. Copilot AutoFix:GitHub Advanced Security(GHAS)推出的AI修复助手。在检测到代码漏洞后,能够自动生成修复建议,提高修复效率,并简化安全流程。

  3. New Relic AI:将大型语言模型与New Relic的数据平台相结合,为用户提供强大的系统理解和管理能力。用户可以通过聊天功能与AI助手互动,提出问题并获取关于系统性能和故障排除的见解。AI助手还能够自动创建NRQL查询,帮助用户分析系统数据,并从日志和堆栈跟踪中提取错误的摘要和详细信息,以快速定位并解决问题。此外,AI助手还能够识别警报覆盖的空白区域,帮助用户设置合成监控任务,汇总并检查支持工单的状态,以及从仪表板中获取摘要和见解。

二、端到端软件开发的全面解析

Agent 通过执行多种开发子任务,包括需求工程、设计、代码生成和质量保证(包括静态检查和测试等),完成从需求到最终程序的全流程开发。目前面向端到端软件开发的 Agent 主要模拟真实的软件开发团队,设计不同的软件开发角色,互相协作共同完成软件开发任务。

2.1 软件开发流程:经典与创新的融合

现有的基于LLM的智能体系统,在遵循经典的软件流程模型,如瀑布模型和敏捷开发的基础上,进行了创新性的设计。

  • 瀑布模型:这一传统模型以线性且顺序的方式,将软件开发分为需求、设计、实现、测试、部署和维护等阶段。然而,一些智能体通过迭代的方式,对瀑布模型进行了扩展,从而提高了生成内容的质量。

  • 敏捷开发:强调迭代和增量的敏捷开发模型,如测试驱动开发(TDD)和Scrum,在AI辅助的软件开发中同样大放异彩。实验表明,Scrum模型在函数级代码生成上表现尤为出色。

2.2 角色专业化:模拟与分解的双重奏

为了完成端到端软件开发任务,基于LLM的智能体系统分配了不同的角色来处理专门的子任务。这些角色既模拟了真实的软件开发团队,又根据工作流程进行了巧妙的分解。

  • 模拟现实团队:智能体系统可以分配如经理、需求分析师、设计师、开发者和质量保证专家等角色。这些角色各司其职,共同协作,将软件开发任务逐一攻克。例如,经理负责全局的协调和管理,需求分析师则深入洞察用户需求,设计师则匠心独运地设计系统架构和界面,开发者则化繁为简地编写代码,而质量保证专家则严格把关,确保软件的正确性和稳定性。

  • 依据工作流程分解角色:智能体系统还可以根据工作流程的细微差别,进一步分解角色。如代码库、文件和方法层的实现角色,这些角色更加专注于具体的开发任务,从而提高了开发效率和代码质量。

2.3 协作机制:有序与无序的交响乐

在端到端软件开发中,各个智能体之间的协调至关重要。智能体系统通过安排合适的协作模式和通信协议,确保各个智能体能够高效、准确地完成任务。

  • 协作模式:

    • 有序模式:智能体独立决策,并通过反馈机制不断提高质量。每个智能体都在自己的领域内发光发热,通过反馈机制与其他智能体进行交流和协作,共同推动项目的进展。

    • 无序模式:智能体平等地提出意见,并通过汇总得出最终决策。这种模式更加灵活和民主,能够确保决策的全面性和准确性。然而,它也可能带来决策过程的复杂性和耗时性。

  • 通信协议:

    • 自然语言:智能体之间可以直接对话,用自然语言灵活表达意图。这种通信方式更加自然和直观,有助于促进智能体之间的深入交流和协作。但自然语言也可能带来歧义和误解的问题。

    • 结构化信息:智能体之间还可以交换文档、图表等结构化信息,特别适用于多轮复杂任务。这种通信方式更加准确和清晰,能够确保信息的正确传递和理解。但准备和解释这些信息可能需要更多的时间和资源。

2.4 特定智能体系统:Meta GPT

Meta GPT是一种基于大型语言模型的智能体系统,它在端到端软件开发中表现出色。Meta GPT能够模拟真实的软件开发团队,并分配不同的角色来处理专门的子任务。它还可以与其他智能体进行高效的协作和通信,以确保软件开发任务的顺利完成。这是我目前在跟踪的开源项目。

目前,已经有多个基于大型语言模型的智能体系统被应用于端到端软件开发中。这些系统各具特色,为软件开发带来了全新的可能。如下表:

三、端到端软件维护的策略与实践

Agent在软件维护领域发挥着重要作用,支持故障定位、修复及特性维护等多元化活动,实现从问题报告至补丁生成的全面维护流程。当前,基于大型语言模型(LLM)的智能体系统已应用于端到端软件维护,其流程涵盖预处理、问题重现、问题定位、任务分解、补丁生成、补丁验证及补丁排序等关键环节。尽管各智能体在处理各阶段时策略各异,但总体框架相似。

  1. 预处理:智能体首先进行预处理,构建代码库的知识图谱或树状结构,为后续问题定位奠定坚实基础。

  2. 问题重现:为有效解决问题,智能体设计问题重现阶段,利用LLM根据问题描述生成可执行的测试脚本,以重现用户遇到的意外行为。

  3. 问题定位:此阶段至关重要,智能体需精确识别与问题相关的代码元素。采用策略包括基于检索、导航、频谱的定位及模拟等。

  4. 任务分解:在补丁生成前,部分智能体会将任务细化为更小的子任务,以精准定位并解决问题。

  5. 补丁生成:智能体针对已定位的代码元素生成补丁,输入包括问题/任务描述及待修改的代码元素。

  6. 补丁验证:验证补丁正确性颇具挑战,智能体采用代码审查、静态及动态检查等多种策略。

  7. 补丁排序:为筛选出最可能正确的补丁,部分智能体增设补丁排序阶段。

尽管取得显著进展,基于LLM的智能体在软件维护方面仍面临挑战,如问题重现成功率及问题定位精确性有待提升。未来发展方向可能包括:

  • 提高问题重现成功率:通过增强LLM生成能力及引入更多上下文信息,提升重现测试的可执行性和针对性。

  • 增强问题定位精确性:结合先进代码搜索算法及更多代码上下文信息,提高定位准确性。

  • 优化补丁生成与验证:引入约束和优化算法,提升补丁质量,并采用更全面的验证策略确保补丁正确性。

四、软件工程未来的研究趋势与方向

在软件工程的浩瀚宇宙中,Agent正逐渐成为我们探索、开发与维护代码的得力助手。然而,如何准确评估这些Agent的能力,以及如何实现更高效的人机协同,成为了摆在我们面前的重要课题。

4.1评测体系的革新

当前的Agent评测体系,虽然聚焦于其端到端解决特定任务的能力,但如同盲人摸象,仅触及了冰山一角。我们亟需一个更全面、深入的评测基准,来揭示Agent的决策过程、失败原因,以及其在鲁棒性、效率等可信指标上的表现。同时,评测数据集也应摆脱逻辑简化、与现实脱节的桎梏,向更高质量、更贴近现实的方向迈进。只有这样,我们才能准确评估Agent的真正实力,为其后续的优化提供有力支撑。

4.2人机协同的拓展

在人机协同的舞台上,Agent的角色仍然有限,主要局限于需求工程、设计、测试评估等环节。而未来,我们期待看到Agent在更多场景中绽放光彩,与人共同编织出更加流畅、自然的协作乐章。这需要我们不仅要在技术上实现突破,更要深入探索高效友好的交互接口,让Agent成为我们工作中的得力伙伴。

4.3感知模态的多样化

Agent的感知能力,是其理解世界、执行任务的基础。目前,Agent主要依赖文本或视觉感知,这在一定程度上限制了其灵活性和可访问性。未来,我们期待看到Agent能够整合多样化的感知模态,如语音命令、用户手势等,让其在更加复杂、多变的环境中游刃有余。这样的Agent,将不仅是一个编码助手,更是一个能够与我们全方位互动的智能伙伴。

4.4软工任务的全面覆盖

尽管Agent在软工任务中已经展现出强大的潜力,但在设计、验证和功能维护等关键阶段,其应用仍然有限。这些阶段,如同软件开发的“暗区”,等待着我们去探索、去征服。为这些阶段开发Agent系统,将是一项充满挑战的任务,但也将为我们带来前所未有的机遇。

4.5基座大模型的构建

面向软件工程领域的基座大模型,是Agent在软件开发与维护中的“基石”。它不仅要能够处理代码数据,更要能够捕捉设计、架构、开发者讨论、程序动态执行、历史演化等多方面的信息。这样的模型,将为Agent提供更加全面、深入的知识支持,使其在软件开发与维护中发挥出更大的作用。

4.6软件工程知识的融入

在Agent的设计中,我们不能忽视软件工程领域的经典方法论和思想。这些方法论和思想,如同Agent的“灵魂”,指导着其在软件开发与维护中的每一步行动。通过融入这些知识,我们可以让Agent的解决方案更加有效、鲁棒和高效,从而推动软件工程的进一步发展。

五、结语

在这个AI技术日新月异的时代,我们应当全力以赴,将AI融入软件工程的每一个角落。通过不断优化Agent的应用、建立全面的评估体系、优化人机协同模式以及整合多样化感知模态,我们可以推动软件工程向更高层次发展。让我们携手共进,迎接LLM-DevOps带来的新纪元!

相关文章:

AI时代的软件工程:迎接LLM-DevOps的新纪元

在科技日新月异的今天,GPT的问世无疑为各行各业带来了一场深刻的变革,而软件工程领域更是首当其冲,正式迈入了软件工程3.0的新纪元。2024年,作为软件工程3.0的元年,伴随着软件工程3.0宣言的震撼发布,一个全…...

【机器学习】——卷积与循环的交响曲:神经网络模型在现代科技中的协奏

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…...

详解Servlet的使用

目录 Servlet 定义 动态页面 vs 静态页面 主要功能 Servlet的使用 创建Maven项目 引入依赖 创建目录 编写代码 打war包 部署程序 验证程序 Smart Tomcat 安装Smart Tomcat 配置Smart Tomcat插件 启动Tomcat 访问页面 路径对应关系 Servlet运行原理 Tomcat的…...

使用Java代码操作Kafka(五):Kafka消费 offset API,包含指定 Offset 消费以及指定时间消费

文章目录 1、指定 Offset 消费2、指定时间消费 1、指定 Offset 消费 auto.offset.reset earliest | latest | none 默认是 latest (1)earliest:自动将偏移量重置为最早的偏移量,–from-beginning (2)lates…...

MAC 怎么终端怎么退出和进入Anaconda环境

mac安装完anaconda 后,命令行窗口默认使用conda的,取消默认,用以下一行代码在命令行运行即可,重启终端: conda config --set auto_activate_base false # 将false改为true设置默认环境为conda进入conda环境&#xff…...

如何在 .gitignore 中仅保留特定文件:以忽略文件夹中的所有文件为例

在日常的开发工作中,使用 Git 来管理项目是不可或缺的一部分。项目中的某些文件夹可能包含大量的临时文件、生成文件或不需要版本控制的文件。在这种情况下,我们通常会使用 .gitignore 文件来忽略这些文件夹。然而,有时我们可能希望在忽略整个…...

USRP:B205mini-i

USRP B205mini-i B205mini-i都是采用工业级的FPGA芯片(-I表示industrial-grade),所以价格贵。 这个工业级会让工作温度从原来 0 – 45 C 变为 -40 – 75 C. 温度的扩宽,会让工作的稳定性变好。但是前提是你需要配合NI的外壳才行,你如果只买一…...

Oracle SQL优化②——访问路径

前言 访问路径指的就是通过哪种扫描方式获取数据,比如全表扫描、索引扫描或者直接通过ROWID获取数据。想要完成SQL优化,就必须深入理解各种访问路径。本文章详细介绍常见的访问路径。 一.常见访问路径 1.TABLE ACCESS FULL 表示全表扫描,…...

k8s1.30.0高可用集群部署

负载均衡 nginx负载均衡 两台nginx负载均衡 vim /etc/nginx/nginx.conf stream {upstream kube-apiserver {server 192.168.0.11:6443 max_fails3 fail_timeout30s;#server 192.168.0.12:6443 max_fails3 fail_timeout30s;#server 192.168.0.13:6443 max_fails3…...

Jenkins的环境部署

day22 回顾 Jenkins 简介 官网Jenkins Jenkins Build great things at any scale The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. 用来构建一切 其实就是用Java写的一个项目…...

Android开发教程案例源码分享-匹配动画多个头像飘动效果

Android开发教程案例源码分享-匹配动画多个头像飘动效果 匹配往往出现多个头像飘动,吸引人点击,有时出现的位置还不固定 一、思路: 用MotionLayout 二、效果图: 看视频更直观点: Android开发教程案例源码分享-匹配…...

微信分账系统供应链分润微信支付 (亲测源码)

搭建环境:nginxphp7.2mysql5.7 1.上传源码到网站根目录并解压 2.导入数据库文件到数据库 3.修改数据库链接文件/.env 4.设置运行目录为/public 5.伪静态设置成tp 6.后台地址:域名/zh9025.php 源码下载:https://download.csdn.net/down…...

C#里怎么样使用BinaryReader和BinaryWriter类?

C#里怎么样使用BinaryReader和BinaryWriter类? 二进制读取,有时候就比较有用。 比如在数据序列化到文件里,再从文件里读取出来。因为写入文件的类型有很多种,比如int/bool/long/byte/bytes等等。 又比如在串口通讯,或者网络通讯里,也需要把数据类型序列化到缓冲区,然后…...

k8s1.31版本最新版本集群使用容器镜像仓库Harbor

虚拟机 rocky9.4 linux master node01 node02 已部署k8s集群版本 1.31 方法 一 使用容器部署harbor (1) wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce systemctl enable docker…...

【大数据学习 | Spark-Core】Spark提交及运行流程

spark的集群运行结构 我们要选择第一种使用方式 命令组成结构 spark-submit [选项] jar包 参数 standalone集群能够使用的选项。 --master MASTER_URL #集群地址 --class class_name #jar包中的类 --executor-memory MEM #executor的内存 --executor-cores NUM # executor的…...

Sickos1.1 详细靶机思路 实操笔记

Sickos1.1 详细靶机思路 实操笔记 免责声明 本博客提供的所有信息仅供学习和研究目的,旨在提高读者的网络安全意识和技术能力。请在合法合规的前提下使用本文中提供的任何技术、方法或工具。如果您选择使用本博客中的任何信息进行非法活动,您将独自承担…...

Python 获取微博用户信息及作品(完整版)

在当今的社交媒体时代,微博作为一个热门的社交平台,蕴含着海量的用户信息和丰富多样的内容。今天,我将带大家深入了解一段 Python 代码,它能够帮助我们获取微博用户的基本信息以及下载其微博中的相关素材,比如图片等。…...

使用element-plus el-table中使用el-image层级冲突table表格会覆盖预览的图片等问题

在日常开发项目中 使用element-plus 中表格中使用 el-image的点击图片出现图片预览 会出现以下问题 表格一行会覆盖预览的图片 鼠标滑过也会显示表格 el-image 的预览层级和表格的层级冲突导致的。 解决方法:有两种一种是直接使用样式穿透 第二种推荐方法 使用官网推…...

leetcode_25_k个一组翻转链表

力扣:k个一组翻转链表 链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/ 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k…...

Python Selenium:Web自动化测试与爬虫开发

Python Selenium:Web自动化测试与爬虫开发 Python Selenium:Web自动化测试与爬虫开发安装Selenium设置WebDriver基础示例页面元素交互处理JavaScript和Cookies浏览器控制屏幕截图Headless Mode结束会话错误处理与调试 ***本文由AI辅助生成*** Python Se…...

C语言菜鸟入门·关键字·int的用法

目录 1. int关键字 1.1 取值范围 1.2 符号类型 1.3 运算 1.3.1 加法运算() 1.3.2 减法运算(-) 1.3.3 乘法运算(*) 1.3.4 除法运算(/) 1.3.5 取余运算(%) 1.3.6 自增()与自减(--) 1.3.7 位运算 2. 更多关键字 1. int关键字 int 是一个关键字&#xff0…...

Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化

一、背景 线上程序连接mongos超时,mongo监控显示连接数已使用100%。 java程序报错信息: org.mongodb.driver.connection: Closed connection [connectionId{localValue:1480}] to 192.168.10.16:3717 because there was a socket exception raised by…...

论文阅读--Evidence for the utility of quantum computing before fault tolerance

量子计算有望在某些问题上提供比传统计算更快的速度。然而,实现其全部潜力的最大障碍是这些系统固有的噪声。这一挑战被广泛接受的解决方案是实现容错量子电路,而这超出了当前处理器的能力范围。我们在此报告了在嘈杂的127 量子比特处理器上进行的实验&a…...

Maven的安装——给Idea配置Maven

一、什么是Maven? Maven是一个开源的项目管理工具,它主要用于Java项目的构建、依赖管理和项目生命周期管理。 二、准备环境 maven安装之前,我们要先安装jdk,确保你已经安装了jdk环境。可以通过【win】【r】打开任务管理器,输入…...

【虚拟机】VMWare的CentOS虚拟机断电或强制关机出现问题

VMware 虚拟机因为笔记本突然断电故障了,开机提示“Entering emergency mode. Exit the shell to continue.”,如下图所示: 解决方法:输入命令: xfs_repair -v -L /dev/dm-0 注:报 no such file or direct…...

如何在WPF中嵌入其它程序

在WPF中嵌入其它程序&#xff0c;这里提供两种方案 一、使用WindowsFormHost 使用步骤如下 1、添加WindowsFormsIntegration和System.Windows.Forms引用 2、在界面上放置WindowsFormHost和System.Windows.Forms.Panel 1 <Grid> 2 <WindowsFormsHost> 3…...

集合Queue、Deque、LinkedList、ArrayDeque、PriorityQueue详解

1、 Queue与Deque的区别 在研究java集合源码的时候&#xff0c;发现了一个很少用但是很有趣的点&#xff1a;Queue以及Deque&#xff1b; 平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用&#xff0c;但是一直都不知道Queue的作用&#xff0c;于是就直接官方…...

实战 | C#中使用YoloV8和OpenCvSharp实现目标检测 (步骤 + 源码)

导 读 本文主要介绍在C#中使用YoloV8实现目标检测,并给详细步骤和代码。 详细步骤 【1】环境和依赖项。 需先安装VS2022最新版,.NetFramework8.0,然后新建项目,nuget安装 YoloSharp,YoloSharp介绍: https://github.com/dme-compunet/YoloSharp 最新版6.0.1,本文…...

OpenCV基本图像处理操作(六)——直方图与模版匹配

直方图 cv2.calcHist(images,channels,mask,histSize,ranges) images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的…...

Hive离线数仓结构分析

Hive离线数仓结构 首先&#xff0c;在数据源部分&#xff0c;包括源业务库、用户日志、爬虫数据和系统日志&#xff0c;这些都是数据的源头。这些数据通过Sqoop、DataX或 Flume 工具进行提取和导入操作。这些工具负责将不同来源的数据传输到基于 Hive 的离线数据仓库中。 在离线…...

《macOS 开发环境配置与应用开发》

一、引言 macOS 作为一款强大而流行的操作系统&#xff0c;为开发者提供了丰富的开发机会和优秀的开发环境。无论是开发原生的 macOS 应用&#xff0c;还是进行跨平台开发&#xff0c;了解和掌握 macOS 开发环境的配置以及应用开发的方法至关重要。本文将详细介绍 macOS 开发环…...

DataGear 5.2.0 发布,数据可视化分析平台

DataGear 企业版 1.3.0 已发布&#xff0c;欢迎体验&#xff01; http://datagear.tech/pro/ DataGear 5.2.0 发布&#xff0c;图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强&#xff0c;具体更新内容如下&#xff1a; 重构&#xff1a;各模块管理功能访问路径…...

Knife4j快速入门

1 概述 Knife4j是一个用于生成和展示API文档的工具&#xff0c;同时它还提供了在线调试的功能&#xff0c;下图是其工作界面。 了解&#xff1a; Knife4j有多个版本&#xff0c;最新版的Knife4j基于开源项目springdoc-openapi&#xff0c;这个开源项目的核心功能就是根据Sprin…...

pcap_set_buffer_size()函数

功能简介 pcap_set_buffer_size()函数主要用于设置数据包捕获的内核缓冲区大小。这个缓冲区是操作系统内核用于临时存储捕获到的数据包的区域。通过调整缓冲区大小&#xff0c;可以在一定程度上优化数据包捕获的性能&#xff0c;特别是在高流量网络环境或者需要长时间捕获数据包…...

Ubuntu24.04——软件包系统已损坏

如果你在使用 Ubuntu 时遇到“软件包系统已损坏”的问题&#xff0c;可以尝试以下步骤来修复它&#xff1a; 更新软件包列表&#xff1a; 打开终端&#xff0c;运行以下命令以更新软件包列表&#xff1a; sudo apt update修复损坏的软件包&#xff1a; 运行以下命令来修复损坏的…...

项目实战:Vue3开发一个购物车

这段HTML代码实现了一个简单的购物车实战小项目的前端页面&#xff0c;结合了Vue.js框架来实现数据响应式和交互逻辑。页面展示了购物车中的商品项&#xff0c;每个商品项有增减数量的按钮&#xff0c;并且能显示商品总数以及目前固定为0元的商品总价和总价计算。 【运用响应式…...

OpenOCD之J-Link下载

1.下载USB Dirver Tool.exe&#xff0c;选择J-Link dirver&#xff0c;替换成WinUSB驱动。&#xff08;⭐USB Dirver Tool工具可将J-Link从WinUSB驱动恢复为默认驱动⭐&#xff09; 下载方式 ①官方网址&#xff1a;https://visualgdb.com/UsbDriverTool/ ②笔者的CSDN链接&…...

C++中定义类型名的方法

什么是 C 中的类型别名和 using 声明&#xff1f; 类型别名与using都是为了提高代码的可读性。 有两种方法可以定义类型别名 一种是使用关键字typedef起别名使用别名声明来定义类型的别名&#xff0c;即使用using. typedef 关键字typedef作为声明语句中的基本数据类型的一…...

241124学习日志——[CSDIY] [ByteDance] 后端训练营 [14]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…...

丹摩|丹摩智算平台深度评测

1. 丹摩智算平台介绍 随着人工智能和大数据技术的快速发展&#xff0c;越来越多的智能计算平台涌现&#xff0c;为科研工作者和开发者提供高性能计算资源。丹摩智算平台作为其中的一员&#xff0c;定位于智能计算服务的提供者&#xff0c;支持从数据处理到模型训练的全流程操作…...

VSCode 快捷键

箭头函数 安装VSCODE插件用于在编辑器中生成ES6语法的JavaScript的代码段&#xff08;支持JavaScript和Typescript&#xff09;。 安装成功后输入an回车就可以了 (params) > {} 1、显示快捷键列表 快捷键&#xff1a;⌘ K S 可以通过上述按键显示vscode的快捷键列表&am…...

Java基础-Java多线程机制

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、引言 二、多线程的基本概念 1. 线程与进程 2. 多线程与并发 3. 多线程的优势 三、Java多线程的实…...

【创建型设计模式】单例模式

【创建型设计模式】单例模式 这篇博客接下来几篇都将阐述设计模式相关内容。 接下来的顺序大概是&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 一、什么是单例模式 单例模式是一种创建型设计模式&#xff0c;它保证一个类仅有一个实例&#…...

SpringBoot集成多个rabbitmq

1、pom文件 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><versio…...

JavaScript将至

JS是什么&#xff1f; 是一种运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;实现人机交互效果 作用捏&#xff1f; 网页特效 (监听用户的一些行为让网页作出对应的反馈) 表单验证 (针对表单数据的合法性进行判断) 数据交互 (获取后台的数据, 渲染到前…...

Java中的线程池(如果想知道Java中有关线程池的知识,那么只看这一篇就足够了!)

前言&#xff1a;线程池是 Java 中用于高效管理并发任务的工具&#xff0c;通过复用线程、降低线程创建销毁的开销&#xff0c;提升系统性能与响应速度。它帮助开发者更好地控制线程生命周期和资源消耗&#xff0c;是高并发应用的重要组成部分。 ✨✨✨这里是秋刀鱼不做梦的BLO…...

Java 获取本机 IP 地址的方法

文章目录 一、使用 InetAddress.getLocalHost二、遍历网络接口获取 在 Java 编程中&#xff0c;若有本机的 IP 地址的需求&#xff0c;小编来展示一下方法&#xff1a; 一、使用 InetAddress.getLocalHost 一是最基本的获取本机 IP 地址的方式。 示例代码&#xff1a; impo…...

开源动态表单form-create-designer 扩展个性化配置的最佳实践教程

在开源低代码表单设计器 form-create-designer 的右侧配置面板里&#xff0c;field 映射规则为开发者提供了强大的工具去自定义和增强组件及表单配置的显示方式。通过这些规则&#xff0c;你可以简单而高效地调整配置项的展示&#xff0c;提升用户体验。 源码地址: Github | G…...

c语言数据结构与算法--简单实现线性表(顺序表+链表)的插入与删除

老规矩&#xff0c;点赞评论收藏关注&#xff01;&#xff01;&#xff01; 目录 线性表 其特点是&#xff1a; 算法实现&#xff1a; 运行结果展示 链表 插入元素&#xff1a; 删除元素&#xff1a; 算法实现 运行结果 线性表是由n个数据元素组成的有限序列&#xff…...

5、AI测试辅助-生成测试用例思维导图

AI测试辅助-生成测试用例思维导图 创建测试用例两种方式1、Plantuml思维导图版本 (不推荐&#xff09;2、Markdown思维导图版本&#xff08;推荐&#xff09; 创建测试用例两种方式 完整的测试用例通常需要包含以下的元素&#xff1a; 1、测试模块 2、测试标题 3、前置条件 4、…...