← 최신 논문
💻 computer science

HarnessLLM: Rust Verification Harness Generation with Large Language Models

HarnessLLM은 기존 테스트 스위트로부터 Rust 검증 하네스를 생성하고 반복적으로 개선하기 위해 거대 언어 모델을 활용하는 자동화된 프레임워크로, 이전 방식들보다 훨씬 더 높은 정밀도와 효율성으로 실제 메모리 안전성 버그를 성공적으로 탐지합니다.

원저자: Minghua Wang, Yuwei Liu, Lin Huang

게시일 2026-07-27
📖 4 분 읽기☕ 가벼운 읽기

원저자: Minghua Wang, Yuwei Liu, Lin Huang

원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

컴퓨터 프로그래밍의 세계를 코드로 지어진 거대하고 북적이는 도시라고 상상해 보십시오. 이 도시에서 Rust라는 언어는 매우 엄격한 설계자로 유명합니다. 이 언어는 건물이 무너지거나 도로가 사라지는 것을 방방지하는 내장된 안전 규칙을 가지고 있어, 도시가 스스로 충돌하며 멈추는 일 없이 운영되도록 보장합니다. 하지만 이 잘 계획된 도시 안에도 'unsafe zone(불안전 구역)'이라 불리는 특별한 구역들이 있습니다. 이곳은 강력한 작업을 수행하기 위해 엄격한 규칙이 일시적으로 해제될 수 있는 곳입니다. 만약 건설자가 이 구역에서 주의를 기울이지 않거나 교통 신호에 오류가 발생하면, 도시 전체가 메모리 누수나 갑작스러운 패닉(panic)과 같은 치명적인 실패를 겪을 수 있습니다. 도시를 안전하게 유지하기 위해 엔지니어들은 '형식 검증(formal verification)'이라는 방법을 사용하는데, 이는 어떤 일이 일어나더라도 건물이 무너지지 않는다는 것을 증명하기 위해 초정밀 시뮬레이션을 실행하는 것과 같습니다. 하지만 여기에는 함정이 있습니다. 시뮬레이션을 실행하려면 먼저 '하네스(harness)'를 만들어야 합니다. 하네스를 테스트 트랙이나 훈련용 더미라고 생각하십시오. 여러분은 어떤 차를 운전할지, 얼마나 빨리 달릴지, 어떤 장애물을 던질지를 시뮬레이터에게 정확히 알려주며 이 트랙을 수동으로 직접 구축해야 합니다. 이렇게 손으로 하는 작업은 느리고, 지루하며, 실수하기 쉽습니다. 특히 도시가 거대하고 복잡할 때는 더욱 그렇습니다.

이때 새로운 연구팀이 다른 방식을 시도해 보기로 했습니다. 그들은 거대 언어 모델(LLM)로 알려진 초지능형 AI에게 이 테스트 트랙을 만들어 달라고 요청했습니다. 이 AI들은 거의 모든 책과 코드 조각을 읽은 디지털 천재와 같아서, 명령을 이해하고 코드를 작성하는 데 매우 뛰어납습니다. 하지만 문제가 있었습니다. 연구진이 처음에 AI에게 이 테스트 트랙을 만들어 달라고 요청했을 때, AI는 혼란에 빠졌습니다. AI는 가끔 존재하지 않는 가짜 부품을 만들어내거나, 작업 순서를 틀리거나, 안전성을 진정으로 테스트하기 위해 필요한 복잡하고 무작위적인 시나리오를 생성하는 데 실패하곤 했습니다. AI는 코드를 쓰는 데는 능숙했지만, 안전 테스트에 필요한 특정한 엄격한 규칙을 따르는 데는 서툴렀습니다.

여기서 'HarnessLLM'이라는 논문이 등장합니다. 저자인 Minghua Wang, Yuwei Liu, Lin Huang은 단순히 AI에게 "가서 테스트 트랙을 만들어라"라고 말한 것이 아닙니다. 대신 그들은 AI를 위한 프로젝트 매니저 역할을 하는 영리하고 단계적인 워크플로우를 구축했습니다. 그들은 Rust 코드베이스에 이미 풍부한 정보, 즉 인간 개발자들이 작성한 기존 테스트 케이스들이 존재한다는 사실을 깨달았습니다. 이 테스트들은 코드가 어떻게 사용되어야 하는지를 보여주는 청사진과 같습니다. HarnessLLM은 먼저 이러한 기존 테스트를 살펴보고 특정 '호출 시나리오(calling scenarios)', 즉 코드가 실제로 작동하는 정확한 순간들을 찾아냅니다. 그런 다음 이 순간들을 격리하여 AI가 이해할 수 있는 깨끗하고 단순한 레시피로 변환합니다.

