MioHint: LLM-assisted Mutation for Whitebox API Testing

본 논문은 대규모 언어 모델 (LLM) 의 코드 이해 능력과 정적 분석을 결합하여 API 테스트의 피트니스 플래토 문제를 해결하고, 기존 도구 대비 라인 커버리지와 돌연변이 정확도를 획기적으로 향상시킨 새로운 화이트박스 API 테스트 기법인 'MioHint'를 제안합니다.

Jia Li, Jiacheng Shen, Yuxin Su, Michael R. Lyu

게시일 2026-03-06
📖 3 분 읽기☕ 가벼운 읽기

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

🕵️‍♂️ 1. 문제 상황: "막힌 미로"와 "무작위 헤매기"

소프트웨어 개발자들은 프로그램이 제대로 작동하는지 확인하기 위해 테스트를 합니다. 특히 API 는 서로 다른 프로그램들이 데이터를 주고받는 문이므로, 이 문이 잘 열리고 닫히는지 확인하는 것이 중요합니다.

기존의 자동화 테스트 도구 (예: EvoMaster) 는 '무작위 헤매기' 방식에 가깝습니다.

  • 상황: 거대한 미로 (소프트웨어 코드) 가 있다고 상상해 보세요.
  • 기존 방식: 미로 입구에 서서 무작위로 방향을 틀어보며 길을 찾습니다. ("왼쪽? 오른쪽?")
  • 문제점 (피트니스 플래토): 가끔은 "정확히 100 번만 걸으면 문이 열린다"거나 "이 문은 비밀번호가 'c.0A>G'여야만 열린다"는 엄격한 조건이 있는 방이 있습니다. 무작위로 걸으면 100 번을 걸어도, 혹은 비밀번호를 맞추기 위해 100 만 번을 시도해도 문이 열리지 않습니다. 이를 **'피트니스 플래토 (Fitness Plateau)'**라고 부릅니다.
  • 결과: 도구는 그 방 앞에서 멈춰서고, 미로 전체를 다 탐험하지 못해 중요한 버그 (구멍) 를 놓치게 됩니다.

💡 2. 해결책: "명탐정"인 AI 를 부른다

저자들은 이 문제를 해결하기 위해 **대형 언어 모델 (LLM, 예: ChatGPT 같은 AI)**을 도입했습니다. 하지만 AI 에게 미로 전체 지도 (전체 소스 코드) 를 보여주는 것은 불가능합니다. AI 의 기억력 (컨텍스트) 에 한계가 있기 때문입니다.

여기서 MioHint의 핵심 아이디어가 나옵니다.

"전체 지도를 다 보여줄 필요 없이, AI 가 지금 필요한 '단서'만 골라주면 돼!"

🛠️ 3. MioHint 의 작동 원리: "초정밀 단서 수집"

MioHint 는 다음과 같은 3 단계로 작동합니다.

1 단계: 막힌 곳 찾기 (Target Selection)

무작위 헤매기 도구가 "여기서 더 이상 나가지 못해!"라고 좌절하는 곳 (엄격한 조건이 있는 문) 을 찾습니다.

2 단계: 단서만 골라내기 (Statement-level Data Dependency)

이게 MioHint 의 가장 창의적인 부분입니다.

  • 기존 방식: AI 에게 "이 방을 열려면 어떤 코드가 필요할까?"라고 물으면, AI 는 관련 없는 코드까지 다 읽느라 지칩니다.
  • MioHint 방식: **"이 문 (Target) 을 열기 위해, 입력값 (Request) 에서 어떤 데이터가 어떻게 흘러가서 이 문에 도달하는지"**만 추적합니다.
    • 비유: 범인을 잡으려면 범인의 전과 기록 (전체 코드) 을 다 볼 필요 없이, **범인이 현장을 지날 때 남긴 발자국 (데이터 흐름)**만 추적하면 됩니다.
    • MioHint 는 코드를 분석하여 "A 변수가 B 함수를 거쳐 C 문으로 들어간다"는 **연결고리 (데이터 의존성)**만 AI 에게 보여줍니다. 이를 **'값 확장 (Value Expansion)'**이라고 합니다.

3 단계: AI 가 힌트 주기 (LLM-Assisted Mutation)

이제 AI 에게 "이 문은 비밀번호가 숫자 0 이어야 열린다. 입력값을 어떻게 바꿔야 숫자 0 이 되겠니?"라고 묻습니다.

  • AI 는 연결된 단서들을 보고 **"아! 입력값을 'c.0A>G'로 바꾸면 문이 열리겠구나!"**라고 정확한 답을 내놓습니다.
  • 이렇게 AI 가 알려준 정답을 테스트 도구에 적용하면, 무작위로 100 만 번 시도해도 못 열던 문이 한 번에 열립니다.

📊 4. 성과: 얼마나 잘했을까?

이 방법을 16 개의 실제 웹 서비스 (카카오, 은행, 의료 시스템 등 유사한 복잡한 서비스) 에 적용해 본 결과:

  • 코드 커버리지 증가: 전체 코드를 얼마나 테스트했는지가 평균 4.95% 증가했습니다. (기존 도구가 놓쳤던 숨은 구석까지 찾아냈다는 뜻)
  • 난이도 높은 문 열기: 기존 도구가 10% 미만만 열었던 '엄격한 조건'의 문들을 57% 이상 성공적으로 열었습니다.
  • 정확도: 무작위 시도 대비 AI 가 제안한 시도가 문에 도달할 확률이 67 배나 높았습니다.

🌟 5. 요약 및 비유

  • 기존 테스트 도구: 미로에서 길을 잃고 무작위로 헤매는 실눈을 가진 탐험가.
  • MioHint: 막다른 길에 부딪히면, 미로의 구조를 분석하는 고도화된 AI를 불러와 "이곳은 비밀번호가 필요해. 입력값을 이렇게 바꿔봐!"라고 정확한 힌트를 받아내는 스마트 탐험가.
  • 핵심 기술: AI 에게 모든 것을 보여줄 수 없으니, 가장 중요한 단서 (데이터 흐름) 만 잘라내어 AI 가 집중해서 생각하게 만든 것.

결론적으로, MioHint 는 인공지능의 '이해 능력'과 전통적인 '코드 분석 기술'을 섞어서, 소프트웨어 테스트에서 가장 어렵고 중요한 부분들을 효율적으로 찾아내는 혁신적인 방법입니다.