1、中国信息通信研究院人工智能研究所华为云计算技术有限公司2024年9月智能化软件开发落地智能化软件开发落地实践指南实践指南(2022024 4 年年)前言前言2024 年政府工作报告首次提出“人工智能+”战略行动,旨在推动人工智能赋能各行各业。以大模型为代表的新一代人工智能技术迅猛发展,已成为软件工程领域智能化转型的关键驱动力,为软件开发、测试等环节注入新智力。智能化软件开发工具凭借其强大的代码理解和生成能力,有效降低了开发人员的技术门槛,并提高开发效率和质量,进一步推动软件开发领域的进步。然而,在软件开发的智能化能力建设和应用过程中,仍面临诸多挑战,如代码大模型选择困难、开发工具的工程化建设复
2、杂、智能化能力建设无参考、开发场景选择和落地难,以及与现有开发工具或流水线的集成难等问题。为此,本指南旨在为正在进行软件开发智能化转型的企业提供一份实用指南,为企业制定落地策略、建设智能开发能力体系提供有力参考。本指南系统梳理了智能化软件开发的发展历程、现状和面临的挑战,结合大模型和软件开发特点,提出了具体的落地方向、路径和框架,详细阐述了落地所需的核心能力和使能能力,并对多个行业的落地案例进行了深入剖析,最后对智能化软件开发的发展趋势进行了展望。由于大模型等人工智能技术产业仍处于快速发展阶段,智能开发相关的技术产品、服务和应用也在不断演变,我们的认识将随着产业实践而不断深化,报告存在的不足之
3、处,恳请大家批评指正。目录目录一、智能开发发展概述.1(一)软件工程步入 3.0 时代.1(二)智能开发发展现状.5(三)智能开发价值显现.7(四)智能开发落地挑战.9二、智能开发落地策略.11(一)智能开发落地原则.11(二)智能开发落地步骤.12(三)智能开发落地框架.15三、智能开发核心能力建设.17(一)代码生成与补全.17(二)单元测试用例生成.19(三)代码转换与优化.21(四)代码解释与注释.22(五)代码检查与修复.23(六)研发问答.24四、智能开发使能能力建设.26(一)代码数据处理能力.26(二)代码大模型优化能力.28(三)智能开发能力评估.30(四)智能开发安全能力.
4、32(五)其他工程化能力.36五、智能开发落地案例分析.41(一)云服务行业案例.41(二)软件服务业案例.42(三)电力行业案例.44(四)金融行业案例.46(五)制造行业案例.47六、总结与展望.50图 目 录图 目 录图 1软件工程发展历程图.1图 2软件工程 3.0 示意图.3图 3智能开发落地步骤图.12图 4企业智能化能力自我诊断等级图.13图 5智能开发能力实施的多阶方案图.14图 6智能开发落地框架示意图.15图 7三“码”合一方案图.19图 8单测生成实战方案示意图.21图 9基于 RAG 的代码理解流程图.23图 10数据处理流程图.26图 11代码大模型优化过程示意图.2
5、9图 12智能开发能力评估架构图.31图 13安全能力体系架构图.33图 14数据安全治理流程示意图.33图 15模型安全治理架构图.35图 16应用安全治理框架图.35图 17RAG 落地流程示意图.39图 18某云服务企业案例落地方案示意图.42图 19某软件服务企业案例落地方案示意图.44图 20某电力行业企业案例落地方案示意图.45图 21某银行案例落地方案示意图.47图 22某家电制造企业案例落地方案示意图.49表 目 录表 目 录表 1准确性评估场景与指标参考清单.32表 2提示词示例 1.38表 3提示词示例 2.38智能化软件开发落地实践指南(2024 年)1一、智能开发发展概
6、述一、智能开发发展概述随着人工智能技术的不断进步,特别是大模型能力的持续提升,软件工程领域正迎来前所未有的变革,软件开发的流程和模式正被重新定义,智能化进程显著加速。本章将简要回顾软件工程的发展历程,重点介绍软件工程 3.0 的发展特点,以及智能化软件开发(以下简称:智能开发)领域发展现状,并深入探讨智能化能力为软件开发带来的价值提升,最后梳理落地挑战。(一)软件工程步入(一)软件工程步入 3.0 时代时代1.软件工程发展历程软件工程自 1968 年诞生以来,其发展历程可分成三个阶段,包括软件工程 1.0、软件工程 2.0 和软件工程 3.0,如图 1 所示。图 1 软件工程发展历程图软件工程
7、 1.0,即第一代软件工程,亦称为“传统软件工程”。本阶段的发展起点可追溯至上个世纪六十年代,随着大容量、高速度计算机的问世,软件开发需求急剧增长,软件系统的规模越来越大,复杂程度越来越高,可靠性问题更加突出。为解决该类软件危机,智能化软件开发落地实践指南(2024 年)21968 年北大西洋公约组织(NATO)在国际会议上首次提出“软件工程”概念,期望将软件开发带出混乱的局面,走向有纪律、有流程的规范化之路。软件工程 1.0 推崇结构化方法,重视流程和文档规范化等工程实践,对提升软件产品交付成功率和质量有重大意义。但在软件工程 1.0 时期,由于软件被当作传统的工业制造产品进行交付,无法及时
8、满足业务需求的变化和更新,使得交付周期长。软件工程 2.0,亦称“敏捷软件工程”。本阶段的发展自 2001 年“敏捷软件开发宣言1”发布起,通过践行敏捷开发最佳实践,实现持续集成(CI)、持续交付(CD)和快速迭代以更好地满足日益变化的业务需求。软件工程 2.0 时期,软件形态从“产品”发展为“服务”,而服务的性能、效率、可靠性、可持续性也更加重要,这推动人们将软件开发和运维融合起来,DevOps 模式应运而生,使得软件交付效率更加高效。但本时期的开发、测试等核心工作,多以人工为主,技术门槛和研发成本居高不下,对技术人员的依赖性非常高,虽然陆续有自动化技术的出现和落地,对效能提升方面未有显著成
9、效,“软件工程没有银弹2”这一观点仍然有效。软件工程 3.0,亦称“智能化软件工程”。2022 年底以来,随着ChatGPT 等大模型相继发布,软件工程迎来新一轮变革。大模型凭借其强大的理解和生成能力,通过代码生成、代码续写、测试用例生成、智能问答等能力,为软件工程带来了智能化能力升级,为提1https:/agilemanifesto.org/2没有银弹:软件工程的本质与偶然智能化软件开发落地实践指南(2024 年)3升软件质量和效率带来了新动力,全新的软件开发范式正在诞生。软件工程中到底有没有“银弹”,在大模型时代成为热议的话题。2.软件工程 3.0 发展特点软件工程 3.0 围绕“智能化”
10、理念以构建智能化助手为起点,通过使用大模型为核心的 AI 技术驱动软件全生命周期能力升级(如图 2所示)。本阶段以构建支持软件开发、测试或运维等环节的 AI 模型为基础,将智能化技术逐步运用至软件工程各阶段,促进软件研发和运营效率的提升、质量的跃进、成本的降低。本阶段的发展特性较为明显,核心特点包括智能化、数据驱动性、交互性、自适应和持续优化。图 2 软件工程 3.0 示意图智能化,软件工程中各工具都将逐步实现对大模型等 AI 能力的调取和应用,以实现工具自身能力的提高,为智能化软件工程打下坚实基础。例如,将大模型与测试平台对接,提供测试用例生成、测试结果分析等能力,提高测试平台效能;将大模型
11、与用户界面智能化软件开发落地实践指南(2024 年)4(UI)测试工具对接,提供界面要素和组件等识别能力,提高 UI 测试准确率3。数据驱动性,高质量数据是大模型成功的关键,“Garbage In,Garbage Out”仍然适用。在软件工程中,代码数据集、需求数据集、规范类文档数据集、测试用例数据集、日志数据集等,均将应用于大模型的训练、调优和推理过程,其质量高低直接影响推理结果,从而影响软件工程智能化能力带来的效果。例如,使用了精调代码数据集训练后的模型,相比基座模型在 MultiPL-E 上的评测结果绝对值提升了 8.2%,而使用了未精调的普通的代码加注释的数据集训练后的模型,评测结果反
12、而降低了 5.5%4。交互性,包括两个方面,一是大模型与人之间的人机交互,二是大模型与工具间的交互。人机交互将不断相互启发、相互促进,大模型可学习特定项目的上下文和研发人员的偏好,并根据更优的提示词,激发出更符合期望的推理结果,提高协作效率;大模型与工具间交互,将通过智能体(AI Agent)、编排等方式,实现大模型对各工具的调取和执行,以解决更加复杂的工程级问题,推动全生命周期智能化能力的提升。例如,2024 年 3 月 Cognition 公司发布的全球首个 AI 程序员 Devin,以及 8 月 Cosine 公司发布的全球最强 AI 程序员 Genie,对复杂的软件工程问题解决能力不断
13、得到刷新。自适应性,根据对工程级代码的更优理解能力,以及检索增强3中国信息通信研究院调研4Magicoder:Empowering Code Generation with OSS-INSTRUCT智能化软件开发落地实践指南(2024 年)5生成(RAG)等技术的辅助能力,大模型的自学习能力越发强大,这使得智能化软件工程对场景化的业务和数据具备更好的理解和适应能力,从而实现自主提升其推理性能和准确性。例如,代码大模型可在不同角色设定下展现良好的自适应性,MetaGPT 为大模型赋予了多个人设(产品经理、架构师、开发工程师等)后,其HumanEval 评测结果为 85.9%,相比未设定人设的大模
14、型评测结果绝对值提升了 18.9%5。持续优化,通过建立数据飞轮和反馈闭环,根据用户反馈、场景化数据和监控数据对大模型进行持续改进,从而使软件工程智能化能力持续提升。例如,某银行的智能开发助手上线后,每周由研发部门的各团队提交优秀代码数据,对代码大模型进行定期的优化训练、测试和部署,从而持续保持和提升开发助手的能力6。(二)智能开发发展现状(二)智能开发发展现状开发是软件工程全生命周期中的核心环节,开发人员大约有三分之二的工作时间与开发代码直接相关7,应用大模型助力软件开发具有得天独厚的优势。一方面开发人员对新技术的接纳度较高,能够更快地适应开发新范式;另一方面各类编程语言对业务的依赖度不是非
15、常高,使得代码生成能力的普适性较强。因此软件开发是大模型率先应用落地的领域之一,Gartner 已将“AI 增强软件开发”列5MetaGPT:Meta Programming for AMulti-Agent Collaborative Framework6中国信息通信研究院调研7https:/thenewstack.io/how-much-time-do-developers-spend-actually-writing-code/智能化软件开发落地实践指南(2024 年)6入 2024 年十大战略技术趋势之一8。智能开发工具市场迅速发展,国内外百花齐放。国外,截止2024 年 4 月微软的
16、 GitHub Copilot 拥有 180 万付费订阅用户,近60%财富 500 强公司使用 Copilot AI 工具9,GitHub Copilot 的市场占有率达到 64.5%10。亚马逊的 CodeWhisperer、谷歌的 Project IDX 等产品虽难以并肩,但依靠其强大的用户规模基础,仍具备较强竞争力。国内,智能化软件开发工具已发布近 40 余款11,如华为、阿里、百度等提供的智能开发工具产品,其核心功能较为同质化,但工具的性能、工程化能力、用户体验度、整体准确度等方面存在差异。智能开发工具能力持续提升,应用行业更加多元化。智能开发工具重点聚焦于代码生成、代码补全、代码注释
17、、代码检查、智能单测等能力。一方面代码大模型能力的持续提升为工具提供了更强的 AI 底座,根据智源大模型排行榜显示,榜首大模型在 HumanEval数据集上的 Pass112从 2023 年 8 月的 24.4%提升至 2024 年 8 月的81.1%13;另一方面通过 RAG、自学习、AIAgent 等技术的加持,为工具提供了更强的工程化能力,如微软的 Copilot WorkSpace 作为 AI辅助的下一代开发工具,为工程级代码提供了更优的理解和生成能力。随着能力的持续提升,智能开发工具被越来越多行业所接受和应用,包括如互联网等科技行业的成熟落地,金融、电信、软件服8Gartner202
18、4 十大战略技术趋势9https:/ 202411https:/ai- 是指代码大模型为每个问题生成 1 个答案,其答案通过测试的比例。13https:/ 年)7务等行业的逐步落地,能源、零售、教育、制造、物流等领域的试点试行,未来智能开发工具将为各行各业的软件研发提供强有力支撑。应用需求快速增长,编码阶段提效显著。无论个人还是企业开发者,使用智能开发工具的人数和频次越来越多。根据 StackOverflow 2024 年的全球开发者调研显示,76%的受访者正在或计划使用 AI 工具进行软件开发,使用 AI 工具的开发者数量占比从去年44%提升至 62%14。根据 CSDN 2024 年的调查
19、显示,48.6%开发者每天使用智能开发工具15。根据 Deloitte 报告指出,超过 60%的金融机构正在探索或已经实施了智能开发工具以加速创新。智能开发工具的使用助力开发人员编码效率提升明显。根据 GitHub 报告显示,使用 GitHub Copilot 的开发者编码速度提升 55%,编写代码量增加46%16。根据中国信通院 2024 年初调研问卷数据显示,受访者在开发阶段使用 AI 工具的提效最为明显,人效提升达到约 40%。(三)智能开发价值显现(三)智能开发价值显现在大模型应用浪潮中,软件开发的智能化转型正成为企业提升软件产品竞争力的关键因素,通过智能化能力的注入,为软件开发的价值
20、提升带来巨大动力。提升开发效率,降低项目风险。通过代码生成、代码补全和问答等能力,开发人员能够更迅速地编写高质量代码,显著减少手动14the 2024 results from Stack OverflowsAnnual Developer Survey152024 中国开发者调查报告16The economic impact of theAI-powered developer lifecycle and lessons from GitHub Copilot智能化软件开发落地实践指南(2024 年)8调试和错误修复时间。同时可降低项目对开发人员的依赖,通过智能开发工具的学习和记忆能力,一方
21、面可辅助新的开发人员快速开发出符合项目需求和规范的代码,另一方面可帮助开发人员快速学习新的编程语言,从而减少人员流动带来的项目风险。根据 BIS 年度经济报告显示,智能开发工具对程序员的生产力提升超过 50%,且其中仅有小部分来自于代码的直接生成,而更多是通过与机器交互的过程激发了程序员的创造力17。改善代码质量,提高产品稳定性。通过代码质量检查和智能单测等能力,开发人员能够快速进行代码验证和测试,及时发现并修复潜在的问题和漏洞,如代码缺陷、代码异常、代码风险等,从而帮助开发人员编写出更高质量的代码,降低软件发布后的故障率,提升软件的稳定性和性能。例如,GitHub Copilot 可帮助开发
22、人员在编码过程中解决超过三分之二的漏洞18。加速产品创新迭代,增强企业竞争力。通过提升开发效率和改善产品质量,企业能够更快地推出创新产品,抢占市场先机,从而在激烈的市场竞争中脱颖而出。一方面,智能化的软件开发流程使开发周期缩短,企业能够更灵活地适应市场变化,加快产品迭代速率;另一方面,智能开发工具的辅助使得开发人员能够从重复性的繁琐的低端编码工作中释放出来,从而拥有更多时间投入创新相关工作,提升企业创新能力。例如,2023 年 5 月 GitHub 首席执行官17国际清算银行(BIS)2024 年度经济报告18https:/ 年)9在全球网络峰会(Web Summit)上,演示 GitHub
23、Copilot X 实现简单的贪吃蛇小游戏用时为 18 分钟,而 2024 年 8 月通过真实操作,使用 Deepseek 开发助手(V2)仅需 2 分钟左右,开发时长大幅减少,开发人员将有更多时间思考产品创新。(四)智能开发落地挑战(四)智能开发落地挑战随着智能化技术在软件开发领域的广泛应用,其带来的质效提升日益显著。然而,企业在推进软件开发的智能化能力建设和落地时,仍面临诸多挑战,涵盖组织、技术、应用落地及安全等多个层面。组织变革和转型的挑战。软件开发的智能化转型首先带来的是组织变革,一是组织文化的重塑,其落地要求组织具备开放合作、持续学习和创新的文化氛围,促进跨部门沟通与协作,打破信息孤
24、岛;二是全员认知水平的提升,自顶向下每位员工都应深刻理解智能化的潜力与挑战,客观且正确地了解大模型等人工智能技术及其作用;三是人才结构的调整与补充,由于数据治理及模型训练调优等过程需要专业技术人员参与,因此补充人才,或调整或融合 AI 团队和软件工程团队的结构,方能匹配能力建设和应用的需求。模型技术迭代及与工具融合的挑战。当前智能开发能力建设的核心技术是大模型,因此围绕大模型面临着技术迭代的挑战。一是大模型的技术能力仍以较快速度迭代更新,企业需配备良好的维护更新机制,以保证智能开发工具的底座 AI 能力;二是智能开发能力智能化软件开发落地实践指南(2024 年)10如何与现有软件研发工具集有效
25、融合或改造,从而提升软件工程全流程能力水平。产品选型与应用场景落地的挑战。企业需根据自身行业特点、业务需求及已有 AI 能力,选择适合的业务场景,合理规划落地路径和方案。然而,一方面现有代码大模型和智能开发工具数量繁多,如何建设或选择出一款合适的模型或工具,如何评价模型或工具的能力,均是落地时考虑的重点;另一方面不同业务场景的编程语言可能不尽相同,或代码数据集或规范不一致,如何选择最优场景试点落地,如何优化模型或工具使其满足多场景需求,同样面临挑战。代码数据、模型和工具的安全性挑战。生成式代码可能会带来更多不可控的风险,因此企业应从数据、模型和工具多维度构筑风险防线,以应对安全挑战。第一道数据
26、防线,面向模型训练和调优阶段所需的代码数据集,可能面临敏感代码数据的泄露、未经许可代码的训练、非法代码的推理等问题;第二道模型防线,面向代码大模型在推理和管理阶段,可能面临暴力攻击、非法套取、非法提问、敏感内容推理、被恶意使用生成恶意软件代码或攻击脚本等问题;第三道工具防线,对智能开发工具的输入输出进行检查和处理,并关注关联代码库、第三方软件开发工具的数据传输和集成安全,构筑最后一层安全围栏减少应用风险。智能化软件开发落地实践指南(2024 年)11二、智能开发落地策略二、智能开发落地策略随着代码大模型和智能开发工具如雨后春笋般出现,各行业陆续规划和试点将智能化能力有效地落地应用于开发环节。本
27、章将首先总结智能开发落地遵守的主要原则,其次就落地关键步骤进行深入剖析,最后梳理当前行业的通用落地框架。(一)智能开发落地原则(一)智能开发落地原则智能化软件开发落地是指应用方企业通过采购或自研等方式,构建智能化能力,包括代码大模型能力和智能开发工具能力,并将其应用落地于软件开发过程。作为大模型应用的重要场景,根据中国信息通信研究院对金融、软件、电信等行业关于智能开发落地实践的调查显示,智能开发能力的落地通常考虑以下主要原则。目标导向原则,以企业战略定位为首要目标,落地策略和方案应在该目标指导下完成。如是否落地智能开发,落地范围预计多大,预期目标是什么,都应遵循企业组织级的人工智能战略目标。因
28、地制宜原则,从企业实际情况出发,清晰了解已有 AI 基础及成本预算,从而制定合适的策略。如企业自身的科技实力、人才储备、AI 基础设施能力、资金支持等情况,应作为落地基础进行考虑。应用优先原则,从业务实际需求出发,明确亟需解决的问题,以及为业务赋能的目标。如软件开发过程中面临的最大问题是什么,最耗成本和资源的环节是哪些等。标准化原则,参考行业标准开展能力构建,以保证数据质量、模型性能及工具可塑性。如代码数据如何处理如何配比,模型如何智能化软件开发落地实践指南(2024 年)12调优,工程化能力如何建设,推理准确性应达到何等水平,均可以行业标准为依据,少走弯路,提高建设质量。安全性原则,围绕能力
29、建设全过程构建安全保障机制,降低新工具引入的风险,提升安全治理能力。如代码大模型推理安全、数据安全、安全围栏建设等。持续改进原则,构建持续反馈机制和数据驱动流程,通过效能指标数据推动工具和流程的持续改进。如面临模型退化、新项目新代码数据等情况,应通过持续改进从而保证代码大模型的能力稳定性。(二)智能开发落地步骤(二)智能开发落地步骤落地智能化能力是一个全面且系统化的过程,尤其面向已成体系的软件开发过程,构建清晰明确的落地步骤,将为有效落地提供良好指引。智能开发落地过程可划分为自我诊断、方案设计、部署实施、持续优化四个关键步骤,如图 3 所示。图 3 智能开发落地步骤图开展多维度自我诊断,科学客
30、观定位自身能力。诊断维度上,通过应用场景诊断,明确智能开发能力在企业内部的落地场景,帮助梳理当前需求和未来规划的需求;通过技术能力诊断,明晰企业在人工智能领域的优势和不足,明确是否具备足够技术储备开发或智能化软件开发落地实践指南(2024 年)13维护代码大模型或智能开发工具的能力;通过基础设施诊断,深入了解企业现有算力资源、存储资源、数据资源等,帮助企业做好基础性准备;通过安全可信诊断,明确企业自身对安全可信的要求,如代码数据安全性要求、用户安全性要求、研发场景安全性要求等,从而便于制定安全保障机制。能力定位上能力定位上,企业根据战略规划、基础设施、数据资产、人才储备、经费预算等方面的能力现
31、状,并结合安全可信要求,综合研判自身已有智能化能力等级,可划分五个不同等级(如图 4 所示)。图 4 企业智能化能力自我诊断等级图根据自我诊断及能力定位结果,选择合适的实施方案。L1 企业适宜采用低成本的智能开发工具 SaaS 服务,以便快速达到应用效果;L2 企业可采购软硬件集成的智能开发工具(如智能编码一体机),以实现智能开发能力的本地化部署,形成一体化解决方案;L3 企业可采购包含代码大模型的智能开发工具进行私有化部署,保障企业级代码资产的安全,并通过采购模型调优和升级等服务,保证大模型能力的稳定;L4 企业可采购解耦的代码大模型和智能开发工具,智能化软件开发落地实践指南(2024 年)
32、14或者选用高性能大模型训练微调成自有代码大模型,构建定制化的智能开发能力;L5 企业依托丰富的算力、数据、人才等基础,可考虑自主研发代码大模型,并依此构建软件工程领域的工程化能力,全面赋能软件开发流程,引领行业创新。图 5 智能开发能力实施的多阶方案图根据实施方案按计划部署和实施。一是明确项目的时间节点、资源配置、任务分工等,并制定风险管理计划;二是根据能力等级开展必要的软硬件采购与资源配置,确保相关工具和平台能够满足落地要求;三是开展代码大模型和智能开发工具的部署、评估和测试,确保其准确性、稳定性、安全性和可靠性;四是对使用人员进行培训并提供技术支持,选定试点项目或团队;五是根据试点结果进
33、行优化调整,并逐步宣贯和拓展至更多团队。根据实施效果持续优化和改进。建立有效的指标体系和监控机制,一方面持续地自动化监测大模型推理效果和应用成效,如推理准确率、代码采纳率、代码修复率、代码生成占比等指标;另一方智能化软件开发落地实践指南(2024 年)15面定期收集用户反馈,根据数据分析结果明确问题和优化方向。构建大模型维护更新机制,通过获取和生成高质量代码数据集,开展模型的定期训练或调优,持续优化代码大模型质量。(三)智能开发落地框架(三)智能开发落地框架智能化软件开发的能力落地框架(如图 6 所示)由三部分组成,分别包括模型层、服务层和应用层,应用层的能力是模型层和服务层能力的组合体现。图
34、 6 智能开发落地框架示意图模型层以各类 AI 模型为主体,为智能开发提供 AI 底座能力。本层建设目标是在基座大模型的基础上训练调优生成代码大模型,而代码大模型普遍由 2 个大模型组成,分别是代码补全大模型和研发问答大模型。代码补全大模型的任务是代码生成与补全,由于其使用频率最高,通常设计为参数规模较小但推理速度较快的如 3B、7B、13B 等较小型模型,以匹配编码速度;研发问答大模型的任务是应对更为复杂的代码解释、代码检查和研发问答等各类任务,通常设计为参数量更庞大的如 65B、72B、128B 等较大规模模型,以满足复杂的软件开发需求。智能化软件开发落地实践指南(2024 年)16服务层
35、依托 AI 底座能力,运用更多技术手段增强或调度大模型能力。通过模型调度,针对工具层不同的操作精确匹配调度相应模型,确保模型资源的合理分配与高效利用;通过提示词封装,对用户常用功能设计提示词模板,丰富用户问题的表述,使模型能够更全面、准确地理解用户意图,提供更精确的推理结果;通过 RAG 将内部数据形成知识库注入推理过程,提升推理结果更符合项目特性;通过 AI Agent 辅助,以感知和记忆能力将复杂研发问题进行拆解,以决策和执行能力调用各类工具或组件,提升问题解决能效。应用层以用户为核心提供各类智能开发功能,主要包括智能编码和开发者辅助两大类功能,并将其集成于 IDE(集成开发环境)等工具中
36、为用户提供直接服务。应用层能力一方面基于服务层对大模型能力进行了加强,如对工程级别的代码理解和生成能力更强,能够智能识别 IDE 当前打开的多文件内容,并将其作为大模型输入的上下文,提升跨文件感知能力;另一方面应用层为工具打造了更优异的用户体验,如兼容适配主流 IDE、操作系统以及常见自然语言等,建设自定义配置相关功能,优化输入输出性能,建立用户反馈机制等,满足开发者需求并提升体验度。智能化软件开发落地实践指南(2024 年)17三、智能开发核心能力建设三、智能开发核心能力建设在软件开发过程中,无论是企业开发者还是个人开发者,都面临重复书写代码、缺少编写单元测试用例和代码注释的习惯等问题,从而
37、导致编码效率低下或存在质量隐患。因此,在智能开发能力建设过程中,可优先构建核心能力,如代码生成与补全、单元测试用例生成、代码转换与优化等能力可提升编码效率,代码解释与注释生成等能力可增强代码可读性,代码检查与修复等能力可提高代码质量。本章重点对各核心能力的构建进行剖析19。(一)代码生成与补全(一)代码生成与补全代码生成与补全是指根据自然语言描述或代码上下文,自动生成或补全代码的能力。通过代码生成与补全,可帮助开发人员提高编程效率、降低开发门槛。1.关键能力 代码生成能力:基于自然语言描述,生成有效的片段级或文件级或工程级代码;代码补全能力:根据代码上下文,补全有效的引用、类/方法/函数名称、
38、行级或片段级或文件级或工程级代码;多维兼容能力:支持多种主流(或所需)编程语言和开发框架;代码质量能力:生成和补全的代码满足基本的质量规范要求19本章核心能力的阐述以中国信息通信研究院联合发布的智能化软件工程技术和应用要求:第 1 部分代码大模型和智能化软件工程技术和应用要求:第 2 部分 智能开发为参考依据。智能化软件开发落地实践指南(2024 年)18和安全性要求。2.扩充能力 根据多模态输入生成代码能力;知识库接入能力,可提供更符合企业内部业务逻辑或规范的代码或用例;第三方工具对接能力,如与版本管理工具的对接,支持代码合并冲突时提出解决和修复建议。3.重点和难点 推理效率提升:代码生成与
39、补全是使用频率较高的功能,且流式生成对推理速度有较高要求,因此优化模型推理效率是本能力的建设重点;高质量数据集构建:在代码大模型训练或调优过程中,高质量代码数据集的构建成为重点,其中包括对各类代码的清洗、处理、安全过滤、标注等;提示词工程优化:基于意图识别对提示词模板进行调优,辅助推理效果的提升;上下文理解能力:准确理解代码上下文,如变量的作用域、函数的调用关系、跨文件间代码逻辑等,对提升推理准确度有明显作用;模型持续改进:通过代码采纳与拒绝等历史数据构建数据飞轮,对持续改进和维持推理质量有明显作用。智能化软件开发落地实践指南(2024 年)19实战经验参考:实战经验参考:采用三“码”合一方案
40、(将训练态 SFT 代码语料、检索态 RAG 代码语料、推理态补充代码语料组装)优化 Prompt 模板,形成统一的Prompt 模板,构建成一个一致的训练和推理逻辑,通过将训练阶段与推理阶段的格式保持一致,可明显提升代码模型在垂直领域上的适应性和鲁棒性,使其在不同场景下保持较一致的性能。图 7 三“码”合一方案图(二)单元测试用例生成(二)单元测试用例生成单元测试用例生成是指根据输入的代码,自动生成用于测试该代码的单元测试用例。通过单元测试用例生成,可帮助开发人员减少编写单元测试用例的时间,并提高单元测试覆盖率,提升代码质量。1.关键能力 用例生成能力:根据函数级或文件级代码,生成单元测试用
41、例;用例质量能力:生成的用例满足基本的质量规范要求,且具智能化软件开发落地实践指南(2024 年)20备所需覆盖度;多维兼容能力:支持多种主流(或所需)单元测试框架。2.扩充能力 生成的单元测试用例包含较为清晰的注释,且执行性能较好;生成的单元测试用例可自动对部分外部依赖进行打桩,且打桩用法合理。3.重点和难点 结合传统代码分析技术:加强大模型对代码结构和逻辑的理解,如对函数、类和模块级的接口,以及各类控制流和数据流进行分析和识别,可帮助提升单元测试用例生成的质量;结合多样性测试技术:支持随机测试、符号执行、模糊测试等,通过组合不同测试技术,提高单元测试质量和覆盖度;单元测试用例生成能力的评估
42、:通过编译正确性、覆盖充分性、错误检出率等指标对推理结果进行综合评价,是本能力建设难点。实战经验参考:实战经验参考:采用大模型与传统软件分析等技术相组合的方式提升单元测试用例生成效果,传统分析工具通过整体分析被测工程,获取被测函数的依赖、测试场景等,生成用例初始化部分,而大模型生成用例的函数部分可结合软件分析的后处理算法,大幅度提高生成用例的编译通过率和覆盖率。智能化软件开发落地实践指南(2024 年)21图 8 单测生成实战方案示意图(三)代码转换与优化(三)代码转换与优化代码转换与优化是指在保持代码逻辑和功能不变的基础上,对输入的代码进行不同语言或不同框架之间的转换,或特定方向的优化。通过
43、代码转换可帮助快速理解代码,通过代码优化可帮助解决代码中存在的规范性、性能等问题,降低开发人员的技术门槛。1.关键能力 代码转换能力:根据给定的代码,转换成不同编程语言、不同编程范式或不同框架等维度的代码;代码优化能力:根据给定的代码,提供规范性、性能和复杂度等维度的优化建议;转换和优化质量能力:转换和优化后的代码满足基本的质量规范要求,且保留了原代码功能。智能化软件开发落地实践指南(2024 年)222.扩充能力 知识库的接入能力:使转换和优化后的代码更符合企业内部业务逻辑或规范;对多文件的工程级代码进行转换和优化。3.重点和难点 集成优化算法:集成各种优化算法,如循环优化、内存访问优化和并
44、发执行策略,提高代码优化的性能和质量;结合 RAG 的代码转换:检索历史代码以及外部依赖信息等,使转换后代码更符合项目需求。(四)代码解释与注释(四)代码解释与注释代码解释与注释是指对输入的代码进行解释或注释的生成。通过代码解释,可帮助开发人员快速理解大量代码或不熟悉的代码,通过代码注释,可提高代码的可读性和可维护性,帮助开发人员生产和维护更符合规范的代码资产。1.关键能力 代码解释能力:根据给定的代码,提供基本准确的解释内容;代码注释能力:根据给定的代码,提供基本准确的注释内容;注释质量能力:代码的注释内容满足基本的注释规范要求。2.扩充能力 知识库的接入能力:使代码的解释和注释内容更符合企
45、业内部规范;智能化软件开发落地实践指南(2024 年)23 对变更的代码进行解释。3.重点和难点 语义理解及关键词识别:准确理解代码语法、语义,并识别出关键代码元素和结构,是本环节的难点。实战经验参考:实战经验参考:设计基于 RAG 的上下文感知的代码理解流程,协同模型能力与业务领域知识(如设计文档、开发规范等)、工程上下文调用信息等,并根据开发者实时行为,精确检索上下文,提高代码解释与注释的生成准确率。图 9 基于 RAG 的代码理解流程图(五)代码检查与修复(五)代码检查与修复代码检查与修复是指对代码进行相关问题的检查,并根据检查出的问题进行自动修复。通过代码检查,可帮助开发人员发现代码中
46、存在的问题,如静态缺陷、运行时错误、安全漏洞、架构问题等,通过代码修复,可帮助开发人员解决问题并提高代码质量。1.关键能力智能化软件开发落地实践指南(2024 年)24 代码检查能力:根据给定的代码,进行代码规范性问题、代码异味、代码语法错误、代码逻辑错误、代码安全漏洞等问题的检查;代码修复能力:根据检查出的问题,提供代码修复建议及修复后的代码;检查和修复的质量能力:代码检查的错误检出率和误报率达到要求,修复后的代码需满足基本的质量规范要求,且保留了原代码功能。2.扩充能力 对多文件的工程级代码进行问题检查和修复;代码检查规则的自定义能力;对污点类问题进行检查,可跟踪和分析污点数据(或输入)在
47、代码中的流动情况,定位可能污染的关键位置。3.重点和难点 提示词优化:制定代码检查与修复提示词模板,支持检查风格类问题、质量类问题、安全漏洞、性能缺陷、逻辑缺陷、行业规范等多种问题的提示词;降低误报率:传统漏洞扫描工具误报率较高,基于大模型的理解生成能力降低漏扫误报率成为重点和难点,(六)研发问答(六)研发问答研发问答是指利用自然语言处理、信息检索等技术进行研发相关问题的解答,帮助开发人员提供问答辅助能力,提高研发和创新智能化软件开发落地实践指南(2024 年)25能力。1.关键能力 问答能力:根据对话可理解研发相关问题,并提供相关解释、建议、教程或示例代码,较为准确地回答用户提问;代码搜索能
48、力:根据关键词分析或语义理解等,快速、准确地查找和定位所需代码;多轮对话能力:可通过多轮对话,不断优化答案以更加准确地满足用户需求。2.扩充能力 可追溯能力:可明确推理答案的参考来源;对工程级代码库的理解和分析能力,并基于其进行问答。3.重点和难点 多轮对话感知:理解和保存用户多轮问答交互结果,作为下次提问上下文,以便提供更加准确的答案;交互式反馈机制:提供答案反馈机制,以便不断优化答案的准确性和相关性。智能化软件开发落地实践指南(2024 年)26四、智能开发使能能力建设四、智能开发使能能力建设智能开发落地过程中,通过核心能力建设可实现各项关键需求,但在持续改进迭代环节,为持续维持或提升代码
49、大模型推理准确性,构建代码数据集、调优代码大模型、评估代码大模型或智能开发工具等使能能力同样重要。本章将围绕数据、模型、评估、安全和相关工程化能力展开分析其建设要点。(一)代码数据处理能力(一)代码数据处理能力代码大模型所需的代码数据集包括纯代码数据,以及代码和文本的混合数据。通过有效地管理和处理代码数据集,将其处理成可直接被用于模型训练调优的高质量代码数据集,为代码大模型提供基础支持,应用于企业在建设和维护优化代码大模型的过程。图 10 数据处理流程图数据清洗数据清洗用于过滤低质代码数据,提升数据质量。代码数据清洗主要包括数据过滤、数据去重、敏感数据处理、许可协议(License)过滤等环节
50、。不同数据可采用不同处理方式,开源代码数据可进行所有方式的清洗,私有代码数据可进行数据过滤、数据去重、敏感信息过滤等方式的清洗。数据过滤是筛选、排除或提取数据集中特定部分,过滤方法主要包含三种。基于规则过滤是采用基于正则表达式、专家规则、点智能化软件开发落地实践指南(2024 年)27赞数量等规则的过滤器,识别并删除空白文件、自动生成的代码数据、有效信息过少的数据等;基于程序分析过滤是采用语法解析器和抽象语法树过滤存在语法错误的代码数据,采用规范检查规则或工具过滤掉不符合规范和不安全的代码数据;基于模型过滤是采用标注的高质量和低质量数据,训练质量模型分类器,对代码数据质量进行评估和过滤。数据去