진정한 마법은 AI가 '비결정론적(nondeterministic)' 인자를 생성해야 할 때 일어납니다. 쉽게 말해, AI가 코드를 망가뜨리기 위해 무작위 입력을 만들어 던져야 한다는 뜻입니다. 만약 코드가 단순한 숫자를 기대한다면 AI는 무작위 숫자를 쉽게 추측할 수 있습니다. 하지만 코드가 많은 움직이는 부품을 가진 복잡하고 맞춤 제작된 객체를 기대한다면, AI는 길을 잃기 쉽습니다. 이를 해결하기 위해 HarnessLLM은 '의존성 그래프(dependency graph)'를 구축합니다. 이것을 퍼즐의 각 조각이 서로 어떻게 연결되는지를 보여주는 지도라고 상상해 보십시오. 그 후 시스템은 AI에게 '생각의 사슬(Chain-of-Thought)' 지침을 제공하는데, 이는 단계별 레시피 카드와 같습니다. 이 지침은 AI에게 다음과 같이 말합니다: "먼저 작은 벽돌을 만드세요. 그다음, 그 벽돌을 사용하여 벽을 만드세요. 마지막으로, 그 벽을 사용하여 집을 지으세요." 이는 AI가 기초를 놓기도 전에 지붕을 만들려고 시도하는 것을 방지합니다.

또한, 이 시스템에는 내장된 '사실 확인자(fact-checker)'가 있습니다. AI가 코드를 작성하면, 그것은 컴파일(컴퓨터가 실행할 수 있는 형식으로 번역)됩니다. 만약 컴퓨터에서 오류가 발견되면, 시스템은 단순히 "수정하라"고 말하는 대신, "당신은 존재하지 않는 타입을 만들어냈다"라거나 "당신은 이미 올바른 부분의 코드를 변경했다"라고 구체적으로 알려줍니다. 이는 AI가 가짜 해결책을 환각(hallucination)하는 것을 막고, 실제 오류에만 집중하도록 강제합니다.

연구진은 이 시스템을 9개의 실제 Rust 라이브러리(도시의 서로 다른 구역과 같은)를 대상으로 테스트했습니다. 그들은 494개의 기존 테스트 케이스로 시작하여 HarnessLLM에게 이를 검증 하네스로 변환하도록 요청했습니다. 결과는 인상적이었습니다. 시스템은 94.66%의 정밀도로 294개의 고유한 호출 시나리오를 성공적으로 추출했습니다. 그 후, 모든 시나리오에 대해 작동하는 하네스를 생성하여 100%의 성공률을 달ت했습니다. 각 하네스를 생성하는 데 평균 약 145초가 걸렸습니다. 이와 대조적으로, Autoharness라는 기존 도구는 복잡한 맞춤형 타입을 처리하지 못해 동일한 시나리오 중 약 41% 정도의 하네스만 생성할 수 있었습니다.

아마도 가장 중요한 점은, 이것이 단지 이론적인 연습이 아니었다는 것입니다. 연구진이 생성된 하네스를 실제 코드에 실행했을 때, 6개의 실제 메모리 안전 버그를 발견했습니다. 이 중 5개의 버그는 이미 개발자들에 의해 수정되었으며, 나머지 1개는 현재 검토 중입니다. 이는 이 도구가 단순히 예쁜 코드를 만드는 것이 아니라, 실제로 위험한 결함을 찾아낼 수 있음을 증명합니다. 이 논문은 기존 테스트 스위트에 담긴 지식과 AI의 창의적인 힘을 결합하고, 이를 엄격한 규칙과 피드백 루프로 안내함으로써, 소프트웨어 안전성을 검증하는 지루하고 어려운 작업을 자동화하여 우리의 디지털 도시를 훨씬 더 안전한 곳으로 만들 수 있다고 제안합니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →