0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

大模型颠覆研发模式:字节跳动是如何在单元测试中落地大模型的?

jf_WZTOguxH 来源:AI前线 2023-08-16 14:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大模型的出现引发了一场软件工程革命,它根本性地改变了软件开发的流程和方式。当下,越来越多的企业开始在实际的研发工作中,结合大模型增强软件开发在设计、需求、测试、发布和运维等各个环节中的能力,提高质量和效率。

在接受 InfoQ 采访时,字节跳动算法专家张树波表示,大语言模型是一项人工智能基础技术的突破,必然会带来多个行业的变革。2023 年初,字节跳动智能服务团队开始启动大模型 X 智能单测项目。目前,大模型生成单元测试已经在实际业务中落地。

单元测试是保障项目可靠性的重要手段。传统的智能单测生成依赖静态分析、动态分析等工具,对不同的语言需要重新适配。随着模型参数规模的提升,模型的代码理解、代码生成能力也大幅提升,使用模型端到端的生成单元测试,可以低成本地将单元测试覆盖到多种编程语言。然而大模型在单测生成任务上仍存在模型幻觉(随机生成不存在变量名、方法名)和测试分支覆盖不全的问题。

为解决以上问题,字节跳动智能服务团队发现通过任务微调、强化学习等技术可以提升语言模型的单元测试生成语法正确率和分支覆盖率。经过测试,他们的基于 Bloom 70 亿参数模型的生成效果不弱于通用版 ChatGPT 的水平,并且在低端显卡上的推理时延只有 ChatGPT 的 25%。且目前大模型单元测试生成分支覆盖率在实际项目中达到 56%,同时在抖音的 AndroidiOS 双端落地,问题有效性达到 80%,修复率 65%。

在今年 9 月 3-5 日举办的 QCon 全球软件开发大会·北京站中,张树波将把以上经验分享给大家。张树波硕士毕业于清华大学,先后就职于 vivo、字节跳动,从事 NLP 算法多年,在智能单测、智能客服、语音助手等业务场景有丰富的落地经验。

在大会开始前,InfoQ 对张树波进行了专访,探索字节跳动是如何在单元测试中落地大模型的,以及大模型对软件研发工作流的改变。以下为对话实录,经编辑。

InfoQ:您在今年 9⽉举办的 QCon 全球软件开发⼤会·北京站上的演讲主题是《⼤模型助⼒智能单测⽣成》,为什么会选择这⼀主题?

张树波:2022 年底 OpenAI 发布 ChatGPT,其效果令人大为震撼,曾经让 NLPer 困扰的自然语言处理问题,例如歧义、长程依赖、知识缺失、推理能力不足等,都得到了很大程度的缓解和解决。大语言模型是一项人工智能基础技术的突破,必然会带来多个行业的变革。2023 年初,我们字节跳动智能服务团队启动了大模型 X 智能单测项目,探索至今,大模型生成单元测试已经在实际业务中落地。这其中我们总结出了一些经验,希望能够帮助听众。

InfoQ:对于这波⼤模型结合软件开发应⽤热潮,您观察到哪些有趣的趋势?

张树波:大模型会让开发更轻松。大模型代码生成会降低开发者编写重复性代码,但是不意味者开发门槛降低,开发者需要具备辨识模型生成是否正确,以及对最终上线负责。当前大模型生成的代码还不能保证绝对正确,甚至有些隐蔽的错误,不容易被新手开发者发现。从这个角度来看,大模型对有经验的开发者助益更大。

大模型如何改变传统单测生成? InfoQ:在⼤模型出现以前,传统的智能单测⽣成⽅法是什么样的?存在哪些痛点?

