mozilla/bugbug

Platform for Machine Learning projects on Software Engineering

bugbug란 무엇인가?

bugbug는 Mozilla 엔지니어가 버그와 코드 변경을 관리하는 데 도움이 되도록 기계 학습 모델을 적용하는 오픈 소스 Python 툴킷입니다. 훈련된 분류기는 다음을 자동으로 수행할 수 있습니다:

  • 새 버그에 누구를 할당해야 하는지 제안하고,
  • 패치가 회귀 또는 테스트 실패를 일으킬 가능성이 있는지 결정하고,
  • 버그를 크래시, 성능 문제, 보안 문제, 스팸 등으로 레이블링하고,
  • 버그에 QA, 문서화 또는 업리프트가 필요한지 예측하는 등 많은 분류 작업을 수행합니다.

이 프로젝트는 Bugzilla 티켓, GitHub 이슈 및 Firefox 소스 코드 기록에서 특징을 추출하는 소규모 데이터 마이닝 파이프라인을 제공하며, 모델(Keras 기반 신경망 포함)을 scikit-learn 호환 API로 래핑합니다.


왜 중요한가

Firefox와 같은 대규모 코드베이스에서 버그 분류는 엄청난 수동 작업입니다. 버그와 패치를 자동으로 분류함으로써 bugbug는 다음을 수행할 수 있습니다:

  • 개발자가 버그를 올바른 구성 요소나 담당자에게 라우팅하는 데 소요하는 시간을 줄입니다.
  • 위험한 패치를 조기에 표면화하여 리뷰어가 빌드나 테스트를 깨뜨릴 수 있는 코드에 집중할 수 있게 합니다.
  • 데이터 기반 통찰력(예: 어떤 버그가 회귀 가능성이 있는지)을 제공하여 릴리스 품질을 향상시킵니다.

요컨대, 풍부한 과거 버그 및 커밋 데이터를 실행 가능한 예측으로 전환하여 개발 워크플로우를 더 빠르고 안정적으로 만듭니다.


누구를 위한 것인가?

  • Mozilla 엔지니어: Bugzilla, Firefox 소스 트리 또는 GitHub 이슈를 사용하고 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 저장소에서 이슈를 가져오는 헬퍼.

제한 사항 및 미해결 질문

  • Mozilla 중심 – 데이터 파이프라인은 Bugzilla 및 Firefox 저장소에 맞게 조정되어 있습니다. 다른 곳에서 사용하려면 새 어댑터를 작성해야 합니다.
  • 훈련 비용 – 전체 모델 훈련은 시간과 계산 집약적일 수 있습니다(CPU에서 30분 이상). GPU 지원은 언급되지 않았습니다.
  • 모델 신선도 – README에는 사전 훈련된 모델이 자동으로 다운로드된다고 나와 있지만, 갱신 빈도에 대해서는 설명하지 않습니다.
  • 평가 지표 – 일부 분류기만 정확도/정밀도/재현율을 나열합니다. 포괄적인 벤치마킹은 제공되지 않습니다.

TL;DR

bugbug = Mozilla의 버그 및 소스 코드 데이터를 마이닝하고, 분류 작업(담당자 제안, 회귀 감지, 스팸 필터링 등)을 위한 기계 학습 분류기를 구축하며, 이러한 모델을 훈련하거나 사용하는 스크립트를 제공하는 Python 라이브러리입니다. ML 지원 소프트웨어 엔지니어링 도구의 실용적인 예이며, 주로 Firefox 개발자를 대상으로 하지만 노력하면 다른 프로젝트에도 적용할 수 있습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트