기계번역 (gemma-4-12B, 로컬 GPU) — 수식·그림은 원문 그대로, 오역 가능성 있음. 영어 원문 보기
License: arXiv.org perpetual non-exclusive license
arXiv:2605.13918v1 [cs.SE] 13 May 2026

CA2: 자동화된 게임 테스트를 위한 코드 인식 에이전트(Code-Aware Agent)

Abstract.

자동화된 게임 테스트는 게임의 기능을 검증하는 데 중요하지만, 여전히 비용과 시간이 많이 소요되는 프로세스입니다. 수동 테스트는 종종 엣지 케이스(edge cases)를 놓치기 쉬우며, 현재의 자동화된 방식은 전체 코드 커버리지(code coverage)를 제공하는 데 어려움을 겪고 있습니다. 기존 연구에서는 게임 테스트를 위해 강화 학습(reinforcement learning, RL)을 탐구해 왔으나, 호출 스택(call stack)과 같은 내부 코드 신호를 활용하지는 못했습니다. 본 논문에서는 호출 스택 정보를 사용하여 효과적인 테스트 전략을 학습하는 코드 인식 에이전트(Code-Aware Agent, CA2)를 제시합니다. 에이전트는 게임 상태와 함께 현재의 함수 호출 트레이스(call trace)를 전달받으며, 특정 목표 함수에 도달하는 방법을 학습합니다. 우리는 효율적인 호출 스택 추출을 지원하는 두 가지 유형의 환경, 즉 1) 상태 기반(State-based) 및 2) 이미지 기반(Image-based) 환경을 구축했습니다. 실험적 평가를 통해, CA2는 호출 스택 정보를 활용하지 않는 비코드 인식(non-code aware) 베이스라인보다 일관되게 향상된 성능을 보임을 확인했습니다. 우리의 결과는 호출 스택과 같은 코드 신호를 통합하는 것이 더욱 효과적이고 목표 지향적인 게임 테스트를 가능하게 한다는 것을 보여줍니다.

keywords
Keywords: Reinforcement Learning, Representation Learning, Game-Testing.
Valliappan Chidambaram Adaikkappan\upstairs\affilone\affilthree, Vincent Martineau \upstairs\affiltwo, Joshua Romoff \upstairs\affiltwo, David Meger\upstairs\affilone\affilthree
\upstairs\affilone McGill University
\upstairs\affiltwo Ubisoft
\upstairs\affilthree Mila Quebec AI Institute
\emails

출판 전 논문(Preprint). 교신저주: valliappan.chidambaramadaikkappa@mail.mcgill.ca

1. INTRODUCTION

자동화된 게임 테스트는 게임 개발에서 품질, 안정성 및 성능을 보장하는 데 도움을 주는 중요한 부분이다. 그러나 그 중요성에도 불구하고, 이는 여전히 가장 지루하고 노동 집약적인 작업 중 하나로, 종종 대규모의 인간 테스터 팀을 필요로 한다 [22]. 최근 추세는 수동 테스트, 스크립트 기반의 커버리지 절차(scripted coverage procedures), 그리고 기본적인 단위 테스트(unit tests) [11]와 같은 전통적인 테스트 방식을 돕기 위해 AI 도구를 사용하는 양상을 보인다. 강화 학습(RL) 에이전트는 다양한 비디오 게임 환경에서 복잡한 인간의 행동을 시뮬레이션할 수 있음이 입증되었기에 잠재적으로 훌륭한 후보가 된다 [20, 13]. 그러나 단순히 인간의 행동을 복제하는 자동화된 테스트 방식의 효과는 여전히 상당 부분 미개척 상태로 남아 있다. 자동화된 게임 테스트에 관한 대부분의 이전 연구는 에이전트가 광범위한 게임 상태를 방문하도록 보장하는 상태 커버리지(state coverage) [12, 25, 18]를 극대화하는 데 초점을 맞춘다. 그러나 동일한 게임 상태에서도 선택한 행동에 따라 다양한 함수 호출이 트리거될 수 있다. 결과적으로, 상태 커버지만으로는 의미 있는 코드 커버리지(code coverage)를 보장할 수 없다.

Refer to caption
그림 1. 자동화된 게임 테스트를 위한 코드 인식 에이전트(Code-Aware Agent, CA2)를 보여준다. 이는 호출 스택(call stack) 정보를 활용하여 저수준(low-level) 게임 함수를 원활하게 테스트한다.

본 논문은 코드 커버리지(code coverage)를 개선하는 것을 목표로 하는 기능 테스트(functional test)를 위해 에이전트를 훈련시키는 기능 수준의 강화학습(RL) 기반 게임 테스트와 관련된 새로운 연구 도구 및 방법론을 제안한다. 구체적으로, 우리는 Gym 환경 프레임워크 [7]를 따르는 게임 기능 테스트용 두 가지 새로운 환경을 제시한다. 첫 번째 환경은 이전의 강화학습 연구 [5]에서 탐구된 다단계 Godot 게임을 기반으로 구축되었다. 두 번째 환경은 매우 잘 알려진 Crafter [14] 강화학습 벤치마크를 게임 테스트 시나리오로 변환한 것이다. 기존의 강화학습 환경과 달리, 우리는 함수 도달을 위한 희소 보상(sparse rewards)을 정의하며, 이를 위해 기존의 Gym 인터페이스에 소스 코드 프로파일러(source code profiler)를 통합해야 한다. 프로파일러와 함께 실제 비디오 게임 엔진을 실행하는 것은 속도가 느리고, 수백만 개의 샘플이 필요한 온라인 강화학습 훈련을 위해 확장하기 어렵다 [20]. 따라서 우리는 인간 테스터가 수집한 전문가 데이터 코퍼스(corpus)를 구축하여, 훈련을 위해 게임 엔진과 직접 상호작용할 필요가 없는 모방 학습(imitation learning, IL) 또는 오프라인 강화학습(offline RL) 알고리즘을 사용할 수 있도록 하였다. 우리 환경에 소스 코드 프로파일러를 통합함으로써 강화학습 에이전트는 게임과 상호작용하는 동안 코드 인지(code-aware) 능력을 갖출 수 있다. 게임의 시뮬레이션된 물리적 공간의 이미지나 기타 전사(transcriptions)를 포함하는 일반적인 관측값 외에도, 우리는 콜 스택(call stack)을 추가적인 관측값으로 활용할 수 있는 에이전트를 실험하였다.

이를 위해, 우리는 호출 스택(call stack) 정보를 활용하여 저수준의 게임 상태 함수를 이해하고 테스트할 수 있는 코드 인식 에이전트(Code-Aware Agent)를 제안한다. 우리의 접근 방식에서 에이전트는 게임을 플레이하며 소스 코드 내의 목표 메서드에 도달하려고 시도하며, 이 과정에서 실행 경로를 탐색하고, 코드베이스를 실행하며, 버그나 크래시를 발견하고, 성능 특성을 검증한다. 우리는 호출 스택과 같은 프로그램적 피드백을 통합함으로써, 강화 학습(RL)이 특정 함수 수준의 목표에 도달하는 측면에서 기존의 코드 비인식 에이전트보다 우수한 성능을 보일 것이라는 가설을 세웠다. 이는 에이전트가 함수 커버리지(function-coverage) 목표를 관찰 가능하게 만들지만, 동시에 다중 양식(multi-modality)의 문제를 야기한다. 함수 스택과 물리적 관측값은 차원과 전이 역학(transition dynamics)이 크게 다르기 때문이다. 우리는 이러한 상태 요소들을 단순히 통합하는 것만으로는 에이전트의 성능이 크게 향상되지 않지만, 세심하게 설계된 결합 표현(joint representations)을 통해 우리의 코드 인식 에이전트가 테스트 효율을 높여준다는 것을 확인했다. 우리의 접근 방식은 이산적 행동 공간을 가진 픽셀 기반 환경과 연속적 행동을 가진 상태 기반 환경 모두에서 효과적임을 입증한다. 주요 기여도는 다음과 같다:

  • 우리는 두 가지 함수 수준(function-level) 게임 테스트 환경인 Crafter와 Godot을 소개한다. 각 환경은 경량 소스 코드 프로파일러(source code profiler)가 내장되어 있으며, 오프라인 강화 학습(offline reinforcement learning)을 지원하기 위해 전문가 수준의 게임 궤적(gameplay trajectories)을 갖추고 있다.
  • • 표준 오프라인 모방 학습(Offline Imitation Learning, IL) 및 강화 학습(Reinforcement Learning, RL) 아키텍처에 콜 스택(call stack) 관측 정보를 추가한 새로운 코드 인식(code-aware) 에이전트 설계입니다. 그림 1을 참조하십시오.
  • 제안된 접근 방식은 설계 단계부터 엔진 독립적(engine-agnostic)입니다. 우리는 이를 두 가지 서로 다른 구현을 통해 입증합니다. 하나는 Pygame 엔진(Python)으로 구축된 픽셀 기반 환경인 Crafter이며, 다른 하나는 Godot(GDScript)로 구현된 Multilevel Robot Game입니다.

2. 관련 연구 (RELATED WORK)

자동 게임 테스트(Automated Game testing). 여러 연구에서 게임 테스트를 위한 인공지능(AI)의 활용을 조사해 왔다. [8]은 20개의 실제 게임을 대상으로 시각적 오류와 같은 비충돌성 게임 글리치(glitch)를 탐지하기 위한 객체 탐지 기반 방식을 제안했다. 이 방식은 사용자 인터페이스(User Interface, UI) 글리치로부터 게임 이미지를 생성할 수 있는 데이터 증강(data augmentation) 방식을 기반으로 한다. 최근 거대 언어 모델(Large Language Models, LLMs)의 발전은 스타크래프트 II [28], 마인크래프트 [17], 문명 [23]과 같은 복잡한 비디오 게임 환경을 위한 범용 에이전트(generalist agents) 개발을 촉진했다. 초기 시스템은 종종 게임과 상호작용하기 위해 구조화된 API나 사전 정의된 행동 공간(action spaces)에 의존하는데, 이는 제어를 단순화하지만 환경 간의 일반화 능력을 제한한다. 엔드투엔드(End-to-end) 방식은 더 높은 유연성을 보여주었다. VPT [4]은 에이전트가 인간의 게임 플레이에 대한 대규모 사전 학습을 통해 원시 비디오(raw video)로부터 직접 학습할 수 있음을 보여주었으나, 이러한 데이터셋은 수집 비용이 많이 들고 확장하기 어렵다. 이와 유사하게, SIMA [26]은 행동 복제(behavior cloning)를 사용하여 여러 3D 게임에서 체화된 에이전트(embodied agents)를 훈련했지만, 높은 데이터 요구량과 제한된 전이성(transfer)으로 인해 제약이 있었다. 더 최근의 연구들은 자율적인 기술 습득과 지속적 학습(continual learning)을 강조한다. VOYAGER [30]은 마인크래프트에서 개방형 탐색을 가능하게 하기 위해 자가 생성 커리큘럼을 도입했으며, Cradle은 레드 데드 리뎀션 2와 같은 시각적으로 풍부하고 구조화되지 않은 게임에서 작동하기 위해 멀티모달 LLM(multimodal LLMs)을 활용했다. 게임 전용 에이전트를 넘어, 여러 연구는 임의의 사용자 인터페이스 및 환경과의 범용적 상호작용뿐만 아니라, 가상 세계에서 사회적 행동과 다중 에이전트 협업을 모델링하기 위한 LLM 에이전트의 활용을 탐구해 왔다. [21, 29, 24] 강화 학습 기반 게임 테스트(Reinforcement learning Assisted Gameplay Testing). 여러 연구에서 자동화된 게임 테스트를 위해 강화 학습(Reinforcement Learning, RL)의 사용을 제안했다. [31]은 진화적 다목적 최적화(evolutionary multi-objective optimization, EMOO)와 심층 강화 학습(deep reinforcement learning, DRL)을 사용하여 버그가 존재할 수 있는 더 많은 게임 상태를 탐색하는 효과적인 정책을 생성하는 것을 목표로 하는 Wuji를 제시했다. 이와 유사하게, [1]은 레벨 디자인에서의 내비게이션 행동을 이해하기 위해 RL과 진화 알고리즘을 사용했으며, 주요 기여는 웹 기반 시각화 도구이다. 이 연구는 소닉 더 헤지혹 2라고 불리는 특정 2D 게임에 초점을 맞췄다. 최근 연구들은 게임 테스트를 위해 탐색 보상(exploration rewards)을 사용했다. [6]은 버그가 있는 환경을 설계하고, 새로운 상태를 탐색하기 위해 내비게이션을 수행하는 보상 신호를 가진 RL 에이전트를 설계하여 테스트 커버리지가 증가함을 보여주었다. 이 연구와 유사하게, [12, 25, 18, 16]은 자동화된 게임 테스트를 위해 상태 커버리지를 우선시하는 탐색을 위한 호기심 기반 내재적 보상(curiosity-based intrinsic reward)을 사용했다. 특히, [25]은 전문가 시연을 모방하면서 탐색할 수 있는 에이전트를 훈련하는 방식을 제안했다. EVOLUTE [2]은 이산적(discrete) 및 연속적(continuous) 행동을 모두 처리하기 위해 행동 복제와 에너지 기반 모델을 결합하여 모방 학습(imitation learning)을 사용하는 최근의 접근 방식이다. 기존의 자동화된 게임 테스트 연구는 주로 상태 커버리지(state coverage)를 최대화하는 데 집중해 왔다 [12, 25, 18]. 이 전략은 환경의 테스트되지 않은 영역을 드러낼 수 있지만, 기본 코드베이스(underlying codebase)의 적절한 커버리지를 보장하지는 않는다. 우리가 알기로, 우리는 자동화된 게임 테스트를 위한 강화 학습에 콜 스택(call stack) 정보를 통합한 최초의 연구이다.

3. PRELIMINARIES

Refer to caption
그림 2. 본 연구의 코드 인식 에이전트(Code-Aware Agent)에 대한 도식. 모든 아키텍처는 유사한 입력 형식을 사용하며, 여기에는 목표(goal) gg, 호출 스택(call stack) st𝖼𝗈𝖽𝖾s^{\mathsf{code}}_{t}, 환경 상태(environment state) sts_{t}, 그리고 행동(action) ata_{t}이 포함되어 입력으로 사용된다.

문제 정의: 본 연구는 오프라인 학습(offline learning) 방식이며, 에이전트(agent)의 목표는 온라인 탐색(online exploration)을 통한 학습 권한 없이 기존 데이터로부터 관심 있는 기능들을 학습하고 성공적으로 도달하는 것이다. 본 연구에서는 게임 테스터들이 수행한 궤적(trajectory)으로 구성된 고정된 제한적 데이터셋에만 접근할 수 있다.

오프라인 강화학습(Offline Reinforcement Learning): 코드 인식 MDP(code-aware MDP)는 (S,C,A,P,G)(S,C,A,P,G) 튜플로 기술되며, 여기서 (S,A,P)(S,A,P)은 각각 에이전트 MDP의 상태 공간(state space), 행동 공간(action space), 전이(transition)이며, C는 코드 함수의 유한 집합이고, G⊂CG\subset C는 목표(target) 함수의 집합이다. 코드 인식 MDP는 S𝖼𝗈𝖽𝖾S^{\mathsf{code}}가 호출 스택(call stack) 공간인 새로운 MDP (S×S𝖼𝗈𝖽𝖾,A,P)(S\times S^{\mathsf{code}},A,P)을 유도한다. 이 MDP에서의 에이전트는 목표 조건부(goal-conditioned)이며, 목표 g∈Gg\in G가 주어지면 g∈s𝖼𝗈𝖽𝖾g\in s^{\mathsf{code}}을 만족하는 상태 x=(s,s𝖼𝗈𝖽𝖾)x=(s,s^{\mathsf{code}})에 도달하려고 시도한다. 함수 호출의 수는 함수 호출에 따라 한 타임스텝에서 다른 타임스텝으로 변화하며 임의의 길이를 가질 수 있다. 궤적(trajectory) τ\tau은 다음과 같이 표현된다: (s0,s0𝖼𝗈𝖽𝖾,a0,s1,s1𝖼𝗈𝖽𝖾,a1CLOSE(s_{0},s^{\mathsf{code}}_{0},a_{0},s_{1},s^{\mathsf{code}}_{1},a_{1} ⋯sT,sT𝖼𝗈𝖽𝖾,aT)\cdots s_{T},s^{\mathsf{code}}_{T},a_{T}), 여기서 [ft1,ft2⋯ftF][f_{t}^{1},f_{t}^{2}\cdots f_{t}^{F}]로 표현되는 함수 호출의 리스트가 st𝖼𝗈𝖽𝖾s^{\mathsf{code}}_{t}이며, f∈Cf\in C과 FF는 호출 스택의 길이를, t∈[0,T]t\in[0,T]과 TT은 궤적의 길이를 나타낸다. 목표 조건부 행동 복제(Goal-Conditioned Behavioral Cloning, GCBC): [19]은 동일한 궤적 내의 미래 상태를 목표로 사용하여 행동 복제(behavioral cloning)를 수행한다. 우리의 설정에서 목표 gg은 (호출 스택으로부터의) 목표 함수 이름을 의미하며, 에이전트는 s𝖼𝗈𝖽𝖾s^{\mathsf{code}}이 현재 상태의 호출 스택을 나타내는 목표 조건부 정책 π⁡(a∣s,s𝖼𝗈𝖽𝖾,g)\pi(a\mid s,s^{\mathsf{code}},g)을 학습한다. 정책을 훈련하는 데 사용되는 목적 함수는 행동 공간에 따라 달라진다:

(1) JG​C​B​C𝖽𝗂𝗌𝖼​(π)=𝔼(s,s𝖼𝗈𝖽𝖾,a,g)∼𝒟​[log⁡π⁡(a∣s,s𝖼𝗈𝖽𝖾,g)],J^{\mathsf{disc}}_{GCBC}(\pi)=\mathbb{E}_{(s,s^{\mathsf{code}},a,g)\sim\mathcal{D}}\left[\log\pi(a\mid s,s^{\mathsf{code}},g)\right],
(2) JG​C​B​C𝖼𝗈𝗇𝗍​(π)=𝔼(s,s𝖼𝗈𝖽𝖾,a,g)∼𝒟​[‖π⁡(s,s𝖼𝗈𝖽𝖾,g)−a‖2],J^{\mathsf{cont}}_{GCBC}(\pi)=\mathbb{E}_{(s,s^{\mathsf{code}},a,g)\sim\mathcal{D}}\left[\|\pi(s,s^{\mathsf{code}},g)-a\|^{2}\right],

여기서 𝒟\mathcal{D}은 전이 튜플(transition tuples) (s,s𝖼𝗈𝖽𝖾,a,r,s′,s𝖼𝗈𝖽𝖾′,g)(s,s^{\mathsf{code}},a,r,s^{\prime},s^{\mathsf{code}^{\prime}},g)의 집합이며, (s′,s𝖼𝗈𝖽𝖾′)(s^{\prime},s^{\mathsf{code^{\prime}}})는 코드 인식 상태(code-aware state) (s,𝖼𝗈𝖽𝖾)(s,\mathsf{code})에서 행동 a를 취했을 때 도달하는 코드 인식 상태를 의미한다. gg은 목표(goal)이다. 데이터셋 구축에 대한 상세한 내용은 섹션 6에서 다룬다. 식 1과 2은 각각 이산적(discrete) 및 연속적(continuous) 행동 공간에서 사용되는 손실 함수(loss functions)에 해당한다. 목표 조건부 암시적 Q-학습(Goal-Conditioned Implicit Q-Learning, GCIQL)은 기대치 회귀(expectile regression)를 사용하여 가치 함수를 학습하는 암시적 Q-학습(Implicit Q-Learning, IQL) [15]의 목표 조건부 변형이다. 우리의 설정에서 가치 함수와 Q-함수는 상태 및 목표 외에도 콜 스택(call stack) s𝖼𝗈𝖽𝖾s^{\mathsf{code}}에 조건화된다. GCIQL은 다음의 손실을 최소화함으로써 Q⁡(s,s𝖼𝗈𝖽𝖾,a,g)Q(s,s^{\mathsf{code}},a,g)과 V⁡(s,s𝖼𝗈𝖽𝖾,g)V(s,s^{\mathsf{code}},g)을 학습한다.

(3) ℒVGCIQL​(V)=𝔼(s,s𝖼𝗈𝖽𝖾,a,g)∼𝒟​[ℓκ2​(Q¯​(s,s𝖼𝗈𝖽𝖾,a,g)−V⁡(s,s𝖼𝗈𝖽𝖾,g))],\begin{split}\mathcal{L}_{V}^{\text{GCIQL}}(V)&=\mathbb{E}_{(s,s^{\mathsf{code}},a,g)\sim\mathcal{D}}\left[\ell^{2}_{\kappa}\left(\bar{Q}(s,s^{\mathsf{code}},a,g)-V(s,s^{\mathsf{code}},g)\right)\right],\end{split}
(4) ℒQGCIQL​(Q)=𝔼(s,s𝖼𝗈𝖽𝖾,a,s′,s𝖼𝗈𝖽𝖾′,g)∼𝒟​[(r⁡(s,s𝖼𝗈𝖽𝖾,g)+γ​V​(s′,s𝖼𝗈𝖽𝖾′,g)−Q⁡(s,s𝖼𝗈𝖽𝖾,a,g))2],\begin{split}\mathcal{L}_{Q}^{\text{GCIQL}}(Q)&=\mathbb{E}_{(s,s^{\mathsf{code}},a,s^{\prime},s^{\mathsf{code^{\prime}}},g)\sim\mathcal{D}}\left[\left(r(s,s^{\mathsf{code}},g)+\gamma V(s^{\prime},s^{\mathsf{code^{\prime}}},g)-Q(s,s^{\mathsf{code}},a,g)\right)^{2}\right],\end{split}

여기서 r(s,s𝖼𝗈𝖽𝖾,g)=𝕀{g∈s𝖼𝗈𝖽𝖾}−1r(s,s^{\mathsf{code}},g)=\mathbb{I}\{g\in s^{\mathsf{code}}\}-1은 희소 목표 조건부 보상 함수(sparse goal-conditioned reward function)이고, Q¯\bar{Q}은 목표 Q-함수(target Q-function)이며, ℓκ2\ell^{2}_{\kappa}는 기대치 파라미터(expectile parameter) κ\kappa을 0.8로 설정한 기대치 손실(expectile loss)입니다. 학습된 가치 함수(value functions)로부터 정책(policy)을 추출하기 위해, 우리는 TD3+BC [10]에 기반한 행동 정규화된 액터 업데이트(behavior-regularized actor update)를 사용합니다.

(5) JTD3+BC​(π)=𝔼(s,s𝖼𝗈𝖽𝖾,a,s′,s𝖼𝗈𝖽𝖾′,g)∼𝒟​[Q⁡(s,s𝖼𝗈𝖽𝖾,π⁡(s,s𝖼𝗈𝖽𝖾,g),g)−λ​JG​C​B​C​(π)],\begin{split}J_{\text{TD3+BC}}(\pi)&=\mathbb{E}_{(s,s^{\mathsf{code}},a,s^{\prime},s^{\mathsf{code^{\prime}}},g)\sim\mathcal{D}}\left[Q(s,s^{\mathsf{code}},\pi(s,s^{\mathsf{code}},g),g)-\lambda~J_{GCBC}(\pi)\right],\end{split}

여기서 λ\lambda은 Q-값(Q-value) 최대화와 행동 정책(behavior policy)에 근접하게 유지하는 행동 복제 손실(BC loss) 사이의 절충(trade-off)을 조절합니다.

디시전 트랜스포머(Decision Transformers, DT): 시퀀스 모델링(sequence modeling) 문제를 효율적으로 처리하기 위해 Lili 등이 디시전 트랜스포머(DT) 구조를 제안했다 [9]. DT는 자기회귀(autoregressive) 모델이 목표 수익(보상, reward), 과거 상태, 그리고 행동을 조건으로 하여 최적의 행동을 출력하도록 한다. 이 모델의 단순성과 확장성 덕분에 우리는 다중 모달(multi-modal) 데이터를 인코딩할 수 있으며, 본 연구에서는 관측값(observation)과 콜 스택(call stack)을 그 대상으로 삼는다. [27]이 도입한 트랜스포머(Transformer) 구조는 시퀀스 데이터를 효율적으로 처리하도록 설계된 강력한 모델이다. 트랜스포머의 핵심 개념은 셀프 어텐션(self-attention) 메커니즘으로, 이는 모델이 예측을 수행할 때 입력 시퀀스의 서로 다른 부분에 집중할 수 있게 해준다. 트랜스포머는 여러 층의 셀프 어텐션과 피드포워드 신경망(feedforward networks)으로 구성되며, 각 층은 학습을 돕기 위한 잔차 연결(residual connections)을 갖는다. 각 셀프 어텐션 층에서 입력 시퀀스는 먼저 각 토큰에 대응하는 일련의 nn 임베딩 {xi}i=1n\{x_{i}\}_{i=1}^{n}으로 변환된다. 이 임베딩들은 학습된 선형 투영(linear projections)을 통해 쿼리 qiq_{i}, 키 kik_{i}, 그리고 값 viv_{i}으로 변환된다. ii번째 토큰에 대한 출력 임베딩 ziz_{i}은 모든 값 벡터의 가중치 합으로 계산되며, 이때 가중치는 ii번째 쿼리와 각 키 사이의 유사도에 의해 결정된다.

(6) zi=∑j=1nsoftmax​({⟨qi,kj′⟩}j′=1n)j⋅vj,z_{i}=\sum_{j=1}^{n}\text{softmax}\left(\left\{\langle q_{i},k_{j^{\prime}}\rangle\right\}_{j^{\prime}=1}^{n}\right)_{j}\cdot v_{j},

이 메커니즘을 통해 모델은 입력의 어느 부분들이 서로 가장 밀접하게 관련되어 있는지 학습할 수 있으며, 이는 트랜스포머(Transformers)를 장거리 의존성(long-range dependencies)이 포함된 작업에 특히 효과적으로 만듭니다.

4. METHOD

이 섹션에서는 본 연구의 핵심 기여인 목표 조건부 강화 학습(goal-conditioned reinforcement learning) 에이전트에 콜 스택(call stack) 정보를 보강하는 방법을 설명한다. 우리는 1) 콜 스택 인코딩(Call Stack encoding)과 2) 자동화된 게임플레이 테스트를 위해 변형된 디시전 트랜스포머(Decision Transformer) [9]를 제시한다. 스칼라 보상(scalar rewards)이나 잔여 수익(return-to-go)을 조건으로 하는 기존 프레임워크와 달리, 우리의 공식은 정책을 원하는 목표에 맞추고 각 타임스텝에서 콜 스택 추적(call stack traces)을 통합한다. 이러한 설정은 누적 보상을 최적화하는 것에서 프로그램적 목표(programmatic objectives)를 달성하는 것으로 초점을 전환하며, 이는 테스트 생성 작업에 매우 적합하다. 전체 아키텍처는 그림 2에 도식화되어 있으며, 알고리즘 1는 기존의 디시전 트랜스포머(DT) 알고리즘 [9]과 비교되는 차이점을 강조한다.

4.1. 콜 스택 인코딩(CALL STACK ENCODING)

각 타임스텝(timestep) tt에서, 우리는 호출 스택(call stack) st𝖼𝗈𝖽𝖾s^{\mathsf{code}}_{t}을 함수 호출의 순서가 있는 목록으로 포함한다. 우리는 함수 [f1,f2⋯fF][f^{1},f^{2}\cdots f^{F}]의 순서가 있는 목록으로 구성되는 st𝖼𝗈𝖽𝖾s^{\mathsf{code}}_{t}를 인코딩하기 위해 세 가지 서로 다른 접근 방식을 실험한다.

  • • 단순 토큰 임베딩(Simple Token Embedding): s𝖼𝗈𝖽𝖾s^{\mathsf{code}}의 각 함수는 임베딩 테이블(embedding table)을 통해 임베딩됩니다. 이는 고정된 사전과 크기 ℰ:C→ℝd\mathcal{E}:C\to\mathbb{R}^{d}의 임베딩을 저장하는 단순 룩업 테이블(lookup table)이며, 여기서 dd는 임베딩 차원(embedding dimension)을 나타냅니다. 결과로 도출된 벡터들은 합산되어 호출 스택(call stack)을 위한 단일 임베딩을 형성합니다.
    (7) CSe​m​b=∑i=1Fℰ⁡(fi)\text{CS}_{emb}=\sum_{i=1}^{F}\mathcal{E}(f^{i})
  • • 선형 투영(Linear Projection): 우리는 임베딩 테이블(embedding table) ℰ\mathcal{E}에서 함수 임베딩(function embeddings)을 추출하고, 시퀀스 내의 각 임베딩에 학습된 선형 투영 W∈ℝd×dW\in\mathbb{R}^{d\times d}을 적용한 다음, 그 결과로 나온 벡터들을 합산한다:
    (8) CSe​m​b=∑i=1FW⋅ℰ⁡(fi)\text{CS}_{emb}=\sum_{i=1}^{F}W\cdot\mathcal{E}(f^{i})
  • • 멀티 헤드 셀프 어텐션(Multi-Head Self-Attention, MHSA): 함수 임베딩(Function embeddings)은 멀티 헤드 셀프 어텐션(MHSA) 블록 [27]을 통해 처리됩니다. 그 결과로 도출된 출력 토큰들은 합산(summation)을 통해 하나의 컨텍스트 벡터(context vector)로 통합됩니다:
    (9) CSemb=∑i=1FMHSA​([ℰ⁡(f1),ℰ⁡(f2),…,ℰ⁡(fF)])i\text{CS}_{\text{emb}}=\sum_{i=1}^{F}\text{MHSA}([\mathcal{E}(f^{1}),\mathcal{E}(f^{2}),\dots,\mathcal{E}(f^{F})])_{i}

DT의 경우, 그림 2에 표시된 바와 같이 CSe​m​b\text{CS}_{emb}이 다른 토큰 임베딩(token embeddings)과 결합(concatenated)됩니다. 반면 GCBC 및 GCIQL에서는 CSe​m​b\text{CS}_{emb}가 목표(goal) 및 상태 표현(state representation)과 함께 결합됩니다. 우리는 호출 스택(call stack)을 위해 트랜스포머 기반 인코더(transformer-based encoder)를 사용하는 것이 일반화 성능을 향상시키고 원하는 테스트 동작을 수행하도록 한다는 것을 확인했습니다.

4.2. AGENT: GC-DT

알고리즘 1 호출 스택(Call Stack)을 활용한 목표 조건부 DT(Goal Conditioned DT)
# g, cs, s, a, t: goal, call stack, state, action, timestep
# transformer: GPT Style
# embed_g, embed_a: Linear Embedding Layers
# embed_s: Conv / Linear Embedding Layers
# encode_cs: encoder for call stack
# embed_t: learned timestep embedding
# pred_a: action prediction head
# main model
def CodeAwareAgent(g, cs, s, a, t):
# shared timestep embedding
pos_emb = embed_t(t)
# compute embeddings
g_emb = embed_g(g) + pos_emb
# one token per call stack
cs_emb = encode_cs(cs) + pos_emb
s_emb = embed_s(s) + pos_emb
a_emb = embed_a(a) + pos_emb
# interleave input as
# (g, cs_1, s_1, a_1, ..., cs_K, s_K, a_K)
input_emb = stack(g_emb, cs_emb, s_emb, a_emb)
# pass through transformer
hidden_states = transformer(input_emb=input_emb)
# select action token embeddings for prediction
a_hidden = unstack(hidden_states).actions
# predict action
return pred_a(a_hidden)

우리의 목표는 훈련 및 추론 과정에서 목표로 사용되는 특정 함수의 실행을 유도하는 행동을 모델링하는 것이다. 목표 조건부 생성(goal-conditioned generation)을 지원하기 위해, 우리는 궤적(trajectory)을 목표 gg, 각 타임스텝에서의 호출 스택(call stack) st𝖼𝗈𝖽𝖾s^{\mathsf{code}}_{t}, 환경 상태 sts_{t}, 그리고 취해진 행동 ata_{t}을 포함하는 토큰화된 입력 시퀀스로 표현한다. 이는 다음과 같은 자기회귀(autoregressive) 궤적 형식으로 이어진다:

(10) τ=(g,s1𝖼𝗈𝖽𝖾,s1,a1,s2𝖼𝗈𝖽𝖾,s2,a2,…,sT𝖼𝗈𝖽𝖾,sT,aT),\tau=\left(g,s^{\mathsf{code}}_{1},s_{1},a_{1},s^{\mathsf{code}}_{2},s_{2},a_{2},\dots,s^{\mathsf{code}}_{T},s_{T},a_{T}\right),

여기서 gg은 주어진 궤적(trajectory)에 대해 고정되며, 조건부 정보(conditioning)로서 시퀀스 앞에 추가됩니다. 수익률(returns-to-go)을 조건으로 하는 표준적인 디시전 트랜스포머(Decision Transformers)와 달리, 우리는 에이전트가 실행하기를 원하는 코드 경로에 대응하는 함수 수준의 목표(function-level goal) gg을 명시적으로 제공합니다. 이를 통해 모델은 수치적 보상을 획득하는 대신, 에이전트를 원하는 프로그램적 동작(programmatic behavior)으로 유도하는 행동을 생성할 수 있게 됩니다. 학습 및 추론. 학습 과정에서 모델은 목표, 콜 스택(call stack), 그리고 상태(state)가 주어졌을 때 다음 행동을 예측하도록 학습합니다.

(11) π⁡(at∣g,s≤t𝖼𝗈𝖽𝖾,s≤t,a<t).\pi(a_{t}\mid g,s^{\mathsf{code}}_{\leq t},s_{\leq t},a_{<t}).

테스트 시점에 에이전트(agent)에게는 목표 gg와 초기 환경 상태가 주어집니다. 모델은 변화하는 콜 스택(call stack)과 상태 이력(state history)을 문맥으로 활용하여 행동을 자기회귀적(autoregressively)으로 생성합니다. 이를 통해 에이전트는 다양한 게임 플레이 조건에서 특정 기능이 수행되는지 반복적으로 테스트할 수 있습니다. 구조. 우리는 마지막 KK 타임스텝을 목표 조건부 의사결정 트랜스포머(Goal-Conditioned Decision Transformer)에 입력하며, 그 결과 목표, 콜 스택, 상태, 행동을 위한 각각의 4​K4K 토큰 시퀀스가 생성됩니다. 각 입력 양식(modality)은 학습된 투영(projection)을 통해 임베딩됩니다. 구체적으로 상태와 행동에는 선형 층(linear layer)을 적용하고, 콜 스택에는 멀티 헤드 셀프 어텐션(Multi-Head Self-Attention) 인코더를 적용합니다. 그 다음에는 훈련을 안정화하기 위해 레이어 정규화(layer normalization) [3]를 수행합니다. crafter와 같이 시각적 관측이 포함된 환경의 경우, 상태는 먼저 컨볼루션 인코더(convolutional encoder)를 통해 처리되며, 이 인코더는 토큰 임베딩 공간으로 투영되기 전의 잠재 벡터(latent vector)를 출력합니다. 또한, 각 타임스텝에는 학습된 타임스텝 임베딩이 할당되며, 이는 해당 타임스텝에 해당하는 모든 토큰에 더해집니다.

5. ENVIRONMENT

우리는 강화 학습(RL) 훈련과 코드 프로파일링(code profiling)을 지원하는 두 개의 환경을 구축했다. 이 환경들은 Godot [5] 및 Crafter [14]을 기반으로 구축되었다.

5.1. GODOT

