mozilla/bugbug

Platform for Machine Learning projects on Software Engineering

bugbug とは?

bugbug は、Mozilla エンジニアがバグやコード変更を管理するのを支援するために機械学習モデルを適用するオープンソースの Python ツールキットです。トレーニングされた分類器は、以下を自動的に実行できます:

  • 新しいバグに誰を割り当てるべきかを提案する、
  • パッチが回帰やテスト失敗を引き起こす可能性があるかどうかを判断する、
  • バグをクラッシュ、パフォーマンス問題、セキュリティ問題、スパムなどにラベル付けする、
  • バグが QA、ドキュメント、アップリフトを必要とするかどうかを予測する、およびその他の多くのトリアージタスク。

このプロジェクトには、Bugzilla チケット、GitHub issues、Firefox ソースコード履歴から特徴を抽出する小さなデータマイニングパイプラインが含まれており、モデル(Keras ベースのニューラルネットを含む)を scikit-learn 互換の API でラップしています。


なぜ重要か

Firefox のような大規模なコードベースでは、バグのトリアージは大きな手動の労力です。バグとパッチを自動的に分類することで、bugbug は以下を実現できます:

  • 開発者がバグを適切なコンポーネントや担当者にルーティングする時間を削減します。
  • リスクのあるパッチを早期に表面化し、レビュアーがビルドやテストを壊す可能性のあるコードに集中できるようにします。
  • データ駆動の洞察(例えば、どのバグが回帰の可能性があるか)を提供し、リリース品質を向上させます。

要するに、豊富な履歴バグとコミットデータを実用的な予測に変換し、開発ワークフローをより速く、より信頼性の高いものにします。


誰のためのものか?

  • Mozilla エンジニア:Bugzilla、Firefox ソースツリー、または GitHub issues を使用し、ML 支援のトリアージを希望する方。
  • ソフトウェアエンジニアリング ML に興味のある研究者や開発者:欠陥予測、担当者推薦、テスト選択などのタスクのために、実世界のデータセットとベースラインモデルが必要な方。
  • 他のオープンソースプロジェクト(適応が必要):同様のバグ追跡およびバージョン管理データを持つプロジェクト。

始め方

  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. バグを分類 – トレーニング後(または事前トレーニング済みモデルを自動ダウンロード後)、Bugzilla バグを ID で分類します:
    python -m scripts.bug_classifier defect --bug-id 123456
    
  4. オプション:Taskcluster を使用 – PR の説明に Train on Taskcluster: <model> を追加すると、Mozilla の CI がクラウドでモデルをトレーニングします。
  5. データマイニング – カスタムデータが必要な場合は、「Running the repository mining script」の手順に従って Firefox リポジトリを取得し、コミットレベルの特徴を生成します。

リポジトリの内容

ディレクトリ/ファイル 目的
bugbug/labels トレーニングに使用される手動キュレーションされたラベルセット。
bugbug/db.py キャッシュデータ用のシンプルな JSON ベースのストレージ。
bugbug/bugzilla.py Mozilla の Bugzilla からバグを取得する API ヘルパー。
bugbug/repository.py mozilla-central Mercurial リポジトリを走査してコミット情報を抽出するスクリプト。
bugbug/bug_features.py バグ/コミットメタデータをベクトルに変換する特徴エンジニアリングユーティリティ。
bugbug/model.py すべての分類器の抽象基底クラス。
bugbug/models/ 具体的な実装(例:defect、component、regression)。
bugbug/nn.py Keras ニューラルネットモデルを scikit-learn パイプラインに埋め込むためのグルーコード。
bugbug/nlp/ バグの説明とコメント用のテキスト処理ヘルパー。
bugbug/github.py GitHub リポジトリから issues を取得するヘルパー。

制限と未解決の問題

  • Mozilla 中心 – データパイプラインは Bugzilla と Firefox リポジトリに合わせて調整されています。他の場所で使用するには新しいアダプタを書く必要があります。
  • トレーニングコスト – 完全なモデルのトレーニングは時間と計算リソースを消費する可能性があります(CPU で 30 分以上)。GPU サポートは言及されていません。
  • モデルの鮮度 – README には事前トレーニング済みモデルが自動的にダウンロードされるとありますが、更新頻度については説明されていません。
  • 評価指標 – 一部の分類器のみが精度/適合率/再現率をリストしています。包括的なベンチマークは提供されていません。

TL;DR

bugbug = Mozilla のバグとソースコードデータをマイニングし、トリアージタスク(担当者提案、回帰検出、スパムフィルタリングなど)用の機械学習分類器を構築し、それらのモデルをトレーニングまたは使用するスクリプトを提供する Python ライブラリです。これは ML 支援ソフトウェアエンジニアリングツールの実用的な例であり、主に Firefox 開発者を対象としていますが、努力すれば他のプロジェクトにも適応可能です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト