Is this Build Failure Related to my Patch? An Empirical Study of Unrelated Build Failures in Continuous Integration
본 실증 연구는 7 개 아파치 프로젝트에 걸친 77,354 건의 CI 빌드 실패를 분석하여 무관한 실패로 인해 낭비된 개발자 노력을 정량화하고, CI 지연 시간 및 오류 패턴과 같은 기능을 활용하는 준지도식 양의 레이블과 비지도 학습 (PU) 모델이 이러한 실행 불가능한 실패를 효과적으로 예측하여 개발자가 디버깅 노력을 우선순위화하는 데 도움이 될 수 있음을 입증합니다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
당신이 매우 바쁘고 혼란스러운 주방에서 일하는 셰프라고 상상해 보세요 (이것이 지속적 통합 환경입니다). 몇 분마다 새로운 주문이 들어오고 (코드 푸시), 주방은 자동으로 새로운 재료가 작동하는지 확인하기 위해 테스트 요리를 시작합니다.
때로는 테스트 요리가 타거나 맛이 끔찍해집니다. 보통 이는 새로운 재료를 추가한 셰프가 실수를 했다는 의미입니다. 하지만 때로는 이전 셰프가 가스레인지에 불을 켜둔 채로 떠났거나, 오븐이 고장 났거나, 다른 사람이 옆방에서 트레이를 떨어뜨려서 화재 경보가 울리기도 합니다. 이것이 논문에서 **"무관한 빌드 실패"**라고 부르는 것입니다.
문제는 새로운 재료를 추가한 셰프가 왜 요리가 실패했는지 모른다는 점입니다. 그들은 몇 시간 동안 (논문에 따르면 중앙값 4 시간) 자신의 향신료와 칼을 미친 듯이 검사하며 "내가 한 일이 아닙니다!"라고 증명하려고 애씁니다. 이는 많은 시간을 낭비하고 스트레스를 유발합니다.
연구자들이 한 일
저자들 (연구팀) 은 이 주방의 혼란을 조사하기로 결정했습니다. 그들은 7 개의 대규모 오픈소스 소프트웨어 프로젝트 (Apache Hadoop 및 HBase 등) 에서 발생한 77,354 건의 "타버린 요리" (빌드 실패) 를 살펴보았습니다.
- 수사 작업: 그들은 실패 후 개발자들이 남긴 수천 개의 코멘트를 직접 읽었습니다. "이것은 내 변경 사항과 관련이 없습니다"나 "무관합니다"와 같은 구절을 찾았습니다. 그들은 개발자들이 명시적으로 "이 실패는 내 잘못이 아닙니다"라고 말한 약 10,300 건의 사례를 발견했습니다.
- 인터뷰: 그들은 이 "내 잘못이 아님" 사례 중 대표성 있는 작은 샘플인 371 건을 선택하여 범죄 현장을 분석하듯 분석했습니다. 질문은 다음과 같았습니다: 왜 개발자들은 이것이 자신의 잘못이 아니라고 말했을까요?
- 발견 사항: 가장 흔한 이유는 다음과 같습니다:
- 무관한 테스트: 실패한 테스트는 실제로 새로운 재료가 아닌 주방의 다른 부분을 확인하고 있었습니다.
- 외부 간섭: 주방 밖의 무언가가 변경되었습니다 (예: 모든 사람에게 나쁜 밀가루를 배달한 공급업체).
- 재현 불가: 화재는 한 번 발생했지만, 요리를 다시 시도했을 때는 정상적이었습니다 (아마도 무작위적인 정전 등).
- "미지정" 그룹: 개발자들이 이유를 설명하지 않고 단순히 "내 잘못이 아닙니다"라고 말한 경우가 전체의 35% 라는 거대한 부분을 차지했습니다.
- 발견 사항: 가장 흔한 이유는 다음과 같습니다:
해결책: "스마트 어시스턴트"
개발자들이 실패가 무관한 이유를 즉시 설명할 수 없기 때문에, 연구자들은 대신 추측할 수 있는 스마트 어시스턴트 (기계 학습 모델) 를 구축했습니다.
그들은 **PU 학습 (Positive-Unlabeled Learning)**이라는 특수한 기법을 사용했습니다.
- 비유: 특정 종류의 공을 찾는 법을 개에게 가르치려 한다고 상상해 보세요. 당신은 올바른 종류임을 알고 있는 몇 개의 공 ( Positive 예시) 을 가지고 있습니다. 하지만 어떤 것이 올바른 종류이고 어떤 것이 잘못된 것인지 알 수 없는 거대한 혼합 공 더미 ( Unlabeled 더미) 가 있습니다. "나머지는 모두 잘못된 공이다"라고 말할 수는 없습니다. 왜냐하면 아직 확인하지 않았을 뿐 일부는 실제로 올바른 종류일 수도 있기 때문입니다.
- 작동 방식: 연구자들은 모델에 "알려진 무관한 실패"와 "알 수 없는 더미"를 입력했습니다. 모델은 명확한 레이블이 없더라도 실패가 무관할 가능성이 높다는 패턴을 찾아내도록 학습했습니다.
어시스턴트의 성능은 어땠을까요?
모델은 동일한 7 개 프로젝트에서 테스트되었습니다.
- **정밀도 (Precision)**가 매우 뛰어났습니다 ( "이것은 당신의 잘못이 아닙니다"라고 말했을 때, 보통 70% 에서 88% 의 확률로 맞았습니다).
- **재현율 (Recall)**도 좋았습니다 (대부분의 무관한 실패를 찾았지만, 일부는 놓쳤습니다).
- 무작위 추측이나 단순한 규칙보다 훨씬 뛰어난 성과를 보였습니다.
모델이 사용한 "단서"
연구자들은 모델이 실패가 무관한지 결정하는 데 도움이 된 세 가지 주요 단서를 발견했습니다.
- 시간 간격 (CI 지연): 개발자가 코드를 푸시한 후 빌드를 트리거하기까지 오랜 시간이 걸렸다면, 그 사이에 다른 누군가가 주방을 망쳤을 가능성이 더 높습니다.
- "데자뷰" 오류: 오류 메시지가 최근에 발생한 것과 정확히 동일하다면, 이는 현재 셰프가 일으킨 새로운 문제가 아니라 오래된 문제의 반복일 가능성이 높습니다.
- 수다 (Chatter): 실패 발생 전에 해당 이슈에 많은 코멘트가 있었다면, 문제가 복잡하며 현재 푸시뿐만 아니라 다른 사람들의 작업과 관련이 있을 가능성이 높음을 시사합니다.
결론
이 논문은 이 "스마트 어시스턴트"를 사용하면 개발자들이 다음과 같은 빠른 힌트를 얻을 수 있다고 결론 내립니다: "이 실패가 당신의 잘못일 확률이 매우 낮습니다."
이는 그들이 문제를 무시할 수 있다는 뜻은 아니지만, "네 자신의 코드를 4 시간 동안 검사하지 마세요. 아마도 오븐을 확인하거나 다른 셰프에게 물어보세요"라고 알려줍니다. 이는 그들이 오보에 시간을 낭비하는 것을 막고 더 빠르게 요리 (코딩) 를 재개하도록 돕습니다.
중요한 참고 사항: 이 논문은 소프트웨어 프로젝트에서 이러한 실패를 식별하는 것에만 초점을 맞추고 있습니다. 이 방법이 의료 진단, 금융 거래 또는 소프트웨어 개발 외의 다른 분야에 적용된다고 주장하지 않습니다. 이는 소프트웨어 팀이 자신의 "주방" 혼란을 관리하기 위한 엄격하게 전용 도구입니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.