Godot은 오픈 소스 게임 엔진이며, Godot RL Agent [5]는 심층 강화 학습(Deep Reinforcement Learning, DRL) 연구를 위해 맞춤화된 도구입니다. 이는 게임 엔진과 강화 학습(RL) 알고리즘 사이의 인터페이스를 제공합니다. Godot Multilevel Robot에서 봇은 초기 위치에서 시작하여 더 높은 레벨로 이동해야 합니다. 코드 기반 정보를 제공하기 위해, 우리는 기존의 일반적인 관측값과 더불어 코드 상태(호출 스택, call stack)를 포함하도록 게임 엔진 코드를 수동으로 수정했습니다. 에이전트는 환경에서 수행하는 각 행동에 따른 해당 함수 호출에 대한 피드백을 받습니다. 관측 공간(observation space)은 플레이어와 관련된 레이캐스트(Raycast) 데이터 및 수집 가능한 아이템까지의 거리를 포함하는 11 차원의 벡터입니다. 여기에 더해, 우리는 해당 관측을 유도한 행동에 의해 트리거된 함수 호출을 추가했습니다. 우리는 각 행동 단계에서 호출되는 3434개의 게임플레이 관련 함수를 식별했습니다. 해당 환경은 88의 행동 반복(action repeat)을 사용합니다. 중복을 줄이기 위해, 에이전트의 행동과 관계없이 매 프레임 실행되는 함수는 제외했습니다. 불필요한 함수를 제거한 결과, 강화 학습 에이전트의 잠재적 목표가 될 수 있는 2424개의 흥미로운 함수가 남았습니다.

5.2. CRAFTER

Crafter는 단일 환경 내에서 광범위한 일반 능력(general abilities)을 평가하는 픽셀 기반 관찰(pixel-based observation) 방식의 오픈 월드 생존 게임이다. 각 행동 단계(action step)마다 추적된 게임플레이 관련 기능은 총 293293개였다. Godot에서 수행된 필터링과 유사하게, 우리는 에이전트의 행동과 관계없이 매 행동 단계마다 호출되는 기능들을 제거했다. 그 결과 9494개의 고유한 기능이 남았다. 이 기능들은 의미 있는 게임플레이 이벤트(gameplay events)를 나타내며, 강화 학습(RL) 에이전트를 활용한 회귀 테스트(regression testing)의 잠재적 목표로 활용될 수 있다. 상태 공간(state space)은 RGB 이미지와 해당 관찰을 유도한 행동에 의해 트리거된 기능 호출로 구성된다. 우리는 다른 사람들이 사용하기 쉽도록 도구화(instrumentation)를 최소화했다. 이는 게임 테스트에만 유용한 변경 사항을 추가하는 대신, [이후 문장 생략 또는 연결]을 위한 것이다. 더 자세한 내용은 부록(Appendix)에서 확인할 수 있다.

5.3. 데이터 수집 (DATA COLLECTION)

본 연구에서는 인간 테스터가 플레이어 데이터를 수집하는 실제 게임 테스트 시나리오를 모방하기 위해, 게임을 직접 수동으로 플레이하며 데이터를 수집하였다. Crafter의 경우, 약 100100k 개의 샘플이 포함된 300300 궤적(trajectories)을 수집하였으며, Crafter에 비해 상대적으로 단순한 게임인 Godot의 경우, 약 200200 궤적에 해당하는 2020k 샘플에서 수집을 중단하였다.

6. EXPERIMENTS

우리는 실험을 두 가지 주요 부분으로 나눈다. 주요 초점은 에이전트(agent)가 인간 테스터로부터 수집된 기존 게임플레이 데이터를 활용하는 오프라인 설정(offline setting)에 있다. 이 설정에서, 우리는 함수 커버리지(function coverage)와 게임플레이 성능을 평가하기 위해 Code-Aware Agent를 다른 목표 조건부 오프라인 강화학습(goal-conditioned offline reinforcement learning) 방법들과 비교한다. 다음으로, 우리는 다양한 설계 선택에 따른 결과를 제시하며, CA2(Multi-Head Self Attention을 활용한 콜 스택 정보의 사용)가 학습을 유의미하게 돕는다는 것을 입증한다. 우리는 이를 단순한 인코딩 기술들과 비교한다. 마지막으로, 우리는 에이전트의 성능에 유의미한 영향을 미치는 설계 선택들의 효과를 검증하기 위해 절제 연구(ablation study)를 수행한다.

6.1. 평가 설정 (Evaluation Setup)

모든 보고된 수치는 55개의 무작위 시드(random seeds)에 대해 평균된 것이며, 각 시드에서 최대 성공률(success rate)을 기준으로 가장 성능이 좋은 모델을 선정하였다. 공정성을 보장하기 위해, 모든 알고리즘은 동일한 횟수의 경사 업데이트(gradient updates)로 학습되었으며 동일한 조건에서 평가되었다. 평가(Evaluation) 단계에서는 각 목표 함수(target function)에 대해 10개의 에피소드(episodes)에 걸쳐 점수를 평균한다. 각 에피소드에서 에이전트(agent)는 특정 함수 수준의 목표를 부여받으며, 이 목표에 도달하는 능력을 평가받는다. 중요한 점은, 목표에 도달한 후에도 에피소드가 환경과 추가로 상호작용할 수 있도록 에피소드가 계속 진행된다는 것이다. 이는 에피소드별 보상(episodic return)과 함수 수준의 커버리지(function-level coverage)를 포괄적으로 측정할 수 있게 한다. 함수 커버리지는 모든 평가 에피소드가 완료된 후 계산된다. 이는 에이전트가 모든 에피소드에서 반드시 성공해야 하는 것이 아니라, 전체 평가 세트 전체에 걸쳐 다양한 함수를 최소 한 번이라도 성공적으로 트리거했는지를 반영한다. 이 지표는 목표 특정 성공률과 중복되지 않으면서도, 에이전트의 탐색적 및 기능적 행동의 폭을 포착한다. 특히, 성공률이 낮더라도 높은 함수 커버리지가 나타날 수 있는데, 이는 에이전트가 여전히 코드베이스의 의미 있는 부분들을 방문하고 실행하고 있음을 나타내며, 이는 견고한 테스트(robust testing)에 유익하다.

6.2. 평가 지표 (Evaluation Metrics)

오프라인 실험에서 우리는 세 가지 핵심 지표를 사용하여 에이전트(agent)의 성능을 평가한다.

  1. (1) 성공률(Success Rate): 이는 주요 지표로, 테스트 단계(test-time)에서 에이전트가 목표(goal)로 지정된 대상 함수에 성공적으로 도달한 에피소드(episode)의 백분율로 정의된다. 에이전트가 허용된 궤적 길이(trajectory length) 내에 원하는 함수에 도달하면 해당 에피소드는 성공한 것으로 간주한다. 각 목표에 대해 10개의 에피소드를 실행하며, 평균 성공률을 보고한다.
  2. (2) 에피소드 보상(Episode Return): 에피소드 동안 수집된 누적 보상이다. 이는 해당 작업의 특수한 보상 구조(reward structure)에 따라 에이전트(agent)가 환경 내에서 얼마나 효과적으로 수행하는지를 반영한다.
  3. (3) 함수 커버리지(Function Coverage): 평가 에피소드(evaluation episode) 동안 에이전트가 실행한 고유 함수의 수이다. 이 지표는 에이전트가 게임 환경과 얼마나 광범위하게 상호작용하는지를 파악하며, 에이전트의 행동 다양성(behavioral diversity)에 대한 통찰을 제공한다.

종합적으로, 성공률(success rate)은 목표 달성의 직접적인 지표 역할을 하는 반면, 기능 커버리지(function coverage)와 보상(reward)은 에이전트의 행동에 대한 보완적인 통찰을 제공한다.

7. RESULTS

이 섹션에서는 두 가지 게임 환경에서 코드 인식 에이전트(Code-Aware Agent)의 오프라인 설정(offline settings) 성능을 3가지의 서로 다른 지표를 사용하여 비교합니다. 또한, 이러한 결과가 도출된 원인을 상세하게 파악하고자 합니다.

7.1. 오프라인 결과 (OFFLINE RESULTS)

표 1의 결과는 코드 인식 에이전트(Code-Aware Agent)가 표준 행동 복제(Behavior Cloning, BC) 및 목표 조건부(Goal-Conditioned, GC) 베이스라인에 비해 작업 성능과 기능 범위(Function Coverage)를 모두 유의미하게 향상시킨다는 것을 보여준다. 구체적으로, 코드 인식 기능을 갖춘 GC 에이전트는 모든 지표에서 코드 인식 기능이 없는 대조군보다 일관되게 우수한 성능을 보였다. 이는 호출 스택(Call Stack)과 같은 구조화된 프로그램 신호를 통합하는 것이 에이전트가 게임 수행 능력을 잃지 않으면서도 더 높은 성공률을 달성할 뿐만 아니라, 환경의 기능적 공간을 더 효과적으로 탐색하는 데 도움이 된다는 점을 강조한다. 특히, GC-DT + CA2 모델은 가장 높은 성공률과 기능 범위를 기록하며, 이는 해당 모델이 게임 목표를 완수하는 동시에 의미 있는 상태들을 방문할 수 있음을 나타낸다. 이는 에이전트가 행동의 정확성을 검증하기 위해 핵심 기능들을 테스트해야 한다는 회귀 테스트(Regression Testing) 개념과 잘 부합하며, 우리의 방법이 환경 내의 기능적 구조를 이해하고 재현할 수 있음을 시사한다. GC 방법들 중에서 GC-DT는 GC-IQL 및 GC-BC보다 우수한 성능을 보였다. 이러한 개선은 컨텍스트 윈도우(Context Window)의 사용 덕분으로, 이를 통해 모델이 더 긴 시간적 지평(Temporal Horizons)에 걸쳐 추론하고 목표 함수를 더 효과적으로 조건화할 수 있기 때문이다. 전반적으로, 코드 인식 기능을 갖춘 GC 에이전트는 단순한 BC 및 목표 비인지(Goal-agnostic) 베이스라인보다 우수한 일반화 및 목표 추종 능력을 보여준다.

