灭霸来了!微软发布BugLab:无需标注,GAN掉bug

3天干完6个月的活,Claude把模型搬上AMD 一条挺刺激的消息:Anthropic 给投资人的材料里有一张幻灯片,写着它的 Claude Mythos Preview 只花了大约​,就摸清了怎么让另一个 Claude 模型在 AMD 的 MI355X 上跑起来。同一处还写了个对照数字:过去给一块新芯片做推理适配,通常要几十名工程师、​。3 天对 6 个月,这个比值太扎眼,当天中文互联网上就冒出一堆「英伟达的护城河塌了」的说法。我把能翻到的材料都翻了一遍,越看越觉得,塌掉的那一小块是真的,可塌的位置和很多人想的不一样。 阅读详情

来源 | 新智元

程序员的死对头就是各种bug!最近微软在NeurIPS 2021上带来了一个好消息,研究人员设计了一个类似GAN的网络,通过选择器和检测器来互相写和改bug,而且还不需要标注数据!

常言道,「一杯茶,一包烟,一个bug改一天」。

c440a452e3cd2809c44f552e0443d993.png

写代码是软件工程师们每天的工作,但当你辛辛苦苦写了一大堆代码,却发现无法运行的时候,内心一定是崩溃的。

找bug不仅费时费力,最关键的是还经常找不着,并且有时候改了一个bug又会引入更多bug,子子孙孙无穷尽也。

简直就是找bug找到吐血。

768a16c52ac4e19629926ee42e252e2e.png

随着AI技术的发展,各大公司开发的代码助手如GitHub Copilot等也能帮你少写一些有bug的代码。

但这还远远不够!

深度学习要是能帮我把代码里的bug也给修了,我上班只负责摸鱼,岂不是美滋滋!

3ad11dfad57440355b5a8ce66855d94e.png

微软在NeurIPS 2021上还真发了一篇这样的论文,其中提出了一个新的深度学习模型BugLab,并通过自监督的学习方法,可以在不借助任何标注数据的情况下检测和修复代码中的bug,堪称程序员的救世主! 

06348a4fecd162bc8078876223af0d80.png

 https://arxiv.org/pdf/2105.12787.pdf

01

修bug难在哪?

所谓的bug,就是代码的实际运行和自己的预期不符。

该运行的没运行,该输出a,结果却输出个b,这种代码故意找茬的行为都属于bug。

951e3b8bb29b7a028499f08a50533300.png

所以想要找到并修复代码中的bug,不仅需要对代码的结构进行推理,还需要理解软件开发者在代码注释、变量名称等方面留下的模糊的自然语言提示。

例如一段程序的意图是,如果名字的长度超过了22个字符,那就只截取前22个。但原始代码中错误地把大于号写成了小于号,导致条件判断错误,程序运行结果和预期不符。

afba244b8ad5c3526c95a0750141945d.png

这种小错误在写代码的过程也是太常见了,稍不注意就会把条件弄反。

还有一种bug就是使用了错误的变量,例如下面的例子里面write和read弄错了,就会导致条件判断失败,这种bug的修复只有在理解了变量名的意义后才能修复,传统的修复手段对此是无能为力。

08ca79ca295c2f04d907cbc9dccba35e.png

这种错误看起来很简单,但往往盯着看代码的时候却很难发现,属于一改改一天的那种。

并且每个程序员有自己的编程风格,比如不同的命名、缩进、判断以及重构的方式,想让代码来给自己找bug,一个字,难!

对于微软来说,好在有GitHub代码库可以用来训练模型。但问题来了,GitHub上带bug的代码有那么多吗?有bug谁还commit啊?就算能找到代码,也没人来标注数据啊!

微软提出的BugLab使用了两个相互竞争的模型,通过玩躲猫猫(hide and seek)游戏来学习,主要的灵感来源就是生成对抗网络(GAN)。

9165f7c21664d6f63bec4b53499bf8df.png

由于有大量的代码实际上都是没有bug的,所以需要设计一个bug selector来决定是否修改正确的代码来引入一个bug,以及以何种方式引入bug(例如把减号改为加号等)。当选择器确定了bug的类别后,就通过编辑源代码的方式引入bug。

另一个用来对抗的是bug detector,用来判断一段代码是否存在bug,如果存在的话,它需要定位并修复这个bug。

64ba6cac5570942e2d3f3745ee69d370.png

选择器和检测器都能够在没有标记数据的情况下共同训练,也就是说整个训练过程都是以自监督的方式进行,并成功在数百万个代码片段上训练。

selector负责写bug,并把它藏(hide)起来,而detector负责找bug,并修复,整个过程就像躲猫猫一样。

随着训练的进行,selector写bug越来越熟练,而detector也能够应对更复杂的bug。

6e73dddc474054b7184aabfbf5dd238a.png

整个过程与GAN的训练大体相似,但目的却大不相同。GAN的目的是获得一个更好的生成器来修改图片,但BugLab的目的是找到一个更好的检测器(GAN中的判别器)。

并且整个训练也可以看作是一个teacher-student模型,选择器教会检测器如何定位并修复bug。

02

为开源社区修bug!

虽然从理论上来说,使用这种hide and seek的方式可以训练更复杂的selector来生成更多样的bug,从而detector的修bug能力也会更强。

但以目前的AI发展水平来说,还无法教会selector写更难的bug。

所以研究人员表示,我们需要集中精力关注那些更经常犯的错误,包括不正确的比较符,或者不正确的布尔运算符,错误的变量名引用等等其他一些简单的bug。并且为了简单起见,实验中只针对python代码进行研究训练。

虽然这些解释听起来都像是借口。

328f7232cf7ccd15a4c0953c0489a809.png

为了衡量模型的性能,研究人员从Python包索引中手动注释了一个小型bug数据集,和其他替代方案(例如随机插入bug的selector)相比,使用hide and seek方法训练的模型性能最多可以提高30%

046f8df795019bdd4d41653b2e511727.png

并且实验表明大约26%的bug都可以被发现并自动修复。在检测器发现的bug中,有19个在现实生活中的开源GitHub代码中都属于是未知的bug。

732fef3cecb055e5d7905a4279541929.png

但模型也会对正确的代码报告存在bug,所以这个模型在离实际部署上线还有一段距离。

如果更深入地研究selector和detector模型的话,就会引出那个老生常谈的问题:深度学习模型到底有没有,又怎么样去「理解」一段代码的作用?

过去的研究表明,将代码表示为一个token序列就能够产生次优的(suboptimal)效果。

但如果想要利用代码中的结构,例如语法、数据、控制流等等,就需要将代码中的语法节点、表达式、标识符、符号等等都表示为一个图上的节点,并用边来表示节点间的关系。

有了图以后就可以使用神经网络来训练detector和selector了。研究人员使用图神经网络(GNN)和relational transformer都进行了实验,结果发现GNN总体上优于relational transformer。

如何让AI帮助人类来写代码和改bug一直都是人工智能研究中的一项基础任务,任务过程中AI模型需要理解人类对程序代码、变量名称和注释提供的上下文线索来理解代码的意图。

虽然BugLab离真正解放程序员改bug还很遥远,但距离我们消灭bug总算又向前走了一步!

参考资料:

https://www.microsoft.com/en-us/research/blog/finding-and-fixing-bugs-with-deep-learning/

觉得还不错就给我一个小小的鼓励吧!
如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情

相关推荐

STM32F103单片机驱动TM1637数码管显示模块

最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考。 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637四位数码管显示模块 实际运行效果 下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。芯片和单片机通信使用的是I2C总线,下面就来说一下如何...

HXYDJ的博客 1万+

BugLab实验报告

不给变量赋初始值就利用变量进行操作是很危险的,因为此时变量的值是未知的。没有考虑区间包含情况,在遇到包含区间时会把大区间的右边界缩小到小区间的右边界。随机测试区间,发现无法处理区间包含情况,也无法对两个左边界相同的区间排序。的效果是一样的,但是这个判断条件还是怪怪的,总是担心会出什么事。当想要交换相同位置的数字的时候,程序的结果出错,然后通过梳理。函数中的错误是在测试自己随机生成的测试样例的时候,发现。的空间),因此所有指针指向的空间的内容都是相同的。此外,输出时没有考虑到负数的情况,也是一个错误。

plwysch的博客 201