张树波:传统的单测生成应用最广、最成功的是基于搜索的单测生成,也就是很多场景都会提到的(search based software testing - SBST),其中集成了非常多的程序分析技术,包括各种各样的静态分析、动态分析以及遗传算法甚至 constrain solving。但因为语言的特性不同,同样的分析技术对不同的语言是需要重新实现的。虽然测试生成的原理在不同语言是通用的,但是强依赖于软件分析技术,那么每新增一种新的语言支持,就需要适配一整套分析技术,成本较大。另外,精确的分析可能会依赖于编译产物,例如动态分析,因此要求目标项目进行编译后才能进行测试生成,提高了生成所需的前置准备要求。

而基于模型的生成可以直接分析源码,无需编译,降低生成的要求,大大扩大适应场景。近几年来应用 repository mining 提升 test generation 甚至 program repair 效果的工作也在逐渐的增加,说明 NLP 中的一些假设在软工领域也是成立的,比如现有 repository 中包含了 test generation 甚至 program repair 中需要的知识,大家也做了相应的尝试,学习历史知识并应用到新的任务中在软工领域也是大家认可的思路。

InfoQ:应⽤⼤模型后,智能单测⽣成⽅法发⽣了哪些变化?实际效果如何?能完全替代传统的智能单测⽣成⽅法吗?

张树波:这里先补充一个业务应用背景,智能单测一般在开发者代码编写过程中 (IDE) 和在代码提交后 (CI) 发挥作用,前者要求可读性、正确性,后者要求正确性、覆盖率指标。应用大模型后,智能单测由传统模版生成 + 遗传算法的方式向端到端的模型生成方式演化。传统单测在正确性和覆盖率指标上仍然比大模型生成的要高,在 CI 过程中,仍占主导位置,大模型在其中作为补充。而在 IDE 中,大模型生成单测的可读性更好,便于开发者修改,因此在 IDE 中单测更倾向使用大模型生成的结果。

我们智能服务团队的主要基于 Bloom、starcoder 等开源模型做了测试以及微调,经过测试,其中基于 Bloom 的 70 亿参数模型的生成效果不弱于通用版 ChatGPT 的水平,并且在低端显卡(A30)上的推理时延只有 ChatGPT 的 25%。目前,我们的大型模型单元测试生成分支覆盖率在实际项目中达到 56%,同时在抖音的 Android、iOS 双端落地, 问题有效性达到 80%,修复率 65%。同时我们也正在试用火山方舟上大模型的单测生成能力,效果正在评估中。

整体来看,大模型仍有一定局限,发展有个过程,各有千秋,取长补短,可以融合应用 1+1>2,不同场景可以有不同的应用方式。

InfoQ:⼤模型在智能单测⽣成中的应⽤原理是什么?

张树波:大模型单测生成属于代码生成、文本生成的范畴,旨在通过大模型完成端到端的单测代码生成。大模型单测生成输入是待测方法、以及上下文,输出为单元测试函数。随着模型规模的提升,模型的代码理解、单测生成能力也大幅提升。

目前智能服务团队内使用的大模型基座主要是开源模型,例如 Bloom、Starcoder,基于以上大模型,我们对裸模型以及使用单测训练数据微调之后模型,分别做了评估,当前选择了基于 Bloom7B 的微调模型落地。同时我们团队在 Java、Swift、Go 等多种编程语言的大模型落地计划,广泛收集了公开数据集、业务数据集用于微调。

如何提升⼤模型单测⽣成准确性? InfoQ:您提到⼤模型在单测⽣成任务上仍存在模型幻觉和测试分⽀覆盖不全的问题,对于这两个问题,字节有哪些解决思路?如何提升⼤模型单测⽣成准确性?

张树波:当前我们使用单测生成任务数据在大模型做了微调,让大模型专注单测生成。实验表明,通过构建高质量的训练数据,可以显著提升大模型单测分支覆盖率指标。基于微调后的大模型,通过引入以编译器、静态分析结果作为奖励的强化学习,可以进一步缓解模型幻觉的问题。微调和强化学习的基本假设是模型在预训练阶段学习到了代码相关知识,通过微调或强化学习,可以激发模型的潜力,或让模型跟随特定偏好,输出更好结果。如果预训练阶段没有过多的对应任务领域的语料,通过继续预训练的方式可以让模型适配这一领域,然后进行后面的微调和强化学习,可以取得更好的结果。