GC-BC GC-IQL GC-DT BC
Simple CA2 Simple CA2 Simple CA2
Success
Rate Crafter 39.67±0.5239.67\pm 0.52 42.65±0.72\mathbf{42.65\pm 0.72} 41.78±0.6041.78\pm 0.60 43.28±0.63\mathbf{43.28\pm 0.63} 48.78±0.3548.78\pm 0.35 56.47±0.49\mathbf{56.47\pm 0.49}    -
Godot 25.45±0.2925.45\pm 0.29 26.93±0.50\mathbf{26.93\pm 0.50} 23.88±0.5223.88\pm 0.52 25.56±0.53\mathbf{25.56\pm 0.53} 41.22±0.5441.22\pm 0.54 47.15±0.77\mathbf{47.15\pm 0.77}    -
Episode
Return Crafter 1.62±0.161.62\pm 0.16 2.18±0.15\mathbf{2.18\pm 0.15} 3.63±0.183.63\pm 0.18 4.08±0.19\mathbf{4.08\pm 0.19} 4.90±0.584.90\pm 0.58 5.12±0.60\mathbf{5.12\pm 0.60} 1.65±0.311.65\pm 0.31
Godot 8.17±0.39\mathbf{8.17\pm 0.39} 8.12±0.798.12\pm 0.79 8.13±0.37\mathbf{8.13\pm 0.37} 8.08±0.198.08\pm 0.19 13.12±0.5913.12\pm 0.59 16.15±1.12\mathbf{16.15\pm 1.12} 7.90±1.517.90\pm 1.51
Function
Coverage Crafter 81.24±0.4281.24\pm 0.42 81.93±0.37\mathbf{81.93\pm 0.37} 80.74±0.7280.74\pm 0.72 84.20±0.63\mathbf{84.20\pm 0.63} 92.96±0.0092.96\pm 0.00 96.92±0.00\mathbf{96.92\pm 0.00} 79.44±2.1379.44\pm 2.13
Godot 61.23±0.47\mathbf{61.23\pm 0.47} 61.18±0.6861.18\pm 0.68 60.97±0.3760.97\pm 0.37 61.86±0.55\mathbf{61.86\pm 0.55} 71.96±0.2471.96\pm 0.24 79.49±1.88\mathbf{79.49\pm 1.88} 60.10±1.1260.10\pm 1.12
표 1. Crafter 및 Godot 환경에서 다양한 오프라인 에이전트(offline agents)의 성능을 세 가지 지표인 성공률(Success Rate), 에피소드 수익(Episode Return), 그리고 함수 커버리지(Function Coverage)를 통해 평가한 결과이다. "Simple"은 코드 인지 능력이 없는(non-code-aware) 에이전트를 의미하며, "CA2"는 코드 인지형(code-aware) 변형을 의미한다. 여기서, BC 에이전트는 목표 함수(goal function)를 조건으로 하지 않으므로, 해당 성공률은 공란으로 표시된다.

7.2. 문맥 길이(Context Length)의 영향

우리는 디시전 트랜스포머(Decision Transformer, Table 2)에서 컨텍스트 길이(context length)가 미치는 영향을 연구한다. LL의 선택은 각 환경에 해당하는 에피소드 길이를 기준으로 결정되었다. CA2가 없을 경우, 성능은 컨텍스트가 10-20 정도일 때 포화 상태에 도달한다. 반면 CA2가 있으면 더 긴 컨텍스트(20-30)에서 더 나은 성능을 보이며, 특히 Godot 환경에서는 성공률이 30%에서 47%로 급증한다. 이는 코드 인식 에이전트(code-aware agents)가 더 긴 실행 이력을 이해하고 시간에 따라 더 나은 결정을 내리기 위해 더 많은 컨텍스트가 필요함을 보여준다.

GC-DT
L 2L 3L
Simple CA2 Simple CA2 Simple CA2
Success
Rate Crafter 48.62,±0.6448.62,\pm 0.64 55.62±1.33\mathbf{55.62\pm 1.33} 48.71±0.6648.71\pm 0.66 56.60±0.53\mathbf{56.60\pm 0.53} 48.78±0.3548.78\pm 0.35 56.47±0.49\mathbf{56.47\pm 0.49}
Godot 26.67±0.9526.67\pm 0.95 30.90±0.76\mathbf{30.90\pm 0.76} 36.41±0.8536.41\pm 0.85 40.14±2.04\mathbf{40.14\pm 2.04} 41.22±0.8841.22\pm 0.88 47.15±0.77\mathbf{47.15\pm 0.77}
표 2. 이 표은 다양한 문맥 길이(context lengths)에 따른 디시전 트랜스포머(Decision Transformers)의 성능을 요약한다. Crafter의 경우 L=10L=10 이고, Godot의 경우 L=5L=5 이다.

7.3. 설계 선택 (Design Choice)

마지막으로, 우리는 오프라인 절제 연구(ablation study)를 통해 호출 스택(call stack) 정보를 통합하기 위한 다양한 아키텍처 설계를 평가하였으며(표 3), 성공률을 주요 지표로 사용하였다. 연구 결과, 호출 스택을 단순히 임베딩(embedding)하는 방식은 성능이 저조한 것으로 나타났다. 반면, 멀티 헤드 셀프 어텐션(Multi-Head Self Attention, MHSA)을 추가한 GC-DT + MHSA 방식은 우리의 가장 우수한 코드 인식 에이전트(Code-Aware Agent, CA2) 레이어로, Crafter(56%)와 Godot(47%) 모두에서 가장 높은 성공률을 기록하며 성능을 유의미하게 향상시켰다. 이러한 결과는 호출 스택 요소 간의 의존성을 포착하는 것이 중요하며, 우리 환경에서는 MHSA가 이를 수행하기에 특히 적합하다는 점을 강조한다.

GC-DT (CA2)
Emb Linear MHSA
Crafter 47.63±1.2847.63\pm 1.28 49.15±0.8749.15\pm 0.87 56.90±1.01\mathbf{56.90\pm 1.01}
Godot 34.53±1.4634.53\pm 1.46 35.15±1.1635.15\pm 1.16 39.40±6.78\mathbf{39.40\pm 6.78}
표 3. 이 표는 다양한 인코더(Encoder) 선택에 따른 성공률(Success Rate)을 요약한 것이다. (결과는 세 가지 문맥 길이(context lengths)에 대해 평균을 낸 값임)

8. CONCLUSION

본 연구에서는 우리의 인과적 자기회귀 구조(Causal Auto-regressive Architecture)가 특히 더 긴 문맥(context) 및 자기주의(self-attention)와 결합될 때 에이전트의 성능을 향상시킨다는 것을 보여준다. 연구 결과에 따르면, 콜 스택(call-stack) 정보와 같은 코드 수준의 신호를 통합하는 것이 에이전트가 자신의 행동이 게임 로직과 어떻게 연관되는지 더 잘 이해하도록 돕고, 결과적으로 더 구조화되고 효과적인 테스트를 가능하게 한다. 더 넓은 관점에서, 이러한 접근 방식은 수동 플레이 테스트(manual playtesting)에 대한 의존도를 줄이는 자동화된 코드 인식(code-aware) 게임 테스트를 향해 나아가는 것이다. 현대 게임 코드베이스의 방대한 규모로 인해 확장성(scalability)이 여전히 과제로 남아 있지만, 에이전트가 특정 기능이나 하위 모듈에 집중하는 모듈형 테스트 전략은 시스템을 더욱 실용적으로 만들 수 있다. 개발 초기 단계에 코드 인식 에이전트를 통합하면 더 빠른 반복 작업, 표적 디버깅(targeted debugging), 그리고 게임 구성 요소에 대한 더 신뢰할 수 있는 검증을 가능하게 할 수 있다.

9. 한계점 및 향후 과제

우리 접근 방식의 주요 한계점은 복잡한 게임 환경에서 실시간 함수 수준의 코드 커버리지(code coverage)와 호출 스택(call stack) 정보를 수집하는 데 따르는 높은 계산 비용이다. 이러한 인스트루먼테이션(instrumentation, 코드 삽입)은 런타임 오버헤드(runtime overhead)를 발생시키며, 수많은 함수와 이벤트가 존재하는 대규모 게임으로의 확장성을 제한한다. 더욱이, 모든 함수를 동일하게 취급하는 것은 실제 개발자의 우선순위를 반영하지 못할 수 있다. 향후 연구에서는 더 작고 모듈화된 환경에 집중하고, 개발자가 지정하거나 우선순위가 높은 함수만을 추적하는 선택적 인스트루먼테이션을 탐구할 것이다. 이는 오버헤드를 줄이고 실질적인 관련성을 높이며, 실제 게임 개발에서 프레임워크의 확장성을 더 개선할 것이다.