【WorkBuddy】WorkBuddy 智能体快速上手:从零到一的实践指南

文章摘要: 传统自动化脚本难以应对灵活多变的自然语言需求,导致逻辑复杂、维护成本高。智能体(Agent)通过理解语义意图、动态决策和松耦合组件解决了这些问题。WorkBuddy采用声明式配置,通过可视化界面定义意图、实体和对话策略,无需编码即可快速构建智能体。其核心组件包括意图分类、实体提取、对话策略、故事样本和回退机制,适用于客服支持、知识问答等高频场景。通过环境准备(Python/Node.js/Redis)和简单配置,用户可以快速搭建可运行的智能体,显著提升自动化效率。

ruiqideng的博客 1698

灭霸来了?微软发布BugLab:无需标注,GAN掉bug

程序员的死对头就是各种bug!最近微软在NeurIPS 2021上带来了一个好消息,研究人员设计了一个类似GAN的网络,通过选择器和检测器来互相写和改bug,而且还不需要标注数据!

m0_46163918的博客 7220

[ENVI]-[高光谱遥感]-波谱沙漏分析工具的使用

图1-2-1查看特殊波段的坏波段图1-2-2在中添加坏波段ENVI波谱沙漏分析工具MNF变换。

m0_57992372的博客 1470

Win10安全模式下修改C盘权限的完整指南(附解决开始菜单失灵方案)

本文提供了一份在Win10安全模式下修复因C盘权限误改导致开始菜单失灵的完整指南。文章深入剖析了权限体系,特别是TrustedInstaller角色的重要性,并详细讲解了通过安全模式进入系统、使用ICACLS命令或图形界面精准重置C盘关键目录权限的步骤,最终恢复系统核心功能。

weixin_29250403的博客 234

研发效能双周报 12 月 vol.2 | 微软推出 bug 识别 AI;GitLab 继续加注 DevOps 全周期

微软推出可自动发现 bug 的 AI 工具 Finding and fixing bugs with deep learning - Microsoft Research 近期,微软研究人员推出一款基于生成对抗网络(GANs)的 AI 工具 BugLabs,能够自动识别、定位并修改 bug。 目前 BugLabs 的技能点主要加在 Python 中的常见 bug 检测,例如错误的关系运算、布尔运算和变量名。小范围的测试表明,BugLab 的成绩比其他检测器高出约30%,但误报率仍较高。 相比于基于规则的代码

simayi2018的博客 540

QT+QTimer+QThread实现线程内的定时任务并且和主线程进行交互

在制作qt软件时,我们经常会用到qtimer定时器以及将其在非主线程中进行使用,甚至有的时候还需要和主线程进行交互。我总结了两种用法,仅供参考。以上即为QTimer和QThread联合使用的学习记录。

u011826081的博客 5686

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

weixin_53637133的博客 181

2025红队实战:Win11环境下ZAP、CobaltStrike与免杀套件深度评测

在网络安全领域,渗透测试与红队行动是评估系统防御能力的关键手段。其核心原理在于模拟真实攻击者的技术与流程,以发现潜在的安全漏洞。这项技术的价值在于主动识别风险,提升整体安全防护水平,广泛应用于企业安全评估、漏洞挖掘和攻防演练等场景。随着Windows 11系统普及,其增强的安全机制(如内存完整性、基于虚拟化的安全)对传统攻击工具链提出了新的挑战。本文聚焦于**CobaltStrike二开版**与**免杀套件**在Win11环境下的实战应用与深度对抗,探讨如何优化工具链以应对现代端点检测与响应(EDR)和高级

weixin_29315091的博客 310

ArduPilot代码解析之四 — 姿态和位置控制

ArduPilot采用级联控制架构实现飞行器的姿态和位置管理。该系统通过位置→速度→加速度→姿态→角速率→电机指令的逐级转换,将高级指令转化为底层执行信号。位置控制采用三维独立控制,水平轴与垂直轴分别处理;姿态控制通过角度误差→角速率→电机输出的两层级联实现。系统支持多种输入模式,并内置运动学整形功能确保轨迹平滑。不同飞行器类型(多旋翼、直升机、潜艇等)有专门的调参方案,通过调整PID参数、加速度限制等实现最优控制性能。该架构兼顾控制精度与飞行稳定性,适用于各类自主飞行场景。

