网易首页 > 网易号 > 正文 申请入驻

北大李戈团队提出大模型单测生成新方法,显著提升代码测试覆盖率

0
分享至

AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,欢迎投稿或者联系报道。投稿邮箱:liyazhou@jiqizhixin.com;zhaoyunfeng@jiqizhixin.com

单元测试是软件开发流程中的一个关键环节,主要用于验证软件中的最小可测试单元,函数或模块是否按预期工作。单元测试的目标是确保每个独立的代码片段都能正确执行其功能,对于提高软件质量和开发效率具有重要意义。

然而,大模型自身无力为复杂待测函数(环复杂度大于 10)生成高覆盖率的测试样例集。为了解决该痛点,北京大学李戈教授团队提出一种全新的提升测试用例覆盖率的方法,该方法借助程序分片思想(Method Slicing),将复杂待测函数依据语义拆解为若干简单片段,进而让大模型为各个简单片段分别生成测试样例。生成单个测试样例时,大模型只需分析原待测函数的一个片段,分析难度减小,生成覆盖该片段的单元测试难度随之减小。由此推广,提升整体测试样例集代码覆盖率。

相关论文《HITS: High-coverage LLM-based Unit Test Generation via Method Slicing》近期被 ASE 2024(at the 39th IEEE/ACM International Conference on Automated Software Engineering)顶会接受。

论文地址:https://www.arxiv.org/pdf/2408.11324

接下来看看北大团队论文研究的具体内容:

HITS 使用大模型进行程序分片

程序分片指将一个程序依据语义划分为若干解决问题的阶段。程序是对一个问题解决方案的形式化表述。一个问题解决方案通常包含多个步骤,每个步骤对应着程序中的一片(slice)代码。如下图所示,一个色块对应着一片代码,也对应着一个问题解决的步骤。

HITS 要求大模型分别为每个代码片设计可以高效覆盖它的单元测试代码。以上图为例,当我们得到如图的分片后,HITS 要求大模型为 Slice 1(绿色),Slice 2(蓝色),Slice 3(红色)分别生成测试样例。为 Slice 1 生成的测试样例要尽可能覆盖 Slice 1,不用考虑 Slice 2 和 Slice 3,其余代码片同理。

HITS 起效的原因有二。其一,大模型要考虑覆盖的代码量降低。以上图为例,为 Slice 3 生成测试样例,则只需考虑 Slice 3 中的条件分支。要覆盖 Slice 3 中的某些条件分支,只需在 Slice 1 和 Slice 2 中找寻一条执行路径即可,无需考虑该执行路径对 Slice 1 和 Slice 2 覆盖率的影响。其二,依据语义(问题解决步骤)分割的代码片有助于大模型掌握代码执行中间状态。为顺序靠后的代码块生成测试样例,需要考虑先前代码对程序状态的改变。由于代码块依据实际问题解决步骤分割,因此可以用自然语言对先前代码块的操作进行描述(如上图中注释部分)。由于当前大语言模型多为自然语言与程序语言混合训练产物,良好的自然语言概括可帮助大模型更精准掌握代码对程序状态的改变。

HITS 使用大模型进行程序分片。问题的解决步骤通常为带有程序员主观色彩的自然语言表述,因而可以直接利用自然语言处理能力超群的大模型。具体而言,HITS 使用上下文学习方法(In-context learning) 调用大模型。团队利用过往在真实场景实践的经验,手工编写若干程序分片样例,经若干次调整后使大模型对程序分片的效果达到了研究团队的预期。

对代码片生成测试样例

给定要覆盖的代码片段,要生成对应测试样例,需经历以下 3 个步骤:1. 对片段的输入进行分析;2. 构造 prompt 指示大模型生成初始测试样例;3. 使用规则后处理和大模型 self-debug 调整测试样例使之可以正确运行。

对片段的输入进行分析,指提取要覆盖的片段所接受的一切外部输入,以备后续 prompt 使用。外部输入,指该片段所应用到的先前片段定义的局部变量,待测方法的形参,片段内调用的方法以及外部变量。外部输入的值直接决定了要覆盖的片段的执行情况,因此将该信息提取出来提示给大模型有助于有针对性地设计测试样例。研究团队在实验中发现大模型拥有良好的提取外部输入的能力,因此在 HITS 中由大模型来完成该任务。

