Automating Detection and Root-Cause Analysis of Flaky Tests in Quantum Software

이 논문은 양자 소프트웨어의 비결정적 특성으로 인한 '플래키 테스트'를 탐지하고 근본 원인을 분석하기 위해 대규모 언어 모델 (LLM) 을 활용한 자동화 파이프라인을 제안하며, 이를 통해 기존 데이터셋을 54% 확장하고 플래키 테스트 분류 및 원인 규명에서 높은 정확도를 입증했습니다.

Janakan Sivaloganathan, Ainaz Jamshidi, Andriy Miranskyy, Lei Zhang

게시일 Wed, 11 Ma
📖 3 분 읽기☕ 가벼운 읽기

Each language version is independently generated for its own context, not a direct translation.

🍳 1. 배경: 왜 양자 소프트웨어는 '요리'가 어려울까?

전통적인 소프트웨어는 레시피대로 만들면 항상 같은 맛이 납니다. 하지만 양자 소프트웨어는 다릅니다. 양자 컴퓨터는 확률 (우연) 에 기반하기 때문에, 같은 레시피로 같은 재료를 써도 오늘은 맛있는 요리를 만들고, 내일은 갑자기 맛이 변할 수 있습니다.

개발자들은 이 요리를 테스트할 때, "이 레시피가 잘못됐나?"라고 의심하게 됩니다. 하지만 실제로는 레시피 (코드) 에 문제가 없는데, 양자 컴퓨터의 특성상 결과가 들쑥날쑥한 것일 뿐입니다. 이를 **'요동치는 테스트 (Flaky Test)'**라고 부릅니다.

  • 문제점: 개발자는 "아, 또 실패했네. 레시피를 고쳐야지!"라고 생각하며 시간을 낭비합니다. 하지만 실제로는 레시피가 완벽할 수도 있습니다. 이렇게 불필요한 수리 작업이 쌓이면 개발 속도가 느려지고, 진짜 버그 (실수) 가 숨어있을 때 발견하지 못하게 됩니다.

🔍 2. 연구의 목표: AI 가 '요리 실수'를 찾아내다

이 논문은 **"인간이 일일이 찾아다니지 않아도, AI 가 자동으로 요동치는 테스트를 찾아내고, 왜 그런지 이유를 알려주는 시스템"**을 만들었습니다.

저자들은 다음과 같은 일을 했습니다:

  1. 데이터 확장: 기존에 사람이 일일이 찾아낸 '요동치는 테스트' 목록 (46 개) 에, 새로운 25 개를 더 찾아서 총 71 개로 늘렸습니다. (약 54% 증가!)
  2. AI 학습: 최신 거대 언어 모델 (LLM, 예: Google Gemini, OpenAI GPT 등) 에게 이 데이터를 보여주고, "이 테스트가 요동치는 거야, 아니면 진짜 버그야?"라고 물어보게 했습니다.
  3. 원인 분석: 만약 요동치는 테스트라면, "왜 그런 거야?"라고 물어봐서 원인을 찾아냈습니다.

🛠️ 3. 해결책: AI 가 어떻게 도와줄까?

연구팀은 GitHub라는 개발자들이 코드를 공유하는 곳에 올라온 '버그 리포트 (Issue)'와 '수정 제안 (Pull Request)'을 분석했습니다.

  • 비유: 마치 **수석 셰프 (AI)**가 주방의 기록장 (GitHub) 을 훑어보며, "어? 이 요리는 오늘만 실패했네? 아, 재료가 흔들려서 그런가? 아니면 오븐 온도가 불안정한가?"라고 추리하는 것과 같습니다.

연구팀은 AI 에게 두 가지 정보를 주었습니다:

  1. 글자 (텍스트): 개발자가 쓴 "이게 왜 안 돼?"라는 설명.
  2. 코드 (Recipe): 실제로 작성된 요리 레시피 (소스 코드).

그 결과, Google Gemini 2.5 Flash라는 AI 모델이 가장 잘 작동했습니다. 요동치는 테스트를 찾아내는 정확도가 94% 이상, 원인을 찾는 정확도가 96% 이상으로 매우 뛰어났습니다.

🧩 4. 요동치는 테스트의 주요 원인 (8 가지 유형)

AI 가 찾아낸 원인은 크게 8 가지로 분류됩니다. 일상적인 비유로 설명하면 다음과 같습니다:

  1. 무작위성 (Randomness): 가장 흔한 원인입니다. 주사위를 굴려서 결과를 정하는데, 주사위를 굴리는 방식이 매번 달라서 결과가 일정하지 않습니다.
    • 해결: 주사위를 굴리는 '시작 숫자 (Seed)'를 고정합니다.
  2. 소프트웨어 환경: 특정 운영체제나 라이브러리 버전 때문에만 실패합니다. (예: 한국인만 먹고 배탈 나는 음식)
  3. 멀티스레딩 (동시 작업): 여러 사람이 동시에 요리를 하다가 재료가 섞이거나 충돌이 일어납니다.
  4. 부동 소수점 (숫자 오차): 계산할 때 아주 작은 오차가 쌓여서 결과가 달라집니다. (예: 0.1 + 0.2 가 0.3 이 아닌 0.30000000000000004 가 되는 경우)
  5. 시각화: 그림을 그릴 때 데이터가 늦게 들어와서 이미지가 깨집니다.
  6. 처리되지 않은 예외: 예상치 못한 상황 (예: 재료가 떨어짐) 이 왔을 때 대처법을 안 써서 멈춥니다.
  7. 네트워크: 인터넷이 불안정해서 데이터가 늦게 도착합니다.
  8. 순서 불명확: 재료 순서가 중요할 때, 순서가 매번 바뀌는 경우입니다.

🚀 5. 결론: 앞으로의 전망

이 연구는 **"양자 소프트웨어 개발의 고통을 줄여주는 자동화 도구"**의 가능성을 보여주었습니다.

  • 기존 방식: 개발자가 "왜 실패하지?"라고 수백 번 테스트를 돌려가며 직접 원인을 찾음. (시간과 비용 낭비)
  • 새로운 방식: AI 가 "아, 이거 요동치는 테스트야. 원인으로는 '주사위 (랜덤성)' 때문인 것 같아. 이 부분을 고쳐보자."라고 바로 알려줌.

미래 계획:
이제 AI 가 원인을 찾아내는 것뿐만 아니라, **"어떻게 고쳐야 할지 (수리 방법)"**까지 자동으로 제안하고, 실제로 코드를 수정해 주는 단계까지 발전시킬 계획입니다.

💡 한 줄 요약

"양자 소프트웨어의 '요동치는 테스트'라는 귀찮은 문제를, 최신 AI 가 자동으로 찾아내고 원인을 설명해 주어 개발자들이 진짜 버그만 고르게 도와주는 혁신적인 방법입니다."

이 기술이 발전하면 양자 컴퓨터를 이용한 앱이나 서비스도 더 안정적이고 빠르게 개발될 수 있을 것입니다.