mozilla/bugbug
Platform for Machine Learning projects on Software Engineering
什么是 bugbug?
bugbug 是一个开源的 Python 工具包,应用机器学习模型帮助 Mozilla 工程师管理 bug 和代码更改。它训练的分类器可以自动:
- 建议谁应该被分配给新的 bug,
- 决定补丁是否可能导致回归或测试失败,
- 将 bug 标记为崩溃、性能问题、安全问题、垃圾邮件等,
- 预测 bug 是否需要 QA、文档或 uplift,以及许多其他分诊任务。
该项目附带一个小型数据挖掘管道,从 Bugzilla 工单、GitHub issues 和 Firefox 源代码历史中提取特征,然后将模型(包括基于 Keras 的神经网络)包装在兼容 scikit-learn 的 API 中。
为什么重要
对于像 Firefox 这样的大型代码库,bug 分诊是一项巨大的手动工作。通过自动分类 bug 和补丁,bugbug 可以:
- 减少开发人员将 bug 路由到正确组件或人员的时间。
- 提前发现风险补丁,帮助审查者专注于可能破坏构建或测试的代码。
- 提供数据驱动的见解(例如,哪些 bug 可能是回归),提高发布质量。
简而言之,它将丰富的历史 bug 和提交数据转化为可操作的预测,使开发工作流程更快、更可靠。
适合谁?
- Mozilla 工程师,他们使用 Bugzilla、Firefox 源代码树或 GitHub issues,并希望获得 ML 辅助的分诊。
- 对软件工程 ML 感兴趣的研究人员或开发者,他们需要真实世界的数据集和基线模型,用于缺陷预测、受让人推荐或测试选择等任务。
- 其他开源项目(经过一些调整),如果有类似的 bug 跟踪和版本控制数据。
如何开始
- 安装依赖 – README 推荐使用现代的
uv工具:
需要 Python 3.14+。uv sync # 核心依赖 uv sync --group test # 测试依赖 uv sync --extra nlp # 可选的 NLP 额外依赖 - 运行训练器 – 选择一个模型名称(例如
defect)并训练它:
在典型机器上训练大约需要 30 分钟。python -m scripts.trainer defect - 分类 bug – 训练后(或自动下载预训练模型),按 ID 分类 Bugzilla bug:
python -m scripts.bug_classifier defect --bug-id 123456 - 可选:使用 Taskcluster – 在 PR 描述中添加
Train on Taskcluster: <model>,让 Mozilla 的 CI 在云端训练模型。 - 数据挖掘 – 如果需要自定义数据,按照“运行仓库挖掘脚本”的步骤拉取 Firefox 仓库并生成提交级特征。
仓库内容
| 目录/文件 | 用途 |
|---|---|
bugbug/labels |
用于训练的手动策划的标签集。 |
bugbug/db.py |
用于缓存数据的简单 JSON 存储。 |
bugbug/bugzilla.py |
从 Mozilla 的 Bugzilla 获取 bug 的 API 辅助函数。 |
bugbug/repository.py |
遍历 mozilla-central Mercurial 仓库以提取提交信息的脚本。 |
bugbug/bug_features.py |
将 bug/提交元数据转换为向量的特征工程工具。 |
bugbug/model.py |
所有分类器的抽象基类。 |
bugbug/models/ |
具体实现(例如,defect、component、regression)。 |
bugbug/nn.py |
将 Keras 神经网络模型嵌入 scikit-learn 管道的胶水代码。 |
bugbug/nlp/ |
用于 bug 描述和评论的文本处理辅助函数。 |
bugbug/github.py |
从 GitHub 仓库拉取 issues 的辅助函数。 |
局限性与开放问题
- 以 Mozilla 为中心 – 数据管道针对 Bugzilla 和 Firefox 仓库进行了调整;在其他地方使用需要编写新的适配器。
- 训练成本 – 完整的模型训练可能耗时且计算密集(在 CPU 上 30 分钟以上)。未提及 GPU 支持。
- 模型新鲜度 – README 提到预训练模型会自动下载,但未描述刷新频率。
- 评估指标 – 只有少数分类器列出了准确率/精确率/召回率;未提供全面的基准测试。
TL;DR
bugbug = 一个 Python 库,挖掘 Mozilla 的 bug 和源代码数据,为分诊任务(受让人建议、回归检测、垃圾邮件过滤等)构建机器学习分类器,并提供训练或使用这些模型的脚本。它是 ML 辅助软件工程工具的一个实际示例,主要面向 Firefox 开发者,但经过努力也可以适应其他项目。
相关
- 项目
- 项目
- 项目
- 项目
- 项目