除了以上方式,另外一种简单粗暴的方式是提升模型规模,规模越大,能力上限越高。

InfoQ:除此之外,⼤模型在单测⽣成中还有那些局限性?是否会遇到数据质量问题?是否需要考虑隐私和安全问题?有哪些措施可以确保数据安全?

张树波:大模型在单测生成瓶颈在能给大模型提供多少背景信息,如果是一个简单的函数,没有涉及任何其他自定义的类,大模型未来可以完美解决,但是涉及其他的类的,甚至是多层的,外层信息稀疏性,会提高输入的上下文输入长度,在实际落地中会在输入长度和生成效果之间做一个取舍。微调数据质量非常重要,决定模型是否可用的关键因素。关于数据安全问题,火山方舟提出了全方位的大模型安全架构,为模型训练方和使用者提供安全可信环境。

InfoQ:在⼤模型助⼒智能单测⽣成的过程中,字节团队内还积累了哪些经验和教训?对于希望在项⽬中应⽤⼤模型进⾏智能单测⽣成的团队,您会给他们提供哪些建议?

张树波: 不仅是在大模型助力智能单测生成这个方向,所有大模型 X 某某类似的应用落地都是一项系统工程。在大模型落地过程中,其他兄弟团队给予了大量的经验和技术支持。

InfoQ:您认为在⼤模型助⼒智能单测⽣成⽅⾯,还有哪些需要进⼀步研究和探索的领域 / 挑战?⼤模型在智能单测⽣成领域的未来发展趋势是什么样的?

张树波:目前,我们对于 LLM 的应用仍比较初级,所以首先是最基础的研究,如何正确激发大模型在单测任务上的潜力,让大模型发挥全部的效果。目前我们探索的手段包括但不限于任务微调、prompt engineering、RL,然后是下一个阶段,如何让模型不断地增强在特定场景中的效果。另外,大模型的能力和发展让原本一些无法通过自动化解决的问题有了新的可能性,比如经典的 oracle problem,不仅仅是困扰单测生成,GUI 的测试、program repair 的落地都受限于这个经典问题。如果大模型能够解决 oracle problem,刚才提到的多种软工技术,会迎来又一个落地的春天,而我们对于这个趋势充满信心。

“大模型将对研发模式产生颠覆性改变” InfoQ:⼤模型在软件研发⼯作流中最⼤的价值是什么?⼤模型对软件研发⼯作流的改变,将会如何影响软件开发⾏业的未来发展趋势?

张树波:毫无疑问,大模型将对研发的模式产生颠覆性的改变,但这个改变并不会在一夜之间就发生,会是一个持续渐进的过程,三年五年甚至十年。随着大模型的不断发展和进化,对于研发工作流的影响程度会逐渐加深加强。副驾驶 Copilot 是一种比较可能的切入和演进方式,一开始会在一些比较合适的小场景,Copilot 以半自动化的方式对特定任务进行赋能和提效(比如单测的生成),然后随着模型对代码的理解能力和推理能力增强,推理结果置信度提升,模型在任务中的重要程度逐步增加,在一些任务上达到和人类同等重要的参与程度。

同时,能力可以泛化推广到其他相似或者相关的任务,比如 defect detection、fault localization、program repair 等等,成为开发者的“强化外骨骼”或者最佳搭档。甚至有可能在不远的将来,实现通过 prompt 研发和调试软件,就像《西部世界》中的场景一样。

InfoQ:⽬前市⾯上存在很多结合⼤模型的研发效能⼯具,但在⼀些企业的端到端落地过程中并不理想,也没有实现提效的突破,这背后可能存在哪些问题?不同规模的企业如何通过⼤模型实现最优的研发效率和质量?

