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 跟踪和版本控制数据。

如何开始

  1. 安装依赖 – README 推荐使用现代的 uv 工具:
    uv sync               # 核心依赖
    uv sync --group test  # 测试依赖
    uv sync --extra nlp   # 可选的 NLP 额外依赖
    
    需要 Python 3.14+。
  2. 运行训练器 – 选择一个模型名称(例如 defect)并训练它:
    python -m scripts.trainer defect
    
    在典型机器上训练大约需要 30 分钟。
  3. 分类 bug – 训练后(或自动下载预训练模型),按 ID 分类 Bugzilla bug:
    python -m scripts.bug_classifier defect --bug-id 123456
    
  4. 可选:使用 Taskcluster – 在 PR 描述中添加 Train on Taskcluster: <model>,让 Mozilla 的 CI 在云端训练模型。
  5. 数据挖掘 – 如果需要自定义数据,按照“运行仓库挖掘脚本”的步骤拉取 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 开发者,但经过努力也可以适应其他项目。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目