rainercool的专栏 826

【第 009 讲】全面掌握 Python 注释:注释的定义与作用 | 单行注释 | 三引号与多行注释 | 注释使用的最佳实践

本文系统讲解 Python 注释的完整知识体系:从注释的定义与作用讲起,梳理单行注释的书写位置、临时屏蔽用法与 PEP 8 排版规范,剖析注释被忽略的底层机制;进而说明三引号字符串的本质与嵌套问题;最后给出注释使用的三条实践原则,帮助读者写好可读性高的注释。

大模型全栈工程师 · Thanks_ks 580

雷赛控制卡的扩展IO连接

因设备的上IO点较多,所以使用了多个雷赛32点位的IO扩展卡。上位机程序在控制输出IO时发现主模块IO和第一个扩展IO的输出可以控制。但第二个IO扩展卡和第三个IO扩展卡的输出控制不了。经排查出发现轴卡在初始化时只连接了第一个扩展IO卡。增加下面的代码连接上扩展IO就可以了。雷赛控制卡的扩展IO点无法控制问题处理。

StevenChen的博客 3179

Python 的 yield from 到底转发了什么:拆开 send、throw 和那个 return 值

很多人把yield from记成「省一层 for 循环的语法糖」。写和写,结果看着一样,于是就当它只是少敲几个字。这个理解会在三个地方翻车:调用方.send()的值送不进去、子生成器return的值拿不到、异常和close()传不下去。yield from真正做的事是,外层生成器退成一个透明通道。本文所有输出来自本机 CPython 3.13.14 实测。yield from不是循环,是委托——nextsendthrowclose四个方向的流量全部直通子生成器,并且子生成器return。

小小张说故事的博客 152

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 436

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 246

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 429

yolo 和 deft 算法的区别

你应该是打错了:是,不是 defrat;

曾大强博客 259

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 179

两张表合并之后,行数悄悄多了一倍

pandas merge 行数异常膨胀源于右表键不唯一,导致数据静默复制。实测显示,未聚合的右表(756行)与左表合并后行数增至504行,合计膨胀3.5倍,但无报错。validate 参数仅在检查键唯一性时有效,one_to_one 和 many_to_one 可拦截问题,但需结合 duplicated() 前置检查。正确做法为先按键聚合右表,再合并,避免重复。建议合并前后核对行数、合计,并使用 indicator=True 排查匹配情况,确保数据一致性。

patrickstar231的博客 246

智慧农业实战:育秧车间秧盘计数与苗情分级的Python实现

首先,建立统一的数据结构,保存每盘秧苗的编号、批次、覆盖度、叶色得分和播种天数。A = "壮苗"B = "合格苗"C = "弱苗"@dataclassdays: int。

荆棘鸟智能的博客 137

我用 200 行代码写了个“代码屎山检测器“,扫完公司的老项目后我沉默了

这个工具不能帮你把屎山铲平,但至少能让你知道自己面对的是多大的山,也能在代码评审时用数据说话——“这个 PR 把圈复杂度从 12 推到了 18,能不能拆一下?毕竟,不能量化的东西,就没法改进。

xixiaoyunya的博客 254

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 507

【每天一个 Python 小案例29】Python 实现商品购物车

本篇实现一个购物车:商品目录、加入商品、修改数量、移除商品、查看小计、计算满减与 VIP 折扣、结算扣库存。核心设计是"目录与购物车分离"——目录存商品主数据,购物车只存 {商品编号: 数量};金额一律用 Decimal 并做 ROUND_HALF_UP 舍入。折扣部分讲清阶梯满减的匹配顺序(阈值从高到低、命中即停)与叠加顺序(先满减、后打折),并用一次完整结算演示 706 元如何变成 613.70 元。

xinjiyaya的博客 219

【随笔】KV缓存量化:省下的显存,要付出多少数值误差

用可运行量化器解释位宽、比例信息、分组和离群值的关系,核算KV缓存实际载荷,并给出Transformers配置与容量、延迟、质量验收方法。

code2cat的博客 474
上一篇: 这个神奇的库,可以将数据平滑化并找到异常点
下一篇: Excel 已死,爬虫已凉,数据分析称王!
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值