张树波:大模型适合做推理任务,这是之前单体小模型不具备的能力。在这个基础上,可以反观大模型是否在做这类事情。另外当前市面上的开源大模型或者大模型 API 都是通用大模型接口,如果直接在某个领域应用可能存在领域的 gap。大模型本身也存在问题,例如大模型生成内容是有偏的,而且存在模型幻觉、推理错误等问题。同时研发效能工具的需要结合具体业务落地,我们智能服务团队,在抖音、直播、剪映做了很多开创性的研发效能实践,欢迎大家与我们合作。

大模型应用可以分为几个层次,API 调用、模型微调、模型继续预训练、模型预训练,成本依次呈几何级数递增,不同规模企业可以简单衡量下投入产出比,来确定在哪个层面应用大模型。

InfoQ:⼤模型会对程序员带来哪些冲击?程序员和⼤模型如何更好地共⽣,实现 1+1>2 的效果?

张树波:我不认为大模型会减少对程序员的需求量,因为现在大模型还不能替代程序员,也不能为最终结果负责。在我们智能服务团队的实际业务中,我们把程序员当成客户,模型生成的单测为程序员服务,自动化单测检测出来的问题需程序员解决,大模型和程序本身是共生的关系。

大模型生成代码能力增强的同时,需要程序员提升自己的专业能力,能快速判断大模型生成的代码是否正确以及生成质量的高低。程序员能力越强,使用大模型生成代码的质量也会越高,因为通过使用不同的 prompt,可以生成不同质量的代码。程序员应该拥抱大模型,它可以提高代码编写效率,对于一些常识性的问题,它也能做到有问必答,省去网上搜索的时间。

嘉宾简介

张树波,字节跳动算法专家,清华大学硕士毕业,先后就职于 vivo、字节跳动。从事 NLP 算法多年,在智能单测、智能客服、语音助手等业务场景有丰富的落地经验。将在 QCon 北京 2023 分享题为《大模型助力智能单测生成》的演讲。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1821

    文章

    50523

    浏览量

    267788
  • 字节跳动
    +关注

    关注

    0

    文章

    353

    浏览量

    10149
  • 大模型
    +关注

    关注

    2

    文章

    3864

    浏览量

    5299

原文标题:大模型颠覆研发模式:字节跳动是如何在单元测试中落地大模型的?