ACKNOWLEDGMENT

본 프로젝트 전반에 걸쳐 유익한 토론과 피드백을 제공해 준 Sarra Habchi, Ian Guak, Alessandro Palmas, 그리고 Gabriel Robert에게 감사를 표합니다. 또한 원고에 대해 도움이 되는 의견을 주신 Harley Wiltzer와 Mahtab (Mattie) Nejati에게도 감사를 표합니다. 본 연구는 Mitacs PhD Accelerate Grant의 지원을 받아 수행되었습니다. 또한, 이 연구는 Ubisoft (La Forge)에서 제공한 컴퓨팅 자원, 소프트웨어 및 기술적 지원을 통해 일부 수행되었습니다.

References

  • [1] S. Agarwal, C. Herrmann, G. Wallner, 및 F. Beck (2020) 2D 사이드 스크롤링(side-scrolling) 게임의 AI 플레이테스팅 데이터 시각화. 2020 IEEE 게임 컨퍼런스(Conference on Games, CoG) 발표, 제 0권, 572–575쪽. 외부 링크: Document 인용 횟수: §2.
  • [2] P. V. Amadori, T. Bradley, R. Spick, and G. Moss (2024) 자동화된 게임 테스트를 위한 강건한 모방 학습(Robust imitation learning). 외부 링크: 2401.04572, Link 인용 횟수: §2.
  • [3] J. L. Ba, J. R. Kiros, 그리고 G. E. Hinton (2016) 레이어 정규화(Layer normalization). 외부 링크: 1607.06450, Link 인용 횟수: §4.2.
  • [4] B. Baker, I. Akkaya, P. Zhokhov, J. Huizinga, J. Tang, A. Ecoffet, B. Houghton, R. Sampedro, 및 J. Clune (2022) 비디오 사전학습(Video pretraining, VPT): 비정답 온라인 비디오를 시청함으로써 행동 학습하기. 외부 링크: 2206.11795, Link 인용 횟수: §2.
  • [5] E. Beeching, J. Debangoye, O. Simonin, and C. Wolf (2021) Godot reinforcement learning agents. 외부 링크: 2112.03636, 인용 횟수: §1, §5.1, §5. Link
  • [6] J. Bergdahl, C. Gordillo, K. Tollmar, 그리고 L. Gisslén (2021) 심층 강화 학습(Deep Reinforcement Learning)을 활용한 자동화된 게임 테스트 증강. 외부 링크: 2103.15819, Link 인용 횟수: §2.
  • [7] G. Brockman, V. Cheung, L. Pettersson, J. Schneider, J. Schulman, J. Tang, and W. Zaremba (2016) Openai gym. arXiv preprint arXiv:1606.01540. 인용 횟수: §1.
  • [8] K. Chen, Y. Li, Y. Chen, C. Fan, Z. Hu, and W. Yang (2021) GLIB: towards automated test oracle for graphically-rich applications. In Proceedings of the 29th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, ESEC/FSE ’21, pp. 1093–1104. 외부 링크: Link, Document 인용 횟수: §2.
  • [9] L. Chen, K. Lu, A. Rajeswaran, K. Lee, A. Grover, M. Laskin, P. Abbeel, A. Srinivas, and I. Mordatch (2021) Decision Transformer: Reinforcement Learning via Sequence Modeling (시퀀스 모델링을 통한 강화 학습). Advances in Neural Information Processing Systems 34, pp. 15084–15097. 인용 횟수: §3, §4.
  • [10] S. Fujimoto 및 S. S. Gu (2021) 오프라인 강화학습(offline reinforcement learning)에 대한 최소주의적 접근. 외부 링크: 2106.06860, Link 인용 횟수: §3.
  • [11] J. Gillberg, J. Bergdahl, A. Sestini, A. Eakins, 및 L. Gisslén (2023) AAA 게임의 게임 테스트를 위한 강화 학습(Reinforcement Learning) 에이전트 배치의 기술적 과제. 2023 IEEE 게임 컨퍼런스(Conference on Games, CoG) 발표. 외부 링크: Document 인용: §1.
  • [12] C. Gordillo, J. Bergdahl, K. Tollmar, and L. Gisslén (2021) 호기심 기반 강화 학습(Curiosity-driven reinforcement learning) 에이전트를 통한 플레이테스팅(Playtesting) 범위 개선. 외부 링크: 2103.13798, Link 인용 횟수: §1, §2.
  • [13] D. Hafner, J. Pasukonis, J. Ba, and T. Lillicrap (2024) 다양한 도메인을 정복하는 월드 모델(world models). 외부 링크: 2301.04104, Link 인용 횟수: §1.
  • [14] D. Hafner (2022) 에이전트 능력의 스펙트럼 벤치마킹(Benchmarking the spectrum of agent capabilities). 외부 링크: 2109.06780, Link 인용 횟수: §1, §5.
  • [15] I. Kostrikov, A. Nair, and S. Levine (2021) Offline reinforcement learning with implicit q-learning. 외부 링크: 2110.06169, 인용 횟수: §3. Link
  • [16] P. Le Pelletier de Woillemont, R. Labory, V. Corruble (2022). 강화 학습(Reinforcement Learning, RL) 기반의 인간 유사 플레이 스타일 생성(Human-like Play-styles Generation)을 통한 자동화된 플레이 테스트(Automated Play-testing). AAAI 인공지능 및 인터랙티브 디지털 엔터테인먼트 컨퍼런스 논문집 18 (1), pp. 146–154. 외부 링크: ISSN 2326-909X, Link, Document 인용 횟수: §2.
  • [17] S. Lifshitz, K. Paster, H. Chan, J. Ba, and S. McIlraith (2024) STEVE-1: 마인크래프트(Minecraft) 내 텍스트-행동(text-to-behavior) 생성을 위한 생성 모델. 외부 링크: 2306.00937, Link 인용 횟수: §2.
  • [18] G. Liu, M. Cai, L. Zhao, T. Qin, A. Brown, J. Bischoff, 및 T. Liu (2022) Inspector: 탐색, 탐지 및 조사를 통한 픽셀 기반 자동 게임 테스트(pixel-based automated game testing). 외부 링크: 2207.08379, Link 인용 횟수: §1, §2.
  • [19] C. Lynch, M. Khansari, T. Xiao, V. Kumar, J. Tompson, S. Levine, and P. Sermanet (2019) 놀이를 통한 잠재 계획(latent plans) 학습. 외부 링크: 1903.01973, Link 인용 횟수: §3.
  • [20] V. Mnih, K. Kavukcuoglu, D. Silver, A. Graves, I. Antonoglou, D. Wierstra, and M. Riedmiller (2013) Deep reinforcement learning(심층 강화 학습)을 이용한 아타리 게임 플레이. arXiv preprint arXiv:1312.5602. 인용: §1, §1.
  • [21] J. S. Park, J. C. O’Brien, C. J. Cai, M. R. Morris, P. Liang, 및 M. S. Bernstein (2023) 생성형 에이전트: 인간 행동의 상호작용적 시뮬라크르(simulacra). 외부 링크: 2304.03442, 인용 횟수: §2. Link
  • [22] C. Politowski, F. Petrillo, Y. Guéhéneuc (2021) 비디오 게임 테스트에 관한 조사(A survey of video game testing). 외부 링크: 2103.06431, 인용 횟수: §1. Link
  • [23] S. Qi, S. Chen, Y. Li, X. Kong, J. Wang, B. Yang, P. Wong, Y. Zhong, X. Zhang, Z. Zhang, N. Liu, W. Wang, Y. Yang, 및 S. Zhu (2024) CivRealm: 의사결정 에이전트(decision-making agents)를 위한 문명 내 학습 및 추론 여정. 외부 링크: 2401.10568, Link 인용 횟수: §2.
  • [24] Y. Qin, Y. Ye, J. Fang, H. Wang, S. Liang, S. Tian, J. Zhang, J. Li, Y. Li, S. Huang, W. Zhong, K. Li, J. Yang, Y. Miao, W. Lin, L. Liu, X. Jiang, Q. Ma, J. Li, X. Xiao, K. Cai, C. Li, Y. Zheng, C. Jin, C. Li, X. Zhou, M. Wang, H. Chen, Z. Li, H. Yang, H. Liu, F. Lin, T. Peng, X. Liu, and G. Shi (2025) UI-tars: pioneering automated gui interaction with native agents. 외부 링크: 2501.12326, 인용 횟수: §2. Link
  • [25] A. Sestini, L. Gisslén, J. Bergdahl, K. Tollmar, 및 A. D. Bagdanov (2024) 호기심 조건부 근접 궤적(curiosity-conditioned proximal trajectories)을 활용한 자동화된 게임플레이 테스트 및 검증. IEEE Transactions on Games 16 (1), pp. 113–126. 외부 링크: Document 인용 횟수: §1, §2.
  • [26] S. Team, M. A. Raad, A. Ahuja, C. Barros, F. Besse, A. Bolt, A. Bolton, B. Brownfield, G. Buttimore, M. Cant, S. Chakera, S. C. Y. Chan, J. Clune, A. Collister, V. Copeman, A. Cullum, I. Dasgupta, D. de Cesare, J. D. Trapani, Y. Donchev, E. Dunleavy, M. Engelcke, R. Faulkner, F. Garcia, C. Gbadamosi, Z. Gong, L. Gonzales, K. Gupta, K. Gregor, A. O. Hallingstad, T. Harley, S. Haves, F. Hill, E. Hirst, D. A. Hudson, J. Hudson, S. Hughes-Fitt, D. J. Rezende, M. Jasarevic, L. Kampis, R. Ke, T. Keck, J. Kim, O. Knagg, K. Kopparapu, R. Lawton, A. Lampinen, S. Legg, A. Lerchner, M. Limont, Y. Liu, M. Loks-Thompson, J. Marino, K. M. Cussons, L. Matthey, S. Mcloughlin, P. Mendolicchio, H. Merzic, A. Mitenkova, A. Moufarek, V. Oliveira, Y. Oliveira, H. Openshaw, R. Pan, A. Pappu, A. Platonov, O. Purkiss, D. Reichert, J. Reid, P. H. Richemond, T. Roberts, G. Ruscoe, J. S. Elias, T. Sandars, D. P. Sawyer, T. Scholtes, G. Simmons, D. Slater, H. Soyer, H. Strathmann, P. Stys, A. C. Tam, D. Teplyashin, T. Terzi, D. Vercelli, B. Vujatovic, M. Wainwright, J. X. Wang, Z. Wang, D. Wierstra, D. Williams, N. Wong, S. York, and N. Young (2024) 다수의 시뮬레이션 환경에서 지시 가능한 에이전트(instructable agents) 확장하기. 외부 링크: 2404.10179, Link 인용 횟수: §2.
  • [27] A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones, A. N. Gomez, L. Kaiser, and I. Polosukhin (2023) Attention is all you need. 외부 링크: 1706.03762, 인용 횟수: §3, 3rd item. Link
  • [28] O. Vinyals, I. Babuschkin, W. M. Czarnecki, M. Mathieu, A. Dudzik, J. Chung, D. H. Choi, R. Powell, T. Ewalds, P. Georgiev, et al. (2019) 멀티 에이전트 강화 학습(Multi-Agent Reinforcement Learning)을 이용한 스타크래프트 II의 그랜드마스터 수준 구현. Nature 575 (7782), pp. 350–354. 인용 횟수: §2.
  • [29] C. Wang, L. Tang, M. Yuan, J. Yu, X. Xie, and J. Bu (2025) 자동화된 비디오 게임 테스트를 위한 LLM 에이전트(llm agents) 활용. arXiv preprint arXiv:2509.22170. 인용 횟수: §2.
  • [30] G. Wang, Y. Xie, Y. Jiang, A. Mandlekar, C. Xiao, Y. Zhu, L. Fan, and A. Anandkumar (2023) Voyager: an open-ended embodied agent with large language models. 외부 링크: 2305.16291, 인용 횟수: §2. Link
  • [31] Y. Zheng, X. Xie, T. Su, L. Ma, J. Hao, Z. Meng, Y. Liu, R. Shen, Y. Chen, 및 C. Fan (2019) Wuji: 진화적 심층 강화 학습(Evolutionary Deep Reinforcement Learning)을 이용한 온라인 전투 게임의 자동 테스트. 2019년 제34회 IEEE/ACM 자동 소프트웨어 공학 국제 컨퍼런스(ASE), Vol. , pp. 772–784. 외부 링크: Document 인용 횟수: §2.