接下来,HITS 构建思维链(Chain-of-thought)形式的 prompt 引导大模型生成测试样例。推理步骤如下。第一步,给定外部输入,分析要满足待覆盖代码片内的各种条件分支的排列组合,外部输入都分别需要满足哪些性质,如:组合 1,字符串 a 需要包含字符’x’,整数变量 i 需要非负;组合 2,字符串 a 需要非空,整数变量 i 需要为质数。第二步,对上一步中的每一种组合,分析相对应的待测代码执行时所处环境的性质,包括但不限于实参的特性,全局变量的设置。第三步,为每一种组合生成一个测试样例。研究团队为每一步手工构建了样例,以便于大模型能够正确理解并执行指令。

最后,HITS 通过后处理和 self-debug 使大模型生成的测试样例得以正确运行。大模型生成的测试样例往往难以直接使用,会出现各式各样的编译错误和来自于错误编写测试样例导致的运行时错误。研究团队根据自身观察及已有论文的总结,设计了若干规则和常见错误的修复案例。首先尝试依据规则修复。如果规则无法修复,则使用大模型 self-debug 的功能进行修复,在 prompt 中提供了常见错误的修复案例以供大模型参考。

HITS 的整体图解

实验验证

研究团队使用 gpt-3.5-turbo 作为 HITS 调用的大模型,分别在大模型学习过和未学习过的 Java 项目中的复杂函数(环复杂度大于 10)上对比 HITS,其他基于大模型的单元测试方法和 evosuite 的代码覆盖率。实验结果显示 HITS 相较于被比较的诸方法有较明显的性能提升。

研究团队通过样例分析展示分片方法如何提升代码覆盖率。如图所示。

该案例中,基线方法生成的测试样例未能完全覆盖 Slice 2 中的红色代码片段。然而,HITS 由于聚焦于 Slice 2,对其所引用的外部变量进行了分析,捕捉到 “如果要覆盖红色代码片段,变量’arguments’ 需要非空 “的性质,根据该性质构建了测试样例,成功实现了对红色区域代码的覆盖。

提升单元测试覆盖率,增强系统的可靠性和稳定性,进而提高软件质量。HITS使用程序分片实验证明,该技术不仅能大幅提升整体测试样例集代码覆盖率,且实施方法简洁直接,未来有望在真实场景实践中,帮助团队更早发现并修正开发中的错误,提升软件交付质量。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
中网决赛还未开始,2位中国金花已创14年历史!郑钦文迎1个坏消息

中网决赛还未开始,2位中国金花已创14年历史!郑钦文迎1个坏消息

侃球熊弟
2026-10-11 09:38:41
湖南一家4个子女,接连睡梦中离奇死亡,法医鉴定让母亲崩溃大哭

湖南一家4个子女,接连睡梦中离奇死亡,法医鉴定让母亲崩溃大哭

民生故事会
2026-09-23 21:44:50
顶风作案!过紧日子依然有单位大肆挥霍,有的突击花1400万!

顶风作案!过紧日子依然有单位大肆挥霍,有的突击花1400万!

职场资深秘书
2026-10-11 10:13:52
塔图姆23+5+4无缘今日最佳!对不起,你碰到不讲理的伦德博格了

塔图姆23+5+4无缘今日最佳!对不起,你碰到不讲理的伦德博格了

微评体育圈
2026-10-11 13:12:42
中美达成一致!中方用1000万吨煤,交换美降低关税?这盘棋不简单

中美达成一致!中方用1000万吨煤,交换美降低关税?这盘棋不简单

丁丁鲤史纪
2026-10-03 00:30:56
持续发酵!曝女领导出轨多人后续:细节曝光太炸裂,前夫哥哥选择鱼死网破

持续发酵!曝女领导出轨多人后续:细节曝光太炸裂,前夫哥哥选择鱼死网破

小鋭有话说
2026-10-10 15:33:48
世卫:俄不明原因肺炎事件无持续传播证据

世卫:俄不明原因肺炎事件无持续传播证据

新华社
2026-10-11 11:45:04
经济下行实力衰退八年疏离,我被北京顶流医院的副院长拉黑了

经济下行实力衰退八年疏离,我被北京顶流医院的副院长拉黑了

道术意义
2026-10-11 06:40:18
许家印干过最牛的事,就是把一众当红明星玩弄在手掌之间

许家印干过最牛的事,就是把一众当红明星玩弄在手掌之间

流苏晚晴
2026-10-10 18:33:53
援助变参战?俄方怒下通牒,首个参战国被锁定,北约防线岌岌可危

援助变参战?俄方怒下通牒,首个参战国被锁定,北约防线岌岌可危

史之韵
2026-08-22 02:30:38
辱骂王皓,大喊“林诗栋上一单”的16岁少女被行政拘留了

辱骂王皓,大喊“林诗栋上一单”的16岁少女被行政拘留了

走进事件的中心
2026-10-10 16:34:58
亚马逊承认部分2026款Kindle存在漏光缺陷

亚马逊承认部分2026款Kindle存在漏光缺陷

环球网资讯
2026-10-11 14:15:16
谭丕创任南宁市委书记

谭丕创任南宁市委书记

政知新媒体
2026-10-10 19:43:36
江淮“生锈”门,刹车踏板断裂,降本增效惹的祸

江淮“生锈”门,刹车踏板断裂,降本增效惹的祸

爱卡汽车
2026-10-11 01:59:44
吃他汀不能碰鸭肉?医生提醒:不只是鸭肉,这6物或也要忌嘴

吃他汀不能碰鸭肉?医生提醒:不只是鸭肉,这6物或也要忌嘴

医学科普汇
2026-10-02 10:50:21
美乌现分歧 英国首相力挺泽连斯基

美乌现分歧 英国首相力挺泽连斯基

新华社
2026-10-11 09:13:04
“大爷如果不管,全校女生隐私照或将上网”!网传山东某高校抓偷拍神反转:女生们错把制止偷拍的保卫大爷,当成嫌疑人

“大爷如果不管,全校女生隐私照或将上网”!网传山东某高校抓偷拍神反转:女生们错把制止偷拍的保卫大爷,当成嫌疑人

火山詩话
2026-10-11 07:48:10
企业退休人员速看:国务院对养老金及相关待遇到底怎么规定?

企业退休人员速看:国务院对养老金及相关待遇到底怎么规定?

老孙说
2026-10-11 09:48:48
付磊女儿再发声,曾梦琪老公受到牵连!请武汉大学说明原因

付磊女儿再发声,曾梦琪老公受到牵连!请武汉大学说明原因

平老师666
2026-10-10 13:17:05
俄罗斯为啥会突然破例向中国供应重型发动机?因为俄方心里明白:所谓中国发动机的动力短板,对中方而言绝不可能永远是道坎!

俄罗斯为啥会突然破例向中国供应重型发动机?因为俄方心里明白:所谓中国发动机的动力短板,对中方而言绝不可能永远是道坎!

扶苏聊历史
2026-10-08 13:30:18
2026-10-11 15:12:49
机器之心Pro incentive-icons
机器之心Pro
专业的人工智能媒体
14173文章数 142748关注度
往期回顾 全部

科技要闻

卸任CEO后,苹果董事长库克再度到访中国

头条要闻

女局长被举报出轨多人 曾称因为善良选择了扶贫式婚姻

头条要闻

女局长被举报出轨多人 曾称因为善良选择了扶贫式婚姻

体育要闻

十年回首:湖人三榜眼的夏天,与NBA无关

娱乐要闻

梅艳芳63岁冥诞骨灰被盗,亲哥从不知情

财经要闻

黄仁勋长女完婚,万亿帝国如何传承?

汽车要闻

红旗天工07上市 限时16.79万起 硬核通关巴音布鲁克

态度原创

房产
艺术
本地
公开课
军事航空

房产要闻

海棠湾销冠再出牌:海南顶豪「终局答案」,突然砸出!

艺术要闻

中国当代画家,区础坚作品选(二)

本地新闻

踏访沙县第一村,寻国民小吃本源

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

沙特利雅得机场遭袭致12死309伤 中国大使馆紧急提醒

无障碍浏览 进入关怀版