文章出处:【微信号:AI前线,微信公众号:AI前线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    前端的单元测试

    https://www.bilibili.com/opus/1178756596191199237 从入门到会写:前端单元测试最佳学习路径 在当今的互联网开发江湖中,前端技术栈的更新迭代速度令人咋舌
    的头像 发表于 03-19 16:05 801次阅读

    技嘉与趋境科技联合部署AMaaS平台 推动本地大模型应用加速落地

    在生成式AI加速走向实际应用的当下,大模型部署正从“可体验”迈向“可落地、可管理、可应用”。作为技嘉面向本地AI场景打造的重要产品,AI TOP ATOM具备强大的桌面级本地AI算力,搭载了
    的头像 发表于 03-12 15:11 246次阅读
    技嘉与趋境科技联合部署AMaaS平台 推动本<b class='flag-5'>地大</b><b class='flag-5'>模型</b>应用加速<b class='flag-5'>落地</b>

    半导体嵌入式单元测试的核心技术、工具选型与落地全流程

    一、半导体嵌入式软件的质量危机与单元测试的核心价值1.1 半导体嵌入式软件的复杂性演进在摩尔定律的驱动下,半导体芯片的集成度呈指数级增长,嵌入式软件作为芯片功能的核心载体,其复杂度也随之飙升。以汽车
    发表于 03-06 14:55

    汽车软件质量跃迁的系统性路径:基于ISO 26262标准的单元测试体系重构与中日实践深度对比(2026学术研究报告)

    丰田、本田等日本车企与比亚迪、蔚来等中国企业的实证数据,构建“单元测试覆盖率-OTA召回成本-管理认知偏差”三维模型。研究发现: 日本车企通过CoverageMaster winAMS工具实现
    发表于 01-05 14:58

    嵌入式软件单元测试中AI自动化与人工检查的协同机制研究:基于专业工具的实证分析

    ‌ ‌摘要****‌ 本文系统探讨嵌入式软件相较于通用软件在单元测试层面的特殊性,分析其对高覆盖率、可追溯性与实时性验证的严苛需求,并以专业工具winAMS为技术载体,深入研究AI驱动的自动化测试
    发表于 12-31 11:22

    C语言单元测试在嵌入式软件开发中的作用及专业工具的应用

    平台和操作系统上运行,无需进行大量的修改 二、C语言单元测试在嵌入式开发中的关键作用 嵌入式系统对实时性和可靠性要求极高,单元测试是确保代码质量的关键手段。单元测试在嵌入式开发中的作用主要体现在以下几个
    发表于 12-18 11:46

    嵌入软件单元测试的全面研究与实践

    引言 嵌入软件单元测试是确保嵌入式系统质量和可靠性的关键环节。嵌入式系统广泛应用于汽车电子、工业控制、医疗设备等关键领域,其软件直接操控硬件,任何微小的错误都可能导致严重后果。单元测试
    的头像 发表于 12-01 14:31 965次阅读

    单元测试专业工具在新能源开发中的作用研究

    单元测试的历史由来与发展 单元测试的概念可以追溯到20世纪60年代,伴随着计算机科学和软件工程学科的发展而逐步形成。早期的计算机科学研究(20世纪60年代)中,程序员意识到仅依靠手工调试和集成测试
    的头像 发表于 11-03 16:03 625次阅读

    何在vivadoHLS中使用.TLite模型

    本帖欲分享如何在vivadoHLS中使用.TLite模型。在Vivado HLS中导入模型后,需要设置其输入和输出接口以与您的设计进行适配。 1. 在Vivado HLS项目中导入模型
    发表于 10-22 06:29

    边聊安全 | 软件单元测试的设计方法

    上海磐时PANSHI“磐时,做汽车企业的安全智库”软件单元测试的设计方法写在前面:软件单元测试的设计是一个系统化的过程,旨在验证代码的最小可测试部分(通常是函数或方法)是否按预期工作。软件单元
    的头像 发表于 09-05 16:18 1.1w次阅读
    边聊安全 | 软件<b class='flag-5'>单元测试</b>的设计方法

    HarmonyOSAI编程单元测试用例

    根据选中的ArkTS方法名称,CodeGenie支持自动生成对应单元测试用例,提升测试覆盖率。 在ArkTS文档中,光标放置于方法名称上或框选完整的待测试方法代码块,右键选择CodeGenie
    发表于 08-27 14:33

    模型捉虫行家MV:致力全流程模型动态测试

    动态测试通过模拟真实运行数据,对模型及生成的代码进行“全维度体检”。这一过程层层递进:从单元测试聚焦单个模块的精准性,到集成测试验证模块间的协作逻辑,最终通过
    的头像 发表于 07-09 16:37 901次阅读
    <b class='flag-5'>模型</b>捉虫行家MV:致力全流程<b class='flag-5'>模型</b>动态<b class='flag-5'>测试</b>

    请问如何在C++中使用NPU上的模型缓存?

    无法确定如何在 C++ 中的 NPU 上使用模型缓存
    发表于 06-24 07:25

    从FA模型切换到Stage模型时:module的切换说明

    。 supportedModes标识应用支持的运行模式,当前只定义了驾驶模式(drive)。/Stage模型已废弃。 distro对象中的moduleName标识当前HAP的名称。 distro对象中
    发表于 06-05 08:16