부록 A CA2 추가 세부 사항

A.1. HYPERPARAMETERS

우리는 코드 인식 에이전트(Code-Aware Agent, GC-DT-CA2)를 학습시키는 데 사용된 하이퍼파라미터(hyperparameters, Table 5)를 제시한다. 이 구성은 구조화된 게임 환경에서 시간적 의존성(temporal dependencies), 프로그램 구조, 그리고 목표 표현(goal representations)을 효과적으로 포착하기 위해 맞춤화된 설계 선택을 반영한다. 우리는 임베딩 차원(embedding dimensions), 트랜스포머 깊이(transformer depth), 어텐션 헤드(attention heads)와 같은 모델 아키텍처 파라미터와 더불어, 최적화 도구(optimizer) 파라미터, 학습률 스케줄러(learning rate scheduler), 드롭아웃(dropout)을 포함한 학습 설정을 상세히 기술한다.

A.2. 환경 세부 사항 (ENVIRONMENT DETAILS)

표 4. Crafter 및 Godot의 환경 세부 사항
Attribute Crafter Godot
State Type Image Vector
State Dimension (ss) 64×64×364\times 64\times 3 65×165\times 1
Action Space Discrete [0, 16] Continuous [-1,1]
Action Dimension (aa) 17 2
Number of Functions (ff) 293 34
Number of Goals (gg) 94 24
Code Trace (s𝖼𝗈𝖽𝖾s^{\mathsf{code}}) [f1,f2,…,fF][f^{1},f^{2},\ldots,f^{F}] [f1,f2,…,fF][f^{1},f^{2},\ldots,f^{F}]
Function calls per step (FF) [0,600][0,600] [0,15][0,15]
표 5. 디시전 트랜스포머(Decision Transformer) 하이퍼파라미터
Parameter Value / Description
General Settings
Agent Type Simple / cs
Batch Size 128
Epochs 10
Training Steps 10000
Evaluation Episodes 10
GPT Model Configuration
Context Length L / 2L / 3L
Value of LL 5 (Godot) / 10 (Crafter)
Token Dimension 128
Transformer Layers (n​_​l​a​y​e​rn\_layer) 2
Attention Heads (n​_​h​e​a​dn\_head) 2
Dropout 0.1
Learning Rate 3×10−43\times 10^{-4}
Adam Betas (0.9, 0.95)
Gradient Norm Clip 1.0
Weight Decay 0.1
LR Scheduler Linear warmup + cosine decay
Image Encoder (Crafter)
Encoder Channels 32, 64, 64
Encoder Filter Sizes 8×88\times 8, 4×44\times 4, 3×33\times 3
Encoder Strides 4, 2, 1
State Encoder (Godot)
Number of Linear Layer 2
Hidden Dimension 1024
Call Stack Encoder: (MHSA) • ‣ 4.1
Function Embedding Dimension 128
Goal Embedding Dimension 128
Number of Layers 11
Number of heads 22

표 4은 환경별 세부 정보를 제공한다. “단계당 함수 호출(Function calls per step)” FF은 단일 행동에 의해 트리거되는 함수의 총 개수를 나타낸다. Crafter의 경우, 게임 시작 시 초기화 과정으로 인해 이 수치가 상대적으로 높지만, 일반적으로 평균적으로 단계당 약 100~200회의 함수 호출 수준으로 낮아진다. 이와 대조적으로, Godot에서는 Godot 엔진 코드베이스 내에서 도구화(instrumentation)에 대한 접근이 제한적이기 때문에 해당 수치가 현저히 낮다.

우리는 코드 인식 에이전트(Code-Aware Agent, GC-DT-CA2)를 학습시키는 데 사용된 하이퍼파라미터(hyperparameters, Table 5)를 제시한다. 이 구성은 구조화된 게임 환경에서 시간적 의존성(temporal dependencies), 프로그램 구조, 그리고 목표 표현(goal representations)을 효과적으로 포착하기 위해 맞춤화된 설계 선택을 반영한다. 우리는 임베딩 차원(embedding dimensions), 트랜스포머 깊이(transformer depth), 어텐션 헤드(attention heads)와 같은 모델 아키텍처 파라미터와 더불어, 옵티마이저(optimizer) 파라미터, 학습률 스케줄러(learning rate scheduler), 드롭아웃(dropout)을 포함한 학습 설정을 상세히 기술한다.

A.3. LATENCY

우리의 구현은 엔진의 호출 스택 인터페이스(call stack interface)에서 활성 함수 식별자를 직접 기록하는 경량 도구화(instrumentation)를 사용하며, 이는 최소한의 오버헤드(overhead)를 발생시킨다. 우리는 현재 코드 도구화의 적용 여부에 따른 환경 단계당 환경 지연 시간(Environment latency time)을 프로파일링하고 있다. 실험 결과, 도구화는 Crafter 및 Godot 환경 모두에서 5~8% 미만의 오버헤드를 추가하는 것으로 나타났으며, 이는 전체 시뮬레이션 시간에 비해 무시할 수 있는 수준이다. 이는 오버헤드가 도구화 자체보다는 환경 시뮬레이션에 의해 지배된다는 것을 시사한다.

A.4. 연산 요구사항 (COMPUTE REQUIREMENTS)

모든 실험은 NVIDIA A4000 GPU와 16GB 메모리가 장착된 장비에서 수행되었다. CA2 에이전트(agent)의 최대 메모 사용량은 약 ∼13.6​G​B\sim 13.6GB이었으며, 단순 에이전트(simple agent)는 약 ∼4​G​B\sim 4GB이 필요했다.

A.5. CODE

CA2 에이전트(agent)의 코드는 게재 승인 시 공개